From 04d300750a626d564e63e0d9a90d1bc59228e408 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Mon, 9 Sep 2024 19:31:35 +0800 Subject: [PATCH 01/29] feat: add puppet --- extensions/puppet/.gitignore | 7 + extensions/puppet/.pnp.cjs | 13790 ++++++++++++++++ extensions/puppet/.pnp.loader.mjs | 2047 +++ extensions/puppet/.prettierignore | 7 + extensions/puppet/Anchor.toml | 22 + extensions/puppet/Cargo.lock | 2727 +++ extensions/puppet/Cargo.toml | 14 + extensions/puppet/migrations/deploy.ts | 12 + extensions/puppet/package.json | 22 + extensions/puppet/pnpm-lock.yaml | 1432 ++ extensions/puppet/programs/puppet/Cargo.toml | 21 + extensions/puppet/programs/puppet/Xargo.toml | 2 + .../puppet/programs/puppet/src/errors.rs | 22 + .../programs/puppet/src/instructions/bind.rs | 51 + .../src/instructions/check_bound_by_device.rs | 16 + .../src/instructions/check_bound_by_nft.rs | 10 + .../src/instructions/get_device_by_nft.rs | 10 + .../src/instructions/get_nft_by_device.rs | 10 + .../programs/puppet/src/instructions/mod.rs | 11 + extensions/puppet/programs/puppet/src/lib.rs | 33 + .../puppet/src/state/device_binding.rs | 7 + .../puppet/programs/puppet/src/state/mod.rs | 5 + .../programs/puppet/src/state/nft_binding.rs | 7 + extensions/puppet/tests/puppet.ts | 189 + extensions/puppet/tsconfig.json | 10 + 25 files changed, 20484 insertions(+) create mode 100644 extensions/puppet/.gitignore create mode 100755 extensions/puppet/.pnp.cjs create mode 100644 extensions/puppet/.pnp.loader.mjs create mode 100644 extensions/puppet/.prettierignore create mode 100644 extensions/puppet/Anchor.toml create mode 100644 extensions/puppet/Cargo.lock create mode 100644 extensions/puppet/Cargo.toml create mode 100644 extensions/puppet/migrations/deploy.ts create mode 100644 extensions/puppet/package.json create mode 100644 extensions/puppet/pnpm-lock.yaml create mode 100644 extensions/puppet/programs/puppet/Cargo.toml create mode 100644 extensions/puppet/programs/puppet/Xargo.toml create mode 100644 extensions/puppet/programs/puppet/src/errors.rs create mode 100644 extensions/puppet/programs/puppet/src/instructions/bind.rs create mode 100644 extensions/puppet/programs/puppet/src/instructions/check_bound_by_device.rs create mode 100644 extensions/puppet/programs/puppet/src/instructions/check_bound_by_nft.rs create mode 100644 extensions/puppet/programs/puppet/src/instructions/get_device_by_nft.rs create mode 100644 extensions/puppet/programs/puppet/src/instructions/get_nft_by_device.rs create mode 100644 extensions/puppet/programs/puppet/src/instructions/mod.rs create mode 100644 extensions/puppet/programs/puppet/src/lib.rs create mode 100644 extensions/puppet/programs/puppet/src/state/device_binding.rs create mode 100644 extensions/puppet/programs/puppet/src/state/mod.rs create mode 100644 extensions/puppet/programs/puppet/src/state/nft_binding.rs create mode 100644 extensions/puppet/tests/puppet.ts create mode 100644 extensions/puppet/tsconfig.json diff --git a/extensions/puppet/.gitignore b/extensions/puppet/.gitignore new file mode 100644 index 0000000..2e0446b --- /dev/null +++ b/extensions/puppet/.gitignore @@ -0,0 +1,7 @@ +.anchor +.DS_Store +target +**/*.rs.bk +node_modules +test-ledger +.yarn diff --git a/extensions/puppet/.pnp.cjs b/extensions/puppet/.pnp.cjs new file mode 100755 index 0000000..cb530c6 --- /dev/null +++ b/extensions/puppet/.pnp.cjs @@ -0,0 +1,13790 @@ +#!/usr/bin/env node +/* eslint-disable */ +"use strict"; + +function $$SETUP_STATE(hydrateRuntimeState, basePath) { + return hydrateRuntimeState(JSON.parse('{\ + "__info": [\ + "This file is automatically generated. Do not touch it, or risk",\ + "your modifications being lost. We also recommend you not to read",\ + "it either without using the @yarnpkg/pnp package, as the data layout",\ + "is entirely unspecified and WILL change from a version to another."\ + ],\ + "dependencyTreeRoots": [\ + {\ + "name": "root-workspace-0b6124",\ + "reference": "workspace:."\ + }\ + ],\ + "enableTopLevelFallback": true,\ + "ignorePatternData": "(^(?:\\\\.yarn\\\\/sdks(?:\\\\/(?!\\\\.{1,2}(?:\\\\/|$))(?:(?:(?!(?:^|\\\\/)\\\\.{1,2}(?:\\\\/|$)).)*?)|$))$)",\ + "fallbackExclusionList": [\ + ["root-workspace-0b6124", ["workspace:."]]\ + ],\ + "fallbackPool": [\ + ],\ + "packageRegistryData": [\ + [null, [\ + [null, {\ + "packageLocation": "./",\ + "packageDependencies": [\ + ["@coral-xyz/anchor", "npm:0.30.1"],\ + ["@solana/spl-token", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:0.4.8"],\ + ["@solana/web3.js", "npm:1.95.3"],\ + ["@types/bn.js", "npm:5.1.5"],\ + ["@types/chai", "npm:4.3.19"],\ + ["@types/mocha", "npm:9.1.1"],\ + ["chai", "npm:4.5.0"],\ + ["mocha", "npm:9.2.2"],\ + ["prettier", "npm:2.8.8"],\ + ["typescript", "patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587"]\ + ],\ + "linkType": "SOFT"\ + }]\ + ]],\ + ["@babel/runtime", [\ + ["npm:7.25.6", {\ + "packageLocation": "./.yarn/cache/@babel-runtime-npm-7.25.6-6725f0979a-ee1a69d3ac.zip/node_modules/@babel/runtime/",\ + "packageDependencies": [\ + ["@babel/runtime", "npm:7.25.6"],\ + ["regenerator-runtime", "npm:0.14.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@coral-xyz/anchor", [\ + ["npm:0.30.1", {\ + "packageLocation": "./.yarn/cache/@coral-xyz-anchor-npm-0.30.1-a611cfd278-eb23f65c81.zip/node_modules/@coral-xyz/anchor/",\ + "packageDependencies": [\ + ["@coral-xyz/anchor", "npm:0.30.1"],\ + ["@coral-xyz/anchor-errors", "npm:0.30.1"],\ + ["@coral-xyz/borsh", "virtual:a611cfd278c4d8a297b1ef0935be119209af2444e0d0255039fdb97aea2daf321ff934bb7d3fd8e0c029a9b8f22090f93f456cb99acfe4e696ec77fab8240b5f#npm:0.30.1"],\ + ["@noble/hashes", "npm:1.5.0"],\ + ["@solana/web3.js", "npm:1.95.3"],\ + ["bn.js", "npm:5.2.1"],\ + ["bs58", "npm:4.0.1"],\ + ["buffer-layout", "npm:1.2.2"],\ + ["camelcase", "npm:6.3.0"],\ + ["cross-fetch", "npm:3.1.8"],\ + ["crypto-hash", "npm:1.3.0"],\ + ["eventemitter3", "npm:4.0.7"],\ + ["pako", "npm:2.1.0"],\ + ["snake-case", "npm:3.0.4"],\ + ["superstruct", "npm:0.15.5"],\ + ["toml", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@coral-xyz/anchor-errors", [\ + ["npm:0.30.1", {\ + "packageLocation": "./.yarn/cache/@coral-xyz-anchor-errors-npm-0.30.1-3d4861734e-52efca5a9c.zip/node_modules/@coral-xyz/anchor-errors/",\ + "packageDependencies": [\ + ["@coral-xyz/anchor-errors", "npm:0.30.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@coral-xyz/borsh", [\ + ["npm:0.30.1", {\ + "packageLocation": "./.yarn/cache/@coral-xyz-borsh-npm-0.30.1-1493a86d3d-eefe1aebc4.zip/node_modules/@coral-xyz/borsh/",\ + "packageDependencies": [\ + ["@coral-xyz/borsh", "npm:0.30.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:a611cfd278c4d8a297b1ef0935be119209af2444e0d0255039fdb97aea2daf321ff934bb7d3fd8e0c029a9b8f22090f93f456cb99acfe4e696ec77fab8240b5f#npm:0.30.1", {\ + "packageLocation": "./.yarn/__virtual__/@coral-xyz-borsh-virtual-de6b9f6553/0/cache/@coral-xyz-borsh-npm-0.30.1-1493a86d3d-eefe1aebc4.zip/node_modules/@coral-xyz/borsh/",\ + "packageDependencies": [\ + ["@coral-xyz/borsh", "virtual:a611cfd278c4d8a297b1ef0935be119209af2444e0d0255039fdb97aea2daf321ff934bb7d3fd8e0c029a9b8f22090f93f456cb99acfe4e696ec77fab8240b5f#npm:0.30.1"],\ + ["@solana/web3.js", "npm:1.95.3"],\ + ["@types/solana__web3.js", null],\ + ["bn.js", "npm:5.2.1"],\ + ["buffer-layout", "npm:1.2.2"]\ + ],\ + "packagePeers": [\ + "@solana/web3.js",\ + "@types/solana__web3.js"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@isaacs/cliui", [\ + ["npm:8.0.2", {\ + "packageLocation": "./.yarn/cache/@isaacs-cliui-npm-8.0.2-f4364666d5-4a473b9b32.zip/node_modules/@isaacs/cliui/",\ + "packageDependencies": [\ + ["@isaacs/cliui", "npm:8.0.2"],\ + ["string-width", "npm:5.1.2"],\ + ["string-width-cjs", [\ + "string-width",\ + "npm:4.2.3"\ + ]],\ + ["strip-ansi", "npm:7.1.0"],\ + ["strip-ansi-cjs", [\ + "strip-ansi",\ + "npm:6.0.1"\ + ]],\ + ["wrap-ansi", "npm:8.1.0"],\ + ["wrap-ansi-cjs", [\ + "wrap-ansi",\ + "npm:7.0.0"\ + ]]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@noble/curves", [\ + ["npm:1.5.0", {\ + "packageLocation": "./.yarn/cache/@noble-curves-npm-1.5.0-0b83ccd02e-a43464c5db.zip/node_modules/@noble/curves/",\ + "packageDependencies": [\ + ["@noble/curves", "npm:1.5.0"],\ + ["@noble/hashes", "npm:1.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@noble/hashes", [\ + ["npm:1.4.0", {\ + "packageLocation": "./.yarn/cache/@noble-hashes-npm-1.4.0-9389282fd6-8ba816ae26.zip/node_modules/@noble/hashes/",\ + "packageDependencies": [\ + ["@noble/hashes", "npm:1.4.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:1.5.0", {\ + "packageLocation": "./.yarn/cache/@noble-hashes-npm-1.5.0-87c768d742-9cc031d5c8.zip/node_modules/@noble/hashes/",\ + "packageDependencies": [\ + ["@noble/hashes", "npm:1.5.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@npmcli/agent", [\ + ["npm:2.2.2", {\ + "packageLocation": "./.yarn/cache/@npmcli-agent-npm-2.2.2-e2f559d6c0-67de7b88cc.zip/node_modules/@npmcli/agent/",\ + "packageDependencies": [\ + ["@npmcli/agent", "npm:2.2.2"],\ + ["agent-base", "npm:7.1.1"],\ + ["http-proxy-agent", "npm:7.0.2"],\ + ["https-proxy-agent", "npm:7.0.5"],\ + ["lru-cache", "npm:10.4.3"],\ + ["socks-proxy-agent", "npm:8.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@npmcli/fs", [\ + ["npm:3.1.1", {\ + "packageLocation": "./.yarn/cache/@npmcli-fs-npm-3.1.1-c19bd09f3c-d960cab4b9.zip/node_modules/@npmcli/fs/",\ + "packageDependencies": [\ + ["@npmcli/fs", "npm:3.1.1"],\ + ["semver", "npm:7.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@pkgjs/parseargs", [\ + ["npm:0.11.0", {\ + "packageLocation": "./.yarn/cache/@pkgjs-parseargs-npm-0.11.0-cd2a3fe948-6ad6a00fc4.zip/node_modules/@pkgjs/parseargs/",\ + "packageDependencies": [\ + ["@pkgjs/parseargs", "npm:0.11.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/buffer-layout", [\ + ["npm:4.0.1", {\ + "packageLocation": "./.yarn/cache/@solana-buffer-layout-npm-4.0.1-4100001d9d-bf846888e8.zip/node_modules/@solana/buffer-layout/",\ + "packageDependencies": [\ + ["@solana/buffer-layout", "npm:4.0.1"],\ + ["buffer", "npm:6.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/buffer-layout-utils", [\ + ["npm:0.2.0", {\ + "packageLocation": "./.yarn/cache/@solana-buffer-layout-utils-npm-0.2.0-149b69c46e-9284242245.zip/node_modules/@solana/buffer-layout-utils/",\ + "packageDependencies": [\ + ["@solana/buffer-layout-utils", "npm:0.2.0"],\ + ["@solana/buffer-layout", "npm:4.0.1"],\ + ["@solana/web3.js", "npm:1.95.3"],\ + ["bigint-buffer", "npm:1.1.5"],\ + ["bignumber.js", "npm:9.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/codecs", [\ + ["npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/cache/@solana-codecs-npm-2.0.0-preview.4-02d9a7993a-fea7d819c3.zip/node_modules/@solana/codecs/",\ + "packageDependencies": [\ + ["@solana/codecs", "npm:2.0.0-preview.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/cache/@solana-codecs-npm-2.0.0-rc.1-7d3ba53573-8586abfd1e.zip/node_modules/@solana/codecs/",\ + "packageDependencies": [\ + ["@solana/codecs", "npm:2.0.0-rc.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:9b4225e4633e43dc44aff00cedbb660c48f77f7c560429d814b54583a93dd5d29703f0e2d97269c25e0e1a8337fcee4b99470a0233779b7a46aeea61ec2fcdc6#npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/__virtual__/@solana-codecs-virtual-9270789288/0/cache/@solana-codecs-npm-2.0.0-rc.1-7d3ba53573-8586abfd1e.zip/node_modules/@solana/codecs/",\ + "packageDependencies": [\ + ["@solana/codecs", "virtual:9b4225e4633e43dc44aff00cedbb660c48f77f7c560429d814b54583a93dd5d29703f0e2d97269c25e0e1a8337fcee4b99470a0233779b7a46aeea61ec2fcdc6#npm:2.0.0-rc.1"],\ + ["@solana/codecs-core", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/codecs-data-structures", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/codecs-numbers", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/codecs-strings", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/options", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@types/typescript", null],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:df33a3bd679b894d89fd609f0e4e5cc08a3229047d378fff9b949b04dbf9378cdd55bd412319843af34ed168545952695d9518fb30810438b8ae6be5a534c1dc#npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/__virtual__/@solana-codecs-virtual-685e525d0c/0/cache/@solana-codecs-npm-2.0.0-preview.4-02d9a7993a-fea7d819c3.zip/node_modules/@solana/codecs/",\ + "packageDependencies": [\ + ["@solana/codecs", "virtual:df33a3bd679b894d89fd609f0e4e5cc08a3229047d378fff9b949b04dbf9378cdd55bd412319843af34ed168545952695d9518fb30810438b8ae6be5a534c1dc#npm:2.0.0-preview.4"],\ + ["@solana/codecs-core", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/codecs-data-structures", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/codecs-numbers", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/codecs-strings", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/options", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@types/typescript", null],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/codecs-core", [\ + ["npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/cache/@solana-codecs-core-npm-2.0.0-preview.4-21c3e46248-5dca4b46b0.zip/node_modules/@solana/codecs-core/",\ + "packageDependencies": [\ + ["@solana/codecs-core", "npm:2.0.0-preview.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/cache/@solana-codecs-core-npm-2.0.0-rc.1-5076cbaceb-e3a138cbdc.zip/node_modules/@solana/codecs-core/",\ + "packageDependencies": [\ + ["@solana/codecs-core", "npm:2.0.0-rc.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/__virtual__/@solana-codecs-core-virtual-1af88302b7/0/cache/@solana-codecs-core-npm-2.0.0-preview.4-21c3e46248-5dca4b46b0.zip/node_modules/@solana/codecs-core/",\ + "packageDependencies": [\ + ["@solana/codecs-core", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/errors", "virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4"],\ + ["@types/typescript", null],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/__virtual__/@solana-codecs-core-virtual-801b948eb0/0/cache/@solana-codecs-core-npm-2.0.0-rc.1-5076cbaceb-e3a138cbdc.zip/node_modules/@solana/codecs-core/",\ + "packageDependencies": [\ + ["@solana/codecs-core", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/errors", "virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1"],\ + ["@types/typescript", null],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/codecs-data-structures", [\ + ["npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/cache/@solana-codecs-data-structures-npm-2.0.0-preview.4-f90ffabb98-1af74509e9.zip/node_modules/@solana/codecs-data-structures/",\ + "packageDependencies": [\ + ["@solana/codecs-data-structures", "npm:2.0.0-preview.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/cache/@solana-codecs-data-structures-npm-2.0.0-rc.1-239d9704c0-7c24700be7.zip/node_modules/@solana/codecs-data-structures/",\ + "packageDependencies": [\ + ["@solana/codecs-data-structures", "npm:2.0.0-rc.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/__virtual__/@solana-codecs-data-structures-virtual-a937c3d3b4/0/cache/@solana-codecs-data-structures-npm-2.0.0-preview.4-f90ffabb98-1af74509e9.zip/node_modules/@solana/codecs-data-structures/",\ + "packageDependencies": [\ + ["@solana/codecs-data-structures", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/codecs-core", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/codecs-numbers", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/errors", "virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4"],\ + ["@types/typescript", null],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/__virtual__/@solana-codecs-data-structures-virtual-3214fc4540/0/cache/@solana-codecs-data-structures-npm-2.0.0-rc.1-239d9704c0-7c24700be7.zip/node_modules/@solana/codecs-data-structures/",\ + "packageDependencies": [\ + ["@solana/codecs-data-structures", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/codecs-core", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/codecs-numbers", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/errors", "virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1"],\ + ["@types/typescript", null],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/codecs-numbers", [\ + ["npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/cache/@solana-codecs-numbers-npm-2.0.0-preview.4-73ca84b919-f7eb51b70a.zip/node_modules/@solana/codecs-numbers/",\ + "packageDependencies": [\ + ["@solana/codecs-numbers", "npm:2.0.0-preview.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/cache/@solana-codecs-numbers-npm-2.0.0-rc.1-115b36782e-370c1f9497.zip/node_modules/@solana/codecs-numbers/",\ + "packageDependencies": [\ + ["@solana/codecs-numbers", "npm:2.0.0-rc.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/__virtual__/@solana-codecs-numbers-virtual-62ab57b7c3/0/cache/@solana-codecs-numbers-npm-2.0.0-preview.4-73ca84b919-f7eb51b70a.zip/node_modules/@solana/codecs-numbers/",\ + "packageDependencies": [\ + ["@solana/codecs-numbers", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/codecs-core", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/errors", "virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4"],\ + ["@types/typescript", null],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/__virtual__/@solana-codecs-numbers-virtual-38d67604ea/0/cache/@solana-codecs-numbers-npm-2.0.0-rc.1-115b36782e-370c1f9497.zip/node_modules/@solana/codecs-numbers/",\ + "packageDependencies": [\ + ["@solana/codecs-numbers", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/codecs-core", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/errors", "virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1"],\ + ["@types/typescript", null],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/codecs-strings", [\ + ["npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/cache/@solana-codecs-strings-npm-2.0.0-preview.4-71815c9c19-979503d496.zip/node_modules/@solana/codecs-strings/",\ + "packageDependencies": [\ + ["@solana/codecs-strings", "npm:2.0.0-preview.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/cache/@solana-codecs-strings-npm-2.0.0-rc.1-182be3c4d7-0706605311.zip/node_modules/@solana/codecs-strings/",\ + "packageDependencies": [\ + ["@solana/codecs-strings", "npm:2.0.0-rc.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/__virtual__/@solana-codecs-strings-virtual-5636a140b5/0/cache/@solana-codecs-strings-npm-2.0.0-preview.4-71815c9c19-979503d496.zip/node_modules/@solana/codecs-strings/",\ + "packageDependencies": [\ + ["@solana/codecs-strings", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/codecs-core", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/codecs-numbers", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/errors", "virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4"],\ + ["@types/fastestsmallesttextencoderdecoder", null],\ + ["@types/typescript", null],\ + ["fastestsmallesttextencoderdecoder", null],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/fastestsmallesttextencoderdecoder",\ + "@types/typescript",\ + "fastestsmallesttextencoderdecoder",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/__virtual__/@solana-codecs-strings-virtual-f02205ddab/0/cache/@solana-codecs-strings-npm-2.0.0-rc.1-182be3c4d7-0706605311.zip/node_modules/@solana/codecs-strings/",\ + "packageDependencies": [\ + ["@solana/codecs-strings", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/codecs-core", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/codecs-numbers", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/errors", "virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1"],\ + ["@types/fastestsmallesttextencoderdecoder", null],\ + ["@types/typescript", null],\ + ["fastestsmallesttextencoderdecoder", null],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/fastestsmallesttextencoderdecoder",\ + "@types/typescript",\ + "fastestsmallesttextencoderdecoder",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/errors", [\ + ["npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/cache/@solana-errors-npm-2.0.0-preview.4-088b5752c5-e7e4b3a395.zip/node_modules/@solana/errors/",\ + "packageDependencies": [\ + ["@solana/errors", "npm:2.0.0-preview.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/cache/@solana-errors-npm-2.0.0-rc.1-99b9f45244-906892a892.zip/node_modules/@solana/errors/",\ + "packageDependencies": [\ + ["@solana/errors", "npm:2.0.0-rc.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/__virtual__/@solana-errors-virtual-c47126f070/0/cache/@solana-errors-npm-2.0.0-preview.4-088b5752c5-e7e4b3a395.zip/node_modules/@solana/errors/",\ + "packageDependencies": [\ + ["@solana/errors", "virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4"],\ + ["@types/typescript", null],\ + ["chalk", "npm:5.3.0"],\ + ["commander", "npm:12.1.0"],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/__virtual__/@solana-errors-virtual-09ad96cf3a/0/cache/@solana-errors-npm-2.0.0-rc.1-99b9f45244-906892a892.zip/node_modules/@solana/errors/",\ + "packageDependencies": [\ + ["@solana/errors", "virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1"],\ + ["@types/typescript", null],\ + ["chalk", "npm:5.3.0"],\ + ["commander", "npm:12.1.0"],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/options", [\ + ["npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/cache/@solana-options-npm-2.0.0-preview.4-661d6401ae-d6da97a14b.zip/node_modules/@solana/options/",\ + "packageDependencies": [\ + ["@solana/options", "npm:2.0.0-preview.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/cache/@solana-options-npm-2.0.0-rc.1-fce3f9ae7e-63f3ed04e5.zip/node_modules/@solana/options/",\ + "packageDependencies": [\ + ["@solana/options", "npm:2.0.0-rc.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4", {\ + "packageLocation": "./.yarn/__virtual__/@solana-options-virtual-a3c45a08bb/0/cache/@solana-options-npm-2.0.0-preview.4-661d6401ae-d6da97a14b.zip/node_modules/@solana/options/",\ + "packageDependencies": [\ + ["@solana/options", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/codecs-core", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/codecs-data-structures", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/codecs-numbers", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/codecs-strings", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ + ["@solana/errors", "virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4"],\ + ["@types/typescript", null],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1", {\ + "packageLocation": "./.yarn/__virtual__/@solana-options-virtual-d7fe290a11/0/cache/@solana-options-npm-2.0.0-rc.1-fce3f9ae7e-63f3ed04e5.zip/node_modules/@solana/options/",\ + "packageDependencies": [\ + ["@solana/options", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/codecs-core", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/codecs-data-structures", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/codecs-numbers", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/codecs-strings", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ + ["@solana/errors", "virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1"],\ + ["@types/typescript", null],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/spl-token", [\ + ["npm:0.4.8", {\ + "packageLocation": "./.yarn/cache/@solana-spl-token-npm-0.4.8-e1313fe791-85c48b2bae.zip/node_modules/@solana/spl-token/",\ + "packageDependencies": [\ + ["@solana/spl-token", "npm:0.4.8"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:0.4.8", {\ + "packageLocation": "./.yarn/__virtual__/@solana-spl-token-virtual-b70f378881/0/cache/@solana-spl-token-npm-0.4.8-e1313fe791-85c48b2bae.zip/node_modules/@solana/spl-token/",\ + "packageDependencies": [\ + ["@solana/spl-token", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:0.4.8"],\ + ["@solana/buffer-layout", "npm:4.0.1"],\ + ["@solana/buffer-layout-utils", "npm:0.2.0"],\ + ["@solana/spl-token-group", "virtual:b70f3788819cba1fffc3b84924c6d5a03086b8a48628d8cb3ffbfd7ca1fa2b6e5e2890e2652120bede49e2b26601ae80004706656d5b0e05e9d9cab4de635cd3#npm:0.0.5"],\ + ["@solana/spl-token-metadata", "virtual:b70f3788819cba1fffc3b84924c6d5a03086b8a48628d8cb3ffbfd7ca1fa2b6e5e2890e2652120bede49e2b26601ae80004706656d5b0e05e9d9cab4de635cd3#npm:0.1.5"],\ + ["@solana/web3.js", "npm:1.95.3"],\ + ["@types/solana__web3.js", null],\ + ["buffer", "npm:6.0.3"]\ + ],\ + "packagePeers": [\ + "@solana/web3.js",\ + "@types/solana__web3.js"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/spl-token-group", [\ + ["npm:0.0.5", {\ + "packageLocation": "./.yarn/cache/@solana-spl-token-group-npm-0.0.5-48e9de023b-0bfe93e467.zip/node_modules/@solana/spl-token-group/",\ + "packageDependencies": [\ + ["@solana/spl-token-group", "npm:0.0.5"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:b70f3788819cba1fffc3b84924c6d5a03086b8a48628d8cb3ffbfd7ca1fa2b6e5e2890e2652120bede49e2b26601ae80004706656d5b0e05e9d9cab4de635cd3#npm:0.0.5", {\ + "packageLocation": "./.yarn/__virtual__/@solana-spl-token-group-virtual-df33a3bd67/0/cache/@solana-spl-token-group-npm-0.0.5-48e9de023b-0bfe93e467.zip/node_modules/@solana/spl-token-group/",\ + "packageDependencies": [\ + ["@solana/spl-token-group", "virtual:b70f3788819cba1fffc3b84924c6d5a03086b8a48628d8cb3ffbfd7ca1fa2b6e5e2890e2652120bede49e2b26601ae80004706656d5b0e05e9d9cab4de635cd3#npm:0.0.5"],\ + ["@solana/codecs", "virtual:df33a3bd679b894d89fd609f0e4e5cc08a3229047d378fff9b949b04dbf9378cdd55bd412319843af34ed168545952695d9518fb30810438b8ae6be5a534c1dc#npm:2.0.0-preview.4"],\ + ["@solana/spl-type-length-value", "npm:0.1.0"],\ + ["@solana/web3.js", "npm:1.95.3"],\ + ["@types/solana__web3.js", null]\ + ],\ + "packagePeers": [\ + "@solana/web3.js",\ + "@types/solana__web3.js"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/spl-token-metadata", [\ + ["npm:0.1.5", {\ + "packageLocation": "./.yarn/cache/@solana-spl-token-metadata-npm-0.1.5-3e43b1c467-dffe1bf05c.zip/node_modules/@solana/spl-token-metadata/",\ + "packageDependencies": [\ + ["@solana/spl-token-metadata", "npm:0.1.5"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:b70f3788819cba1fffc3b84924c6d5a03086b8a48628d8cb3ffbfd7ca1fa2b6e5e2890e2652120bede49e2b26601ae80004706656d5b0e05e9d9cab4de635cd3#npm:0.1.5", {\ + "packageLocation": "./.yarn/__virtual__/@solana-spl-token-metadata-virtual-9b4225e463/0/cache/@solana-spl-token-metadata-npm-0.1.5-3e43b1c467-dffe1bf05c.zip/node_modules/@solana/spl-token-metadata/",\ + "packageDependencies": [\ + ["@solana/spl-token-metadata", "virtual:b70f3788819cba1fffc3b84924c6d5a03086b8a48628d8cb3ffbfd7ca1fa2b6e5e2890e2652120bede49e2b26601ae80004706656d5b0e05e9d9cab4de635cd3#npm:0.1.5"],\ + ["@solana/codecs", "virtual:9b4225e4633e43dc44aff00cedbb660c48f77f7c560429d814b54583a93dd5d29703f0e2d97269c25e0e1a8337fcee4b99470a0233779b7a46aeea61ec2fcdc6#npm:2.0.0-rc.1"],\ + ["@solana/spl-type-length-value", "npm:0.1.0"],\ + ["@solana/web3.js", "npm:1.95.3"],\ + ["@types/solana__web3.js", null]\ + ],\ + "packagePeers": [\ + "@solana/web3.js",\ + "@types/solana__web3.js"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/spl-type-length-value", [\ + ["npm:0.1.0", {\ + "packageLocation": "./.yarn/cache/@solana-spl-type-length-value-npm-0.1.0-ca9d32fb55-9bea6d9638.zip/node_modules/@solana/spl-type-length-value/",\ + "packageDependencies": [\ + ["@solana/spl-type-length-value", "npm:0.1.0"],\ + ["buffer", "npm:6.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@solana/web3.js", [\ + ["npm:1.95.3", {\ + "packageLocation": "./.yarn/cache/@solana-web3.js-npm-1.95.3-8970ebf295-6951eb1227.zip/node_modules/@solana/web3.js/",\ + "packageDependencies": [\ + ["@solana/web3.js", "npm:1.95.3"],\ + ["@babel/runtime", "npm:7.25.6"],\ + ["@noble/curves", "npm:1.5.0"],\ + ["@noble/hashes", "npm:1.5.0"],\ + ["@solana/buffer-layout", "npm:4.0.1"],\ + ["agentkeepalive", "npm:4.5.0"],\ + ["bigint-buffer", "npm:1.1.5"],\ + ["bn.js", "npm:5.2.1"],\ + ["borsh", "npm:0.7.0"],\ + ["bs58", "npm:4.0.1"],\ + ["buffer", "npm:6.0.3"],\ + ["fast-stable-stringify", "npm:1.0.0"],\ + ["jayson", "npm:4.1.2"],\ + ["node-fetch", "virtual:8970ebf2951b774bae22c19f886b18bd69eadd91cfae0adaae1cc534c141455e70a4695fdc1ca30ba2b550374110aabc3fa5bec15cda285b125c397b8a51f498#npm:2.7.0"],\ + ["rpc-websockets", "npm:9.0.2"],\ + ["superstruct", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@swc/helpers", [\ + ["npm:0.5.13", {\ + "packageLocation": "./.yarn/cache/@swc-helpers-npm-0.5.13-763e72c536-d50c2c10da.zip/node_modules/@swc/helpers/",\ + "packageDependencies": [\ + ["@swc/helpers", "npm:0.5.13"],\ + ["tslib", "npm:2.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/bn.js", [\ + ["npm:5.1.5", {\ + "packageLocation": "./.yarn/cache/@types-bn.js-npm-5.1.5-c2195eccd3-c87b28c4af.zip/node_modules/@types/bn.js/",\ + "packageDependencies": [\ + ["@types/bn.js", "npm:5.1.5"],\ + ["@types/node", "npm:22.5.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/chai", [\ + ["npm:4.3.19", {\ + "packageLocation": "./.yarn/cache/@types-chai-npm-4.3.19-6ae19a8f2e-abd4d32397.zip/node_modules/@types/chai/",\ + "packageDependencies": [\ + ["@types/chai", "npm:4.3.19"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/connect", [\ + ["npm:3.4.38", {\ + "packageLocation": "./.yarn/cache/@types-connect-npm-3.4.38-a8a4c38337-7eb1bc5342.zip/node_modules/@types/connect/",\ + "packageDependencies": [\ + ["@types/connect", "npm:3.4.38"],\ + ["@types/node", "npm:22.5.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/mocha", [\ + ["npm:9.1.1", {\ + "packageLocation": "./.yarn/cache/@types-mocha-npm-9.1.1-9646576ed0-516077c0ac.zip/node_modules/@types/mocha/",\ + "packageDependencies": [\ + ["@types/mocha", "npm:9.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/node", [\ + ["npm:12.20.55", {\ + "packageLocation": "./.yarn/cache/@types-node-npm-12.20.55-88487587a4-e4f86785f4.zip/node_modules/@types/node/",\ + "packageDependencies": [\ + ["@types/node", "npm:12.20.55"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:22.5.2", {\ + "packageLocation": "./.yarn/cache/@types-node-npm-22.5.2-430cf418f9-5e47839dd1.zip/node_modules/@types/node/",\ + "packageDependencies": [\ + ["@types/node", "npm:22.5.2"],\ + ["undici-types", "npm:6.19.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/uuid", [\ + ["npm:8.3.4", {\ + "packageLocation": "./.yarn/cache/@types-uuid-npm-8.3.4-7547f4402c-6f11f3ff70.zip/node_modules/@types/uuid/",\ + "packageDependencies": [\ + ["@types/uuid", "npm:8.3.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/ws", [\ + ["npm:7.4.7", {\ + "packageLocation": "./.yarn/cache/@types-ws-npm-7.4.7-d0c95c0958-b4c9b8ad20.zip/node_modules/@types/ws/",\ + "packageDependencies": [\ + ["@types/ws", "npm:7.4.7"],\ + ["@types/node", "npm:22.5.2"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:8.5.12", {\ + "packageLocation": "./.yarn/cache/@types-ws-npm-8.5.12-90c42288cf-ddefb6ad16.zip/node_modules/@types/ws/",\ + "packageDependencies": [\ + ["@types/ws", "npm:8.5.12"],\ + ["@types/node", "npm:22.5.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ungap/promise-all-settled", [\ + ["npm:1.1.2", {\ + "packageLocation": "./.yarn/cache/@ungap-promise-all-settled-npm-1.1.2-c0f42e147b-08d37fdfa2.zip/node_modules/@ungap/promise-all-settled/",\ + "packageDependencies": [\ + ["@ungap/promise-all-settled", "npm:1.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["JSONStream", [\ + ["npm:1.3.5", {\ + "packageLocation": "./.yarn/cache/JSONStream-npm-1.3.5-1987f2e6dd-2605fa1242.zip/node_modules/JSONStream/",\ + "packageDependencies": [\ + ["JSONStream", "npm:1.3.5"],\ + ["jsonparse", "npm:1.3.1"],\ + ["through", "npm:2.3.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["abbrev", [\ + ["npm:2.0.0", {\ + "packageLocation": "./.yarn/cache/abbrev-npm-2.0.0-0eb38a17e5-0e994ad2aa.zip/node_modules/abbrev/",\ + "packageDependencies": [\ + ["abbrev", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["agent-base", [\ + ["npm:7.1.1", {\ + "packageLocation": "./.yarn/cache/agent-base-npm-7.1.1-c9e1a4b59e-51c158769c.zip/node_modules/agent-base/",\ + "packageDependencies": [\ + ["agent-base", "npm:7.1.1"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["agentkeepalive", [\ + ["npm:4.5.0", {\ + "packageLocation": "./.yarn/cache/agentkeepalive-npm-4.5.0-f237b580b2-13278cd5b1.zip/node_modules/agentkeepalive/",\ + "packageDependencies": [\ + ["agentkeepalive", "npm:4.5.0"],\ + ["humanize-ms", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["aggregate-error", [\ + ["npm:3.1.0", {\ + "packageLocation": "./.yarn/cache/aggregate-error-npm-3.1.0-415a406f4e-1101a33f21.zip/node_modules/aggregate-error/",\ + "packageDependencies": [\ + ["aggregate-error", "npm:3.1.0"],\ + ["clean-stack", "npm:2.2.0"],\ + ["indent-string", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansi-colors", [\ + ["npm:4.1.1", {\ + "packageLocation": "./.yarn/cache/ansi-colors-npm-4.1.1-97ad42f223-138d04a510.zip/node_modules/ansi-colors/",\ + "packageDependencies": [\ + ["ansi-colors", "npm:4.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansi-regex", [\ + ["npm:5.0.1", {\ + "packageLocation": "./.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip/node_modules/ansi-regex/",\ + "packageDependencies": [\ + ["ansi-regex", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:6.0.1", {\ + "packageLocation": "./.yarn/cache/ansi-regex-npm-6.0.1-8d663a607d-1ff8b7667c.zip/node_modules/ansi-regex/",\ + "packageDependencies": [\ + ["ansi-regex", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansi-styles", [\ + ["npm:4.3.0", {\ + "packageLocation": "./.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-513b44c3b2.zip/node_modules/ansi-styles/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:4.3.0"],\ + ["color-convert", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:6.2.1", {\ + "packageLocation": "./.yarn/cache/ansi-styles-npm-6.2.1-d43647018c-ef940f2f0c.zip/node_modules/ansi-styles/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:6.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["anymatch", [\ + ["npm:3.1.3", {\ + "packageLocation": "./.yarn/cache/anymatch-npm-3.1.3-bc81d103b1-3e044fd6d1.zip/node_modules/anymatch/",\ + "packageDependencies": [\ + ["anymatch", "npm:3.1.3"],\ + ["normalize-path", "npm:3.0.0"],\ + ["picomatch", "npm:2.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["argparse", [\ + ["npm:2.0.1", {\ + "packageLocation": "./.yarn/cache/argparse-npm-2.0.1-faff7999e6-83644b5649.zip/node_modules/argparse/",\ + "packageDependencies": [\ + ["argparse", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["assertion-error", [\ + ["npm:1.1.0", {\ + "packageLocation": "./.yarn/cache/assertion-error-npm-1.1.0-66b893015e-fd9429d3a3.zip/node_modules/assertion-error/",\ + "packageDependencies": [\ + ["assertion-error", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["balanced-match", [\ + ["npm:1.0.2", {\ + "packageLocation": "./.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip/node_modules/balanced-match/",\ + "packageDependencies": [\ + ["balanced-match", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["base-x", [\ + ["npm:3.0.10", {\ + "packageLocation": "./.yarn/cache/base-x-npm-3.0.10-2d05c06792-5230773955.zip/node_modules/base-x/",\ + "packageDependencies": [\ + ["base-x", "npm:3.0.10"],\ + ["safe-buffer", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["base64-js", [\ + ["npm:1.5.1", {\ + "packageLocation": "./.yarn/cache/base64-js-npm-1.5.1-b2f7275641-669632eb37.zip/node_modules/base64-js/",\ + "packageDependencies": [\ + ["base64-js", "npm:1.5.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["bigint-buffer", [\ + ["npm:1.1.5", {\ + "packageLocation": "./.yarn/unplugged/bigint-buffer-npm-1.1.5-785f4ccd92/node_modules/bigint-buffer/",\ + "packageDependencies": [\ + ["bigint-buffer", "npm:1.1.5"],\ + ["bindings", "npm:1.5.0"],\ + ["node-gyp", "npm:10.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["bignumber.js", [\ + ["npm:9.1.2", {\ + "packageLocation": "./.yarn/cache/bignumber.js-npm-9.1.2-c2228c6a4a-582c03af77.zip/node_modules/bignumber.js/",\ + "packageDependencies": [\ + ["bignumber.js", "npm:9.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["binary-extensions", [\ + ["npm:2.3.0", {\ + "packageLocation": "./.yarn/cache/binary-extensions-npm-2.3.0-bd3f20d865-bcad01494e.zip/node_modules/binary-extensions/",\ + "packageDependencies": [\ + ["binary-extensions", "npm:2.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["bindings", [\ + ["npm:1.5.0", {\ + "packageLocation": "./.yarn/cache/bindings-npm-1.5.0-77ce1d213c-65b6b48095.zip/node_modules/bindings/",\ + "packageDependencies": [\ + ["bindings", "npm:1.5.0"],\ + ["file-uri-to-path", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["bn.js", [\ + ["npm:5.2.1", {\ + "packageLocation": "./.yarn/cache/bn.js-npm-5.2.1-dc952b1965-3dd8c8d380.zip/node_modules/bn.js/",\ + "packageDependencies": [\ + ["bn.js", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["borsh", [\ + ["npm:0.7.0", {\ + "packageLocation": "./.yarn/cache/borsh-npm-0.7.0-c3e1c21bb3-e98bfb5f7c.zip/node_modules/borsh/",\ + "packageDependencies": [\ + ["borsh", "npm:0.7.0"],\ + ["bn.js", "npm:5.2.1"],\ + ["bs58", "npm:4.0.1"],\ + ["text-encoding-utf-8", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["brace-expansion", [\ + ["npm:1.1.11", {\ + "packageLocation": "./.yarn/cache/brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip/node_modules/brace-expansion/",\ + "packageDependencies": [\ + ["brace-expansion", "npm:1.1.11"],\ + ["balanced-match", "npm:1.0.2"],\ + ["concat-map", "npm:0.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:2.0.1", {\ + "packageLocation": "./.yarn/cache/brace-expansion-npm-2.0.1-17aa2616f9-a61e7cd2e8.zip/node_modules/brace-expansion/",\ + "packageDependencies": [\ + ["brace-expansion", "npm:2.0.1"],\ + ["balanced-match", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["braces", [\ + ["npm:3.0.3", {\ + "packageLocation": "./.yarn/cache/braces-npm-3.0.3-582c14023c-b95aa0b3bd.zip/node_modules/braces/",\ + "packageDependencies": [\ + ["braces", "npm:3.0.3"],\ + ["fill-range", "npm:7.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["browser-stdout", [\ + ["npm:1.3.1", {\ + "packageLocation": "./.yarn/cache/browser-stdout-npm-1.3.1-6b2376bf3f-b717b19b25.zip/node_modules/browser-stdout/",\ + "packageDependencies": [\ + ["browser-stdout", "npm:1.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["bs58", [\ + ["npm:4.0.1", {\ + "packageLocation": "./.yarn/cache/bs58-npm-4.0.1-8d2a7822b1-b3c5365bb9.zip/node_modules/bs58/",\ + "packageDependencies": [\ + ["bs58", "npm:4.0.1"],\ + ["base-x", "npm:3.0.10"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["buffer", [\ + ["npm:6.0.3", {\ + "packageLocation": "./.yarn/cache/buffer-npm-6.0.3-cd90dfedfe-5ad23293d9.zip/node_modules/buffer/",\ + "packageDependencies": [\ + ["buffer", "npm:6.0.3"],\ + ["base64-js", "npm:1.5.1"],\ + ["ieee754", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["buffer-layout", [\ + ["npm:1.2.2", {\ + "packageLocation": "./.yarn/unplugged/buffer-layout-npm-1.2.2-aac897d21a/node_modules/buffer-layout/",\ + "packageDependencies": [\ + ["buffer-layout", "npm:1.2.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["bufferutil", [\ + ["npm:4.0.8", {\ + "packageLocation": "./.yarn/unplugged/bufferutil-npm-4.0.8-8005ed6210/node_modules/bufferutil/",\ + "packageDependencies": [\ + ["bufferutil", "npm:4.0.8"],\ + ["node-gyp", "npm:10.2.0"],\ + ["node-gyp-build", "npm:4.8.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cacache", [\ + ["npm:18.0.4", {\ + "packageLocation": "./.yarn/cache/cacache-npm-18.0.4-3dc4edc849-b7422c113b.zip/node_modules/cacache/",\ + "packageDependencies": [\ + ["cacache", "npm:18.0.4"],\ + ["@npmcli/fs", "npm:3.1.1"],\ + ["fs-minipass", "npm:3.0.3"],\ + ["glob", "npm:10.4.5"],\ + ["lru-cache", "npm:10.4.3"],\ + ["minipass", "npm:7.1.2"],\ + ["minipass-collect", "npm:2.0.1"],\ + ["minipass-flush", "npm:1.0.5"],\ + ["minipass-pipeline", "npm:1.2.4"],\ + ["p-map", "npm:4.0.0"],\ + ["ssri", "npm:10.0.6"],\ + ["tar", "npm:6.2.1"],\ + ["unique-filename", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["camelcase", [\ + ["npm:6.3.0", {\ + "packageLocation": "./.yarn/cache/camelcase-npm-6.3.0-e5e42a0d15-8c96818a90.zip/node_modules/camelcase/",\ + "packageDependencies": [\ + ["camelcase", "npm:6.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["chai", [\ + ["npm:4.5.0", {\ + "packageLocation": "./.yarn/cache/chai-npm-4.5.0-428447e206-70e5a8418a.zip/node_modules/chai/",\ + "packageDependencies": [\ + ["chai", "npm:4.5.0"],\ + ["assertion-error", "npm:1.1.0"],\ + ["check-error", "npm:1.0.3"],\ + ["deep-eql", "npm:4.1.4"],\ + ["get-func-name", "npm:2.0.2"],\ + ["loupe", "npm:2.3.7"],\ + ["pathval", "npm:1.1.1"],\ + ["type-detect", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["chalk", [\ + ["npm:4.1.2", {\ + "packageLocation": "./.yarn/cache/chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip/node_modules/chalk/",\ + "packageDependencies": [\ + ["chalk", "npm:4.1.2"],\ + ["ansi-styles", "npm:4.3.0"],\ + ["supports-color", "npm:7.2.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.3.0", {\ + "packageLocation": "./.yarn/cache/chalk-npm-5.3.0-d181999efb-623922e077.zip/node_modules/chalk/",\ + "packageDependencies": [\ + ["chalk", "npm:5.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["check-error", [\ + ["npm:1.0.3", {\ + "packageLocation": "./.yarn/cache/check-error-npm-1.0.3-137994eabc-e2131025cf.zip/node_modules/check-error/",\ + "packageDependencies": [\ + ["check-error", "npm:1.0.3"],\ + ["get-func-name", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["chokidar", [\ + ["npm:3.5.3", {\ + "packageLocation": "./.yarn/cache/chokidar-npm-3.5.3-c5f9b0a56a-b49fcde401.zip/node_modules/chokidar/",\ + "packageDependencies": [\ + ["chokidar", "npm:3.5.3"],\ + ["anymatch", "npm:3.1.3"],\ + ["braces", "npm:3.0.3"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1"],\ + ["glob-parent", "npm:5.1.2"],\ + ["is-binary-path", "npm:2.1.0"],\ + ["is-glob", "npm:4.0.3"],\ + ["normalize-path", "npm:3.0.0"],\ + ["readdirp", "npm:3.6.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["chownr", [\ + ["npm:2.0.0", {\ + "packageLocation": "./.yarn/cache/chownr-npm-2.0.0-638f1c9c61-c57cf9dd07.zip/node_modules/chownr/",\ + "packageDependencies": [\ + ["chownr", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["clean-stack", [\ + ["npm:2.2.0", {\ + "packageLocation": "./.yarn/cache/clean-stack-npm-2.2.0-a8ce435a5c-2ac8cd2b2f.zip/node_modules/clean-stack/",\ + "packageDependencies": [\ + ["clean-stack", "npm:2.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cliui", [\ + ["npm:7.0.4", {\ + "packageLocation": "./.yarn/cache/cliui-npm-7.0.4-d6b8a9edb6-ce2e8f578a.zip/node_modules/cliui/",\ + "packageDependencies": [\ + ["cliui", "npm:7.0.4"],\ + ["string-width", "npm:4.2.3"],\ + ["strip-ansi", "npm:6.0.1"],\ + ["wrap-ansi", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["color-convert", [\ + ["npm:2.0.1", {\ + "packageLocation": "./.yarn/cache/color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip/node_modules/color-convert/",\ + "packageDependencies": [\ + ["color-convert", "npm:2.0.1"],\ + ["color-name", "npm:1.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["color-name", [\ + ["npm:1.1.4", {\ + "packageLocation": "./.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip/node_modules/color-name/",\ + "packageDependencies": [\ + ["color-name", "npm:1.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["commander", [\ + ["npm:12.1.0", {\ + "packageLocation": "./.yarn/cache/commander-npm-12.1.0-65c868e907-68e9818b00.zip/node_modules/commander/",\ + "packageDependencies": [\ + ["commander", "npm:12.1.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:2.20.3", {\ + "packageLocation": "./.yarn/cache/commander-npm-2.20.3-d8dcbaa39b-ab8c07884e.zip/node_modules/commander/",\ + "packageDependencies": [\ + ["commander", "npm:2.20.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["concat-map", [\ + ["npm:0.0.1", {\ + "packageLocation": "./.yarn/cache/concat-map-npm-0.0.1-85a921b7ee-902a9f5d89.zip/node_modules/concat-map/",\ + "packageDependencies": [\ + ["concat-map", "npm:0.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cross-fetch", [\ + ["npm:3.1.8", {\ + "packageLocation": "./.yarn/cache/cross-fetch-npm-3.1.8-71c3c05709-78f993fa09.zip/node_modules/cross-fetch/",\ + "packageDependencies": [\ + ["cross-fetch", "npm:3.1.8"],\ + ["node-fetch", "virtual:8970ebf2951b774bae22c19f886b18bd69eadd91cfae0adaae1cc534c141455e70a4695fdc1ca30ba2b550374110aabc3fa5bec15cda285b125c397b8a51f498#npm:2.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cross-spawn", [\ + ["npm:7.0.3", {\ + "packageLocation": "./.yarn/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-671cc7c728.zip/node_modules/cross-spawn/",\ + "packageDependencies": [\ + ["cross-spawn", "npm:7.0.3"],\ + ["path-key", "npm:3.1.1"],\ + ["shebang-command", "npm:2.0.0"],\ + ["which", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["crypto-hash", [\ + ["npm:1.3.0", {\ + "packageLocation": "./.yarn/cache/crypto-hash-npm-1.3.0-8ec42184ed-a3a507e0d2.zip/node_modules/crypto-hash/",\ + "packageDependencies": [\ + ["crypto-hash", "npm:1.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["debug", [\ + ["npm:4.3.3", {\ + "packageLocation": "./.yarn/cache/debug-npm-4.3.3-710fd4cc7f-14472d56fe.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["debug", "npm:4.3.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["npm:4.3.6", {\ + "packageLocation": "./.yarn/cache/debug-npm-4.3.6-ecb233d831-1630b748de.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["debug", "npm:4.3.6"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6", {\ + "packageLocation": "./.yarn/__virtual__/debug-virtual-5ebbdf5dd4/0/cache/debug-npm-4.3.6-ecb233d831-1630b748de.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"],\ + ["@types/supports-color", null],\ + ["ms", "npm:2.1.2"],\ + ["supports-color", null]\ + ],\ + "packagePeers": [\ + "@types/supports-color",\ + "supports-color"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:f7735febb87b1fbb8215178a6f0b0bc1e3e251c18455c0481843aea1b7aa4c7d6fbdbd3eeee04078e2e2e368e4d4b513dd87411eb2f12aa6ea556f640295bc68#npm:4.3.3", {\ + "packageLocation": "./.yarn/__virtual__/debug-virtual-0dd0b2b0b9/0/cache/debug-npm-4.3.3-710fd4cc7f-14472d56fe.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["debug", "virtual:f7735febb87b1fbb8215178a6f0b0bc1e3e251c18455c0481843aea1b7aa4c7d6fbdbd3eeee04078e2e2e368e4d4b513dd87411eb2f12aa6ea556f640295bc68#npm:4.3.3"],\ + ["@types/supports-color", null],\ + ["ms", "npm:2.1.2"],\ + ["supports-color", "npm:8.1.1"]\ + ],\ + "packagePeers": [\ + "@types/supports-color",\ + "supports-color"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["decamelize", [\ + ["npm:4.0.0", {\ + "packageLocation": "./.yarn/cache/decamelize-npm-4.0.0-12410e3409-b7d09b8265.zip/node_modules/decamelize/",\ + "packageDependencies": [\ + ["decamelize", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["deep-eql", [\ + ["npm:4.1.4", {\ + "packageLocation": "./.yarn/cache/deep-eql-npm-4.1.4-bc4d39c2ca-01c3ca78ff.zip/node_modules/deep-eql/",\ + "packageDependencies": [\ + ["deep-eql", "npm:4.1.4"],\ + ["type-detect", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["delay", [\ + ["npm:5.0.0", {\ + "packageLocation": "./.yarn/cache/delay-npm-5.0.0-1d1c758b46-62f151151e.zip/node_modules/delay/",\ + "packageDependencies": [\ + ["delay", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["diff", [\ + ["npm:5.0.0", {\ + "packageLocation": "./.yarn/cache/diff-npm-5.0.0-ad6900db18-f19fe29284.zip/node_modules/diff/",\ + "packageDependencies": [\ + ["diff", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["dot-case", [\ + ["npm:3.0.4", {\ + "packageLocation": "./.yarn/cache/dot-case-npm-3.0.4-09675b5521-a65e351941.zip/node_modules/dot-case/",\ + "packageDependencies": [\ + ["dot-case", "npm:3.0.4"],\ + ["no-case", "npm:3.0.4"],\ + ["tslib", "npm:2.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eastasianwidth", [\ + ["npm:0.2.0", {\ + "packageLocation": "./.yarn/cache/eastasianwidth-npm-0.2.0-c37eb16bd1-7d00d7cd8e.zip/node_modules/eastasianwidth/",\ + "packageDependencies": [\ + ["eastasianwidth", "npm:0.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["emoji-regex", [\ + ["npm:8.0.0", {\ + "packageLocation": "./.yarn/cache/emoji-regex-npm-8.0.0-213764015c-d4c5c39d5a.zip/node_modules/emoji-regex/",\ + "packageDependencies": [\ + ["emoji-regex", "npm:8.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:9.2.2", {\ + "packageLocation": "./.yarn/cache/emoji-regex-npm-9.2.2-e6fac8d058-8487182da7.zip/node_modules/emoji-regex/",\ + "packageDependencies": [\ + ["emoji-regex", "npm:9.2.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["encoding", [\ + ["npm:0.1.13", {\ + "packageLocation": "./.yarn/cache/encoding-npm-0.1.13-82a1837d30-bb98632f8f.zip/node_modules/encoding/",\ + "packageDependencies": [\ + ["encoding", "npm:0.1.13"],\ + ["iconv-lite", "npm:0.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["env-paths", [\ + ["npm:2.2.1", {\ + "packageLocation": "./.yarn/cache/env-paths-npm-2.2.1-7c7577428c-65b5df55a8.zip/node_modules/env-paths/",\ + "packageDependencies": [\ + ["env-paths", "npm:2.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["err-code", [\ + ["npm:2.0.3", {\ + "packageLocation": "./.yarn/cache/err-code-npm-2.0.3-082e0ff9a7-8b7b1be20d.zip/node_modules/err-code/",\ + "packageDependencies": [\ + ["err-code", "npm:2.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["es6-promise", [\ + ["npm:4.2.8", {\ + "packageLocation": "./.yarn/cache/es6-promise-npm-4.2.8-c9f5b11f66-95614a8887.zip/node_modules/es6-promise/",\ + "packageDependencies": [\ + ["es6-promise", "npm:4.2.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["es6-promisify", [\ + ["npm:5.0.0", {\ + "packageLocation": "./.yarn/cache/es6-promisify-npm-5.0.0-3726550934-fbed9d7915.zip/node_modules/es6-promisify/",\ + "packageDependencies": [\ + ["es6-promisify", "npm:5.0.0"],\ + ["es6-promise", "npm:4.2.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["escalade", [\ + ["npm:3.2.0", {\ + "packageLocation": "./.yarn/cache/escalade-npm-3.2.0-19b50dd48f-47b029c83d.zip/node_modules/escalade/",\ + "packageDependencies": [\ + ["escalade", "npm:3.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["escape-string-regexp", [\ + ["npm:4.0.0", {\ + "packageLocation": "./.yarn/cache/escape-string-regexp-npm-4.0.0-4b531d8d59-98b48897d9.zip/node_modules/escape-string-regexp/",\ + "packageDependencies": [\ + ["escape-string-regexp", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eventemitter3", [\ + ["npm:4.0.7", {\ + "packageLocation": "./.yarn/cache/eventemitter3-npm-4.0.7-7afcdd74ae-1875311c42.zip/node_modules/eventemitter3/",\ + "packageDependencies": [\ + ["eventemitter3", "npm:4.0.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.0.1", {\ + "packageLocation": "./.yarn/cache/eventemitter3-npm-5.0.1-5e423b7df3-543d6c858a.zip/node_modules/eventemitter3/",\ + "packageDependencies": [\ + ["eventemitter3", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["exponential-backoff", [\ + ["npm:3.1.1", {\ + "packageLocation": "./.yarn/cache/exponential-backoff-npm-3.1.1-04df458b30-3d21519a4f.zip/node_modules/exponential-backoff/",\ + "packageDependencies": [\ + ["exponential-backoff", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eyes", [\ + ["npm:0.1.8", {\ + "packageLocation": "./.yarn/cache/eyes-npm-0.1.8-4f28ed333f-c31703a92b.zip/node_modules/eyes/",\ + "packageDependencies": [\ + ["eyes", "npm:0.1.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fast-stable-stringify", [\ + ["npm:1.0.0", {\ + "packageLocation": "./.yarn/cache/fast-stable-stringify-npm-1.0.0-040fa045a5-ef1203d246.zip/node_modules/fast-stable-stringify/",\ + "packageDependencies": [\ + ["fast-stable-stringify", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["file-uri-to-path", [\ + ["npm:1.0.0", {\ + "packageLocation": "./.yarn/cache/file-uri-to-path-npm-1.0.0-1043ac6206-b648580bdd.zip/node_modules/file-uri-to-path/",\ + "packageDependencies": [\ + ["file-uri-to-path", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fill-range", [\ + ["npm:7.1.1", {\ + "packageLocation": "./.yarn/cache/fill-range-npm-7.1.1-bf491486db-b4abfbca38.zip/node_modules/fill-range/",\ + "packageDependencies": [\ + ["fill-range", "npm:7.1.1"],\ + ["to-regex-range", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["find-up", [\ + ["npm:5.0.0", {\ + "packageLocation": "./.yarn/cache/find-up-npm-5.0.0-e03e9b796d-07955e3573.zip/node_modules/find-up/",\ + "packageDependencies": [\ + ["find-up", "npm:5.0.0"],\ + ["locate-path", "npm:6.0.0"],\ + ["path-exists", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["flat", [\ + ["npm:5.0.2", {\ + "packageLocation": "./.yarn/cache/flat-npm-5.0.2-12748102a5-12a1536ac7.zip/node_modules/flat/",\ + "packageDependencies": [\ + ["flat", "npm:5.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["foreground-child", [\ + ["npm:3.3.0", {\ + "packageLocation": "./.yarn/cache/foreground-child-npm-3.3.0-b8be745271-1989698488.zip/node_modules/foreground-child/",\ + "packageDependencies": [\ + ["foreground-child", "npm:3.3.0"],\ + ["cross-spawn", "npm:7.0.3"],\ + ["signal-exit", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fs-minipass", [\ + ["npm:2.1.0", {\ + "packageLocation": "./.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip/node_modules/fs-minipass/",\ + "packageDependencies": [\ + ["fs-minipass", "npm:2.1.0"],\ + ["minipass", "npm:3.3.6"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:3.0.3", {\ + "packageLocation": "./.yarn/cache/fs-minipass-npm-3.0.3-d148d6ac19-8722a41109.zip/node_modules/fs-minipass/",\ + "packageDependencies": [\ + ["fs-minipass", "npm:3.0.3"],\ + ["minipass", "npm:7.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fs.realpath", [\ + ["npm:1.0.0", {\ + "packageLocation": "./.yarn/cache/fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip/node_modules/fs.realpath/",\ + "packageDependencies": [\ + ["fs.realpath", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fsevents", [\ + ["patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1", {\ + "packageLocation": "./.yarn/unplugged/fsevents-patch-21ad2b1333/node_modules/fsevents/",\ + "packageDependencies": [\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1"],\ + ["node-gyp", "npm:10.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["get-caller-file", [\ + ["npm:2.0.5", {\ + "packageLocation": "./.yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-b9769a836d.zip/node_modules/get-caller-file/",\ + "packageDependencies": [\ + ["get-caller-file", "npm:2.0.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["get-func-name", [\ + ["npm:2.0.2", {\ + "packageLocation": "./.yarn/cache/get-func-name-npm-2.0.2-409dbe3703-3f62f4c236.zip/node_modules/get-func-name/",\ + "packageDependencies": [\ + ["get-func-name", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["glob", [\ + ["npm:10.4.5", {\ + "packageLocation": "./.yarn/cache/glob-npm-10.4.5-8c63175f05-0bc725de5e.zip/node_modules/glob/",\ + "packageDependencies": [\ + ["glob", "npm:10.4.5"],\ + ["foreground-child", "npm:3.3.0"],\ + ["jackspeak", "npm:3.4.3"],\ + ["minimatch", "npm:9.0.5"],\ + ["minipass", "npm:7.1.2"],\ + ["package-json-from-dist", "npm:1.0.0"],\ + ["path-scurry", "npm:1.11.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.2.0", {\ + "packageLocation": "./.yarn/cache/glob-npm-7.2.0-bb4644d239-78a8ea9423.zip/node_modules/glob/",\ + "packageDependencies": [\ + ["glob", "npm:7.2.0"],\ + ["fs.realpath", "npm:1.0.0"],\ + ["inflight", "npm:1.0.6"],\ + ["inherits", "npm:2.0.4"],\ + ["minimatch", "npm:3.1.2"],\ + ["once", "npm:1.4.0"],\ + ["path-is-absolute", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["glob-parent", [\ + ["npm:5.1.2", {\ + "packageLocation": "./.yarn/cache/glob-parent-npm-5.1.2-021ab32634-f4f2bfe242.zip/node_modules/glob-parent/",\ + "packageDependencies": [\ + ["glob-parent", "npm:5.1.2"],\ + ["is-glob", "npm:4.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["graceful-fs", [\ + ["npm:4.2.11", {\ + "packageLocation": "./.yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-ac85f94da9.zip/node_modules/graceful-fs/",\ + "packageDependencies": [\ + ["graceful-fs", "npm:4.2.11"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["growl", [\ + ["npm:1.10.5", {\ + "packageLocation": "./.yarn/cache/growl-npm-1.10.5-2d1da54198-4b86685de6.zip/node_modules/growl/",\ + "packageDependencies": [\ + ["growl", "npm:1.10.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["has-flag", [\ + ["npm:4.0.0", {\ + "packageLocation": "./.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip/node_modules/has-flag/",\ + "packageDependencies": [\ + ["has-flag", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["he", [\ + ["npm:1.2.0", {\ + "packageLocation": "./.yarn/cache/he-npm-1.2.0-3b73a2ff07-3d4d6babcc.zip/node_modules/he/",\ + "packageDependencies": [\ + ["he", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["http-cache-semantics", [\ + ["npm:4.1.1", {\ + "packageLocation": "./.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-83ac0bc60b.zip/node_modules/http-cache-semantics/",\ + "packageDependencies": [\ + ["http-cache-semantics", "npm:4.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["http-proxy-agent", [\ + ["npm:7.0.2", {\ + "packageLocation": "./.yarn/cache/http-proxy-agent-npm-7.0.2-643ed7cc33-670858c8f8.zip/node_modules/http-proxy-agent/",\ + "packageDependencies": [\ + ["http-proxy-agent", "npm:7.0.2"],\ + ["agent-base", "npm:7.1.1"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["https-proxy-agent", [\ + ["npm:7.0.5", {\ + "packageLocation": "./.yarn/cache/https-proxy-agent-npm-7.0.5-94c14d4619-2e1a28960f.zip/node_modules/https-proxy-agent/",\ + "packageDependencies": [\ + ["https-proxy-agent", "npm:7.0.5"],\ + ["agent-base", "npm:7.1.1"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["humanize-ms", [\ + ["npm:1.2.1", {\ + "packageLocation": "./.yarn/cache/humanize-ms-npm-1.2.1-e942bd7329-9c7a74a282.zip/node_modules/humanize-ms/",\ + "packageDependencies": [\ + ["humanize-ms", "npm:1.2.1"],\ + ["ms", "npm:2.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["iconv-lite", [\ + ["npm:0.6.3", {\ + "packageLocation": "./.yarn/cache/iconv-lite-npm-0.6.3-24b8aae27e-3f60d47a5c.zip/node_modules/iconv-lite/",\ + "packageDependencies": [\ + ["iconv-lite", "npm:0.6.3"],\ + ["safer-buffer", "npm:2.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ieee754", [\ + ["npm:1.2.1", {\ + "packageLocation": "./.yarn/cache/ieee754-npm-1.2.1-fb63b3caeb-5144c0c981.zip/node_modules/ieee754/",\ + "packageDependencies": [\ + ["ieee754", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["imurmurhash", [\ + ["npm:0.1.4", {\ + "packageLocation": "./.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-7cae75c8cd.zip/node_modules/imurmurhash/",\ + "packageDependencies": [\ + ["imurmurhash", "npm:0.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["indent-string", [\ + ["npm:4.0.0", {\ + "packageLocation": "./.yarn/cache/indent-string-npm-4.0.0-7b717435b2-824cfb9929.zip/node_modules/indent-string/",\ + "packageDependencies": [\ + ["indent-string", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["inflight", [\ + ["npm:1.0.6", {\ + "packageLocation": "./.yarn/cache/inflight-npm-1.0.6-ccedb4b908-f4f76aa072.zip/node_modules/inflight/",\ + "packageDependencies": [\ + ["inflight", "npm:1.0.6"],\ + ["once", "npm:1.4.0"],\ + ["wrappy", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["inherits", [\ + ["npm:2.0.4", {\ + "packageLocation": "./.yarn/cache/inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip/node_modules/inherits/",\ + "packageDependencies": [\ + ["inherits", "npm:2.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ip-address", [\ + ["npm:9.0.5", {\ + "packageLocation": "./.yarn/cache/ip-address-npm-9.0.5-9fa024d42a-aa15f12cfd.zip/node_modules/ip-address/",\ + "packageDependencies": [\ + ["ip-address", "npm:9.0.5"],\ + ["jsbn", "npm:1.1.0"],\ + ["sprintf-js", "npm:1.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-binary-path", [\ + ["npm:2.1.0", {\ + "packageLocation": "./.yarn/cache/is-binary-path-npm-2.1.0-e61d46f557-84192eb88c.zip/node_modules/is-binary-path/",\ + "packageDependencies": [\ + ["is-binary-path", "npm:2.1.0"],\ + ["binary-extensions", "npm:2.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-extglob", [\ + ["npm:2.1.1", {\ + "packageLocation": "./.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip/node_modules/is-extglob/",\ + "packageDependencies": [\ + ["is-extglob", "npm:2.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-fullwidth-code-point", [\ + ["npm:3.0.0", {\ + "packageLocation": "./.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip/node_modules/is-fullwidth-code-point/",\ + "packageDependencies": [\ + ["is-fullwidth-code-point", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-glob", [\ + ["npm:4.0.3", {\ + "packageLocation": "./.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-d381c1319f.zip/node_modules/is-glob/",\ + "packageDependencies": [\ + ["is-glob", "npm:4.0.3"],\ + ["is-extglob", "npm:2.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-lambda", [\ + ["npm:1.0.1", {\ + "packageLocation": "./.yarn/cache/is-lambda-npm-1.0.1-7ab55bc8a8-93a32f0194.zip/node_modules/is-lambda/",\ + "packageDependencies": [\ + ["is-lambda", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-number", [\ + ["npm:7.0.0", {\ + "packageLocation": "./.yarn/cache/is-number-npm-7.0.0-060086935c-456ac6f8e0.zip/node_modules/is-number/",\ + "packageDependencies": [\ + ["is-number", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-plain-obj", [\ + ["npm:2.1.0", {\ + "packageLocation": "./.yarn/cache/is-plain-obj-npm-2.1.0-8dffd7ae9c-cec9100678.zip/node_modules/is-plain-obj/",\ + "packageDependencies": [\ + ["is-plain-obj", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-unicode-supported", [\ + ["npm:0.1.0", {\ + "packageLocation": "./.yarn/cache/is-unicode-supported-npm-0.1.0-0833e1bbfb-a2aab86ee7.zip/node_modules/is-unicode-supported/",\ + "packageDependencies": [\ + ["is-unicode-supported", "npm:0.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["isexe", [\ + ["npm:2.0.0", {\ + "packageLocation": "./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip/node_modules/isexe/",\ + "packageDependencies": [\ + ["isexe", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:3.1.1", {\ + "packageLocation": "./.yarn/cache/isexe-npm-3.1.1-9c0061eead-7fe1931ee4.zip/node_modules/isexe/",\ + "packageDependencies": [\ + ["isexe", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["isomorphic-ws", [\ + ["npm:4.0.1", {\ + "packageLocation": "./.yarn/cache/isomorphic-ws-npm-4.0.1-aa39192848-d7190eadef.zip/node_modules/isomorphic-ws/",\ + "packageDependencies": [\ + ["isomorphic-ws", "npm:4.0.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:4.0.1", {\ + "packageLocation": "./.yarn/__virtual__/isomorphic-ws-virtual-d15e13c579/0/cache/isomorphic-ws-npm-4.0.1-aa39192848-d7190eadef.zip/node_modules/isomorphic-ws/",\ + "packageDependencies": [\ + ["isomorphic-ws", "virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:4.0.1"],\ + ["@types/ws", "npm:7.4.7"],\ + ["ws", "virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:7.5.10"]\ + ],\ + "packagePeers": [\ + "@types/ws",\ + "ws"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["jackspeak", [\ + ["npm:3.4.3", {\ + "packageLocation": "./.yarn/cache/jackspeak-npm-3.4.3-546bfad080-be31027fc7.zip/node_modules/jackspeak/",\ + "packageDependencies": [\ + ["jackspeak", "npm:3.4.3"],\ + ["@isaacs/cliui", "npm:8.0.2"],\ + ["@pkgjs/parseargs", "npm:0.11.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["jayson", [\ + ["npm:4.1.2", {\ + "packageLocation": "./.yarn/cache/jayson-npm-4.1.2-fce0868acb-10d6a0ce55.zip/node_modules/jayson/",\ + "packageDependencies": [\ + ["jayson", "npm:4.1.2"],\ + ["@types/connect", "npm:3.4.38"],\ + ["@types/node", "npm:12.20.55"],\ + ["@types/ws", "npm:7.4.7"],\ + ["JSONStream", "npm:1.3.5"],\ + ["commander", "npm:2.20.3"],\ + ["delay", "npm:5.0.0"],\ + ["es6-promisify", "npm:5.0.0"],\ + ["eyes", "npm:0.1.8"],\ + ["isomorphic-ws", "virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:4.0.1"],\ + ["json-stringify-safe", "npm:5.0.1"],\ + ["uuid", "npm:8.3.2"],\ + ["ws", "virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:7.5.10"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["js-yaml", [\ + ["npm:4.1.0", {\ + "packageLocation": "./.yarn/cache/js-yaml-npm-4.1.0-3606f32312-c7830dfd45.zip/node_modules/js-yaml/",\ + "packageDependencies": [\ + ["js-yaml", "npm:4.1.0"],\ + ["argparse", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["jsbn", [\ + ["npm:1.1.0", {\ + "packageLocation": "./.yarn/cache/jsbn-npm-1.1.0-1da0181838-944f924f2b.zip/node_modules/jsbn/",\ + "packageDependencies": [\ + ["jsbn", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["json-stringify-safe", [\ + ["npm:5.0.1", {\ + "packageLocation": "./.yarn/cache/json-stringify-safe-npm-5.0.1-064ddd6ab4-48ec0adad5.zip/node_modules/json-stringify-safe/",\ + "packageDependencies": [\ + ["json-stringify-safe", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["jsonparse", [\ + ["npm:1.3.1", {\ + "packageLocation": "./.yarn/cache/jsonparse-npm-1.3.1-b6fde74828-6514a7be46.zip/node_modules/jsonparse/",\ + "packageDependencies": [\ + ["jsonparse", "npm:1.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["locate-path", [\ + ["npm:6.0.0", {\ + "packageLocation": "./.yarn/cache/locate-path-npm-6.0.0-06a1e4c528-72eb661788.zip/node_modules/locate-path/",\ + "packageDependencies": [\ + ["locate-path", "npm:6.0.0"],\ + ["p-locate", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["log-symbols", [\ + ["npm:4.1.0", {\ + "packageLocation": "./.yarn/cache/log-symbols-npm-4.1.0-0a13492d8b-fce1497b31.zip/node_modules/log-symbols/",\ + "packageDependencies": [\ + ["log-symbols", "npm:4.1.0"],\ + ["chalk", "npm:4.1.2"],\ + ["is-unicode-supported", "npm:0.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["loupe", [\ + ["npm:2.3.7", {\ + "packageLocation": "./.yarn/cache/loupe-npm-2.3.7-f294c2ef33-96c058ec71.zip/node_modules/loupe/",\ + "packageDependencies": [\ + ["loupe", "npm:2.3.7"],\ + ["get-func-name", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lower-case", [\ + ["npm:2.0.2", {\ + "packageLocation": "./.yarn/cache/lower-case-npm-2.0.2-151055f1c2-83a0a5f159.zip/node_modules/lower-case/",\ + "packageDependencies": [\ + ["lower-case", "npm:2.0.2"],\ + ["tslib", "npm:2.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lru-cache", [\ + ["npm:10.4.3", {\ + "packageLocation": "./.yarn/cache/lru-cache-npm-10.4.3-30c10b861a-6476138d21.zip/node_modules/lru-cache/",\ + "packageDependencies": [\ + ["lru-cache", "npm:10.4.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["make-fetch-happen", [\ + ["npm:13.0.1", {\ + "packageLocation": "./.yarn/cache/make-fetch-happen-npm-13.0.1-4180f2aaa8-5c9fad6955.zip/node_modules/make-fetch-happen/",\ + "packageDependencies": [\ + ["make-fetch-happen", "npm:13.0.1"],\ + ["@npmcli/agent", "npm:2.2.2"],\ + ["cacache", "npm:18.0.4"],\ + ["http-cache-semantics", "npm:4.1.1"],\ + ["is-lambda", "npm:1.0.1"],\ + ["minipass", "npm:7.1.2"],\ + ["minipass-fetch", "npm:3.0.5"],\ + ["minipass-flush", "npm:1.0.5"],\ + ["minipass-pipeline", "npm:1.2.4"],\ + ["negotiator", "npm:0.6.3"],\ + ["proc-log", "npm:4.2.0"],\ + ["promise-retry", "npm:2.0.1"],\ + ["ssri", "npm:10.0.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minimatch", [\ + ["npm:3.1.2", {\ + "packageLocation": "./.yarn/cache/minimatch-npm-3.1.2-9405269906-c154e56640.zip/node_modules/minimatch/",\ + "packageDependencies": [\ + ["minimatch", "npm:3.1.2"],\ + ["brace-expansion", "npm:1.1.11"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.2.1", {\ + "packageLocation": "./.yarn/cache/minimatch-npm-4.2.1-558ec7f418-2b1514e3d0.zip/node_modules/minimatch/",\ + "packageDependencies": [\ + ["minimatch", "npm:4.2.1"],\ + ["brace-expansion", "npm:1.1.11"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:9.0.5", {\ + "packageLocation": "./.yarn/cache/minimatch-npm-9.0.5-9aa93d97fa-2c035575ed.zip/node_modules/minimatch/",\ + "packageDependencies": [\ + ["minimatch", "npm:9.0.5"],\ + ["brace-expansion", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass", [\ + ["npm:3.3.6", {\ + "packageLocation": "./.yarn/cache/minipass-npm-3.3.6-b8d93a945b-a30d083c80.zip/node_modules/minipass/",\ + "packageDependencies": [\ + ["minipass", "npm:3.3.6"],\ + ["yallist", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.0.0", {\ + "packageLocation": "./.yarn/cache/minipass-npm-5.0.0-c64fb63c92-425dab2887.zip/node_modules/minipass/",\ + "packageDependencies": [\ + ["minipass", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.1.2", {\ + "packageLocation": "./.yarn/cache/minipass-npm-7.1.2-3a5327d36d-2bfd325b95.zip/node_modules/minipass/",\ + "packageDependencies": [\ + ["minipass", "npm:7.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass-collect", [\ + ["npm:2.0.1", {\ + "packageLocation": "./.yarn/cache/minipass-collect-npm-2.0.1-73d3907e40-b251bceea6.zip/node_modules/minipass-collect/",\ + "packageDependencies": [\ + ["minipass-collect", "npm:2.0.1"],\ + ["minipass", "npm:7.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass-fetch", [\ + ["npm:3.0.5", {\ + "packageLocation": "./.yarn/cache/minipass-fetch-npm-3.0.5-ed78529694-8047d27323.zip/node_modules/minipass-fetch/",\ + "packageDependencies": [\ + ["minipass-fetch", "npm:3.0.5"],\ + ["encoding", "npm:0.1.13"],\ + ["minipass", "npm:7.1.2"],\ + ["minipass-sized", "npm:1.0.3"],\ + ["minizlib", "npm:2.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass-flush", [\ + ["npm:1.0.5", {\ + "packageLocation": "./.yarn/cache/minipass-flush-npm-1.0.5-efe79d9826-56269a0b22.zip/node_modules/minipass-flush/",\ + "packageDependencies": [\ + ["minipass-flush", "npm:1.0.5"],\ + ["minipass", "npm:3.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass-pipeline", [\ + ["npm:1.2.4", {\ + "packageLocation": "./.yarn/cache/minipass-pipeline-npm-1.2.4-5924cb077f-b14240dac0.zip/node_modules/minipass-pipeline/",\ + "packageDependencies": [\ + ["minipass-pipeline", "npm:1.2.4"],\ + ["minipass", "npm:3.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass-sized", [\ + ["npm:1.0.3", {\ + "packageLocation": "./.yarn/cache/minipass-sized-npm-1.0.3-306d86f432-79076749fc.zip/node_modules/minipass-sized/",\ + "packageDependencies": [\ + ["minipass-sized", "npm:1.0.3"],\ + ["minipass", "npm:3.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minizlib", [\ + ["npm:2.1.2", {\ + "packageLocation": "./.yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-f1fdeac0b0.zip/node_modules/minizlib/",\ + "packageDependencies": [\ + ["minizlib", "npm:2.1.2"],\ + ["minipass", "npm:3.3.6"],\ + ["yallist", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["mkdirp", [\ + ["npm:1.0.4", {\ + "packageLocation": "./.yarn/cache/mkdirp-npm-1.0.4-37f6ef56b9-a96865108c.zip/node_modules/mkdirp/",\ + "packageDependencies": [\ + ["mkdirp", "npm:1.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["mocha", [\ + ["npm:9.2.2", {\ + "packageLocation": "./.yarn/cache/mocha-npm-9.2.2-f7735febb8-4d5ca4ce33.zip/node_modules/mocha/",\ + "packageDependencies": [\ + ["mocha", "npm:9.2.2"],\ + ["@ungap/promise-all-settled", "npm:1.1.2"],\ + ["ansi-colors", "npm:4.1.1"],\ + ["browser-stdout", "npm:1.3.1"],\ + ["chokidar", "npm:3.5.3"],\ + ["debug", "virtual:f7735febb87b1fbb8215178a6f0b0bc1e3e251c18455c0481843aea1b7aa4c7d6fbdbd3eeee04078e2e2e368e4d4b513dd87411eb2f12aa6ea556f640295bc68#npm:4.3.3"],\ + ["diff", "npm:5.0.0"],\ + ["escape-string-regexp", "npm:4.0.0"],\ + ["find-up", "npm:5.0.0"],\ + ["glob", "npm:7.2.0"],\ + ["growl", "npm:1.10.5"],\ + ["he", "npm:1.2.0"],\ + ["js-yaml", "npm:4.1.0"],\ + ["log-symbols", "npm:4.1.0"],\ + ["minimatch", "npm:4.2.1"],\ + ["ms", "npm:2.1.3"],\ + ["nanoid", "npm:3.3.1"],\ + ["serialize-javascript", "npm:6.0.0"],\ + ["strip-json-comments", "npm:3.1.1"],\ + ["supports-color", "npm:8.1.1"],\ + ["which", "npm:2.0.2"],\ + ["workerpool", "npm:6.2.0"],\ + ["yargs", "npm:16.2.0"],\ + ["yargs-parser", "npm:20.2.4"],\ + ["yargs-unparser", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ms", [\ + ["npm:2.1.2", {\ + "packageLocation": "./.yarn/cache/ms-npm-2.1.2-ec0c1512ff-673cdb2c31.zip/node_modules/ms/",\ + "packageDependencies": [\ + ["ms", "npm:2.1.2"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:2.1.3", {\ + "packageLocation": "./.yarn/cache/ms-npm-2.1.3-81ff3cfac1-aa92de6080.zip/node_modules/ms/",\ + "packageDependencies": [\ + ["ms", "npm:2.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["nanoid", [\ + ["npm:3.3.1", {\ + "packageLocation": "./.yarn/cache/nanoid-npm-3.3.1-bdd760bee0-4ef0969e1b.zip/node_modules/nanoid/",\ + "packageDependencies": [\ + ["nanoid", "npm:3.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["negotiator", [\ + ["npm:0.6.3", {\ + "packageLocation": "./.yarn/cache/negotiator-npm-0.6.3-9d50e36171-b8ffeb1e26.zip/node_modules/negotiator/",\ + "packageDependencies": [\ + ["negotiator", "npm:0.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["no-case", [\ + ["npm:3.0.4", {\ + "packageLocation": "./.yarn/cache/no-case-npm-3.0.4-12884c3d98-0b2ebc113d.zip/node_modules/no-case/",\ + "packageDependencies": [\ + ["no-case", "npm:3.0.4"],\ + ["lower-case", "npm:2.0.2"],\ + ["tslib", "npm:2.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["node-fetch", [\ + ["npm:2.7.0", {\ + "packageLocation": "./.yarn/cache/node-fetch-npm-2.7.0-587d57004e-d76d2f5edb.zip/node_modules/node-fetch/",\ + "packageDependencies": [\ + ["node-fetch", "npm:2.7.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:8970ebf2951b774bae22c19f886b18bd69eadd91cfae0adaae1cc534c141455e70a4695fdc1ca30ba2b550374110aabc3fa5bec15cda285b125c397b8a51f498#npm:2.7.0", {\ + "packageLocation": "./.yarn/__virtual__/node-fetch-virtual-784a3aeb8d/0/cache/node-fetch-npm-2.7.0-587d57004e-d76d2f5edb.zip/node_modules/node-fetch/",\ + "packageDependencies": [\ + ["node-fetch", "virtual:8970ebf2951b774bae22c19f886b18bd69eadd91cfae0adaae1cc534c141455e70a4695fdc1ca30ba2b550374110aabc3fa5bec15cda285b125c397b8a51f498#npm:2.7.0"],\ + ["@types/encoding", null],\ + ["encoding", null],\ + ["whatwg-url", "npm:5.0.0"]\ + ],\ + "packagePeers": [\ + "@types/encoding",\ + "encoding"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["node-gyp", [\ + ["npm:10.2.0", {\ + "packageLocation": "./.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/",\ + "packageDependencies": [\ + ["node-gyp", "npm:10.2.0"],\ + ["env-paths", "npm:2.2.1"],\ + ["exponential-backoff", "npm:3.1.1"],\ + ["glob", "npm:10.4.5"],\ + ["graceful-fs", "npm:4.2.11"],\ + ["make-fetch-happen", "npm:13.0.1"],\ + ["nopt", "npm:7.2.1"],\ + ["proc-log", "npm:4.2.0"],\ + ["semver", "npm:7.6.3"],\ + ["tar", "npm:6.2.1"],\ + ["which", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["node-gyp-build", [\ + ["npm:4.8.2", {\ + "packageLocation": "./.yarn/cache/node-gyp-build-npm-4.8.2-892437a2f1-1a57bba8c4.zip/node_modules/node-gyp-build/",\ + "packageDependencies": [\ + ["node-gyp-build", "npm:4.8.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["nopt", [\ + ["npm:7.2.1", {\ + "packageLocation": "./.yarn/cache/nopt-npm-7.2.1-635b7da949-6fa729cc77.zip/node_modules/nopt/",\ + "packageDependencies": [\ + ["nopt", "npm:7.2.1"],\ + ["abbrev", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["normalize-path", [\ + ["npm:3.0.0", {\ + "packageLocation": "./.yarn/cache/normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip/node_modules/normalize-path/",\ + "packageDependencies": [\ + ["normalize-path", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["once", [\ + ["npm:1.4.0", {\ + "packageLocation": "./.yarn/cache/once-npm-1.4.0-ccf03ef07a-cd0a885013.zip/node_modules/once/",\ + "packageDependencies": [\ + ["once", "npm:1.4.0"],\ + ["wrappy", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["p-limit", [\ + ["npm:3.1.0", {\ + "packageLocation": "./.yarn/cache/p-limit-npm-3.1.0-05d2ede37f-7c3690c4db.zip/node_modules/p-limit/",\ + "packageDependencies": [\ + ["p-limit", "npm:3.1.0"],\ + ["yocto-queue", "npm:0.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["p-locate", [\ + ["npm:5.0.0", {\ + "packageLocation": "./.yarn/cache/p-locate-npm-5.0.0-92cc7c7a3e-1623088f36.zip/node_modules/p-locate/",\ + "packageDependencies": [\ + ["p-locate", "npm:5.0.0"],\ + ["p-limit", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["p-map", [\ + ["npm:4.0.0", {\ + "packageLocation": "./.yarn/cache/p-map-npm-4.0.0-4677ae07c7-cb0ab21ec0.zip/node_modules/p-map/",\ + "packageDependencies": [\ + ["p-map", "npm:4.0.0"],\ + ["aggregate-error", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["package-json-from-dist", [\ + ["npm:1.0.0", {\ + "packageLocation": "./.yarn/cache/package-json-from-dist-npm-1.0.0-961f0fcb3b-ac706ec856.zip/node_modules/package-json-from-dist/",\ + "packageDependencies": [\ + ["package-json-from-dist", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["pako", [\ + ["npm:2.1.0", {\ + "packageLocation": "./.yarn/cache/pako-npm-2.1.0-78df11948c-7166654864.zip/node_modules/pako/",\ + "packageDependencies": [\ + ["pako", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-exists", [\ + ["npm:4.0.0", {\ + "packageLocation": "./.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip/node_modules/path-exists/",\ + "packageDependencies": [\ + ["path-exists", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-is-absolute", [\ + ["npm:1.0.1", {\ + "packageLocation": "./.yarn/cache/path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip/node_modules/path-is-absolute/",\ + "packageDependencies": [\ + ["path-is-absolute", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-key", [\ + ["npm:3.1.1", {\ + "packageLocation": "./.yarn/cache/path-key-npm-3.1.1-0e66ea8321-55cd7a9dd4.zip/node_modules/path-key/",\ + "packageDependencies": [\ + ["path-key", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-scurry", [\ + ["npm:1.11.1", {\ + "packageLocation": "./.yarn/cache/path-scurry-npm-1.11.1-aaf8c339af-890d5abcd5.zip/node_modules/path-scurry/",\ + "packageDependencies": [\ + ["path-scurry", "npm:1.11.1"],\ + ["lru-cache", "npm:10.4.3"],\ + ["minipass", "npm:7.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["pathval", [\ + ["npm:1.1.1", {\ + "packageLocation": "./.yarn/cache/pathval-npm-1.1.1-ce0311d7e0-090e314771.zip/node_modules/pathval/",\ + "packageDependencies": [\ + ["pathval", "npm:1.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["picomatch", [\ + ["npm:2.3.1", {\ + "packageLocation": "./.yarn/cache/picomatch-npm-2.3.1-c782cfd986-050c865ce8.zip/node_modules/picomatch/",\ + "packageDependencies": [\ + ["picomatch", "npm:2.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["prettier", [\ + ["npm:2.8.8", {\ + "packageLocation": "./.yarn/cache/prettier-npm-2.8.8-430828a36c-b49e409431.zip/node_modules/prettier/",\ + "packageDependencies": [\ + ["prettier", "npm:2.8.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["proc-log", [\ + ["npm:4.2.0", {\ + "packageLocation": "./.yarn/cache/proc-log-npm-4.2.0-4d65296a9d-98f6cd012d.zip/node_modules/proc-log/",\ + "packageDependencies": [\ + ["proc-log", "npm:4.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["promise-retry", [\ + ["npm:2.0.1", {\ + "packageLocation": "./.yarn/cache/promise-retry-npm-2.0.1-871f0b01b7-f96a3f6d90.zip/node_modules/promise-retry/",\ + "packageDependencies": [\ + ["promise-retry", "npm:2.0.1"],\ + ["err-code", "npm:2.0.3"],\ + ["retry", "npm:0.12.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["randombytes", [\ + ["npm:2.1.0", {\ + "packageLocation": "./.yarn/cache/randombytes-npm-2.1.0-e3da76bccf-d779499376.zip/node_modules/randombytes/",\ + "packageDependencies": [\ + ["randombytes", "npm:2.1.0"],\ + ["safe-buffer", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["readdirp", [\ + ["npm:3.6.0", {\ + "packageLocation": "./.yarn/cache/readdirp-npm-3.6.0-f950cc74ab-1ced032e6e.zip/node_modules/readdirp/",\ + "packageDependencies": [\ + ["readdirp", "npm:3.6.0"],\ + ["picomatch", "npm:2.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["regenerator-runtime", [\ + ["npm:0.14.1", {\ + "packageLocation": "./.yarn/cache/regenerator-runtime-npm-0.14.1-a6c97c609a-9f57c93277.zip/node_modules/regenerator-runtime/",\ + "packageDependencies": [\ + ["regenerator-runtime", "npm:0.14.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["require-directory", [\ + ["npm:2.1.1", {\ + "packageLocation": "./.yarn/cache/require-directory-npm-2.1.1-8608aee50b-fb47e70bf0.zip/node_modules/require-directory/",\ + "packageDependencies": [\ + ["require-directory", "npm:2.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["retry", [\ + ["npm:0.12.0", {\ + "packageLocation": "./.yarn/cache/retry-npm-0.12.0-72ac7fb4cc-623bd7d2e5.zip/node_modules/retry/",\ + "packageDependencies": [\ + ["retry", "npm:0.12.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["root-workspace-0b6124", [\ + ["workspace:.", {\ + "packageLocation": "./",\ + "packageDependencies": [\ + ["root-workspace-0b6124", "workspace:."],\ + ["@coral-xyz/anchor", "npm:0.30.1"],\ + ["@solana/spl-token", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:0.4.8"],\ + ["@solana/web3.js", "npm:1.95.3"],\ + ["@types/bn.js", "npm:5.1.5"],\ + ["@types/chai", "npm:4.3.19"],\ + ["@types/mocha", "npm:9.1.1"],\ + ["chai", "npm:4.5.0"],\ + ["mocha", "npm:9.2.2"],\ + ["prettier", "npm:2.8.8"],\ + ["typescript", "patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587"]\ + ],\ + "linkType": "SOFT"\ + }]\ + ]],\ + ["rpc-websockets", [\ + ["npm:9.0.2", {\ + "packageLocation": "./.yarn/cache/rpc-websockets-npm-9.0.2-dc49a5f774-c93cd2e5b3.zip/node_modules/rpc-websockets/",\ + "packageDependencies": [\ + ["rpc-websockets", "npm:9.0.2"],\ + ["@swc/helpers", "npm:0.5.13"],\ + ["@types/uuid", "npm:8.3.4"],\ + ["@types/ws", "npm:8.5.12"],\ + ["buffer", "npm:6.0.3"],\ + ["bufferutil", "npm:4.0.8"],\ + ["eventemitter3", "npm:5.0.1"],\ + ["utf-8-validate", "npm:5.0.10"],\ + ["uuid", "npm:8.3.2"],\ + ["ws", "virtual:dc49a5f774a6dfdc204dee2056dda8ad1e9e8b7e69ea88feeed0433a26ade57eb298157610f1c578e678a9dc677a55fdf8bb80cecdb2646496ba448cda26b126#npm:8.18.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["safe-buffer", [\ + ["npm:5.2.1", {\ + "packageLocation": "./.yarn/cache/safe-buffer-npm-5.2.1-3481c8aa9b-b99c4b41fd.zip/node_modules/safe-buffer/",\ + "packageDependencies": [\ + ["safe-buffer", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["safer-buffer", [\ + ["npm:2.1.2", {\ + "packageLocation": "./.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-cab8f25ae6.zip/node_modules/safer-buffer/",\ + "packageDependencies": [\ + ["safer-buffer", "npm:2.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["semver", [\ + ["npm:7.6.3", {\ + "packageLocation": "./.yarn/cache/semver-npm-7.6.3-57e82c14d5-4110ec5d01.zip/node_modules/semver/",\ + "packageDependencies": [\ + ["semver", "npm:7.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["serialize-javascript", [\ + ["npm:6.0.0", {\ + "packageLocation": "./.yarn/cache/serialize-javascript-npm-6.0.0-0bb8a3c88d-56f90b562a.zip/node_modules/serialize-javascript/",\ + "packageDependencies": [\ + ["serialize-javascript", "npm:6.0.0"],\ + ["randombytes", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["shebang-command", [\ + ["npm:2.0.0", {\ + "packageLocation": "./.yarn/cache/shebang-command-npm-2.0.0-eb2b01921d-6b52fe8727.zip/node_modules/shebang-command/",\ + "packageDependencies": [\ + ["shebang-command", "npm:2.0.0"],\ + ["shebang-regex", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["shebang-regex", [\ + ["npm:3.0.0", {\ + "packageLocation": "./.yarn/cache/shebang-regex-npm-3.0.0-899a0cd65e-1a2bcae50d.zip/node_modules/shebang-regex/",\ + "packageDependencies": [\ + ["shebang-regex", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["signal-exit", [\ + ["npm:4.1.0", {\ + "packageLocation": "./.yarn/cache/signal-exit-npm-4.1.0-61fb957687-64c757b498.zip/node_modules/signal-exit/",\ + "packageDependencies": [\ + ["signal-exit", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["smart-buffer", [\ + ["npm:4.2.0", {\ + "packageLocation": "./.yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-b5167a7142.zip/node_modules/smart-buffer/",\ + "packageDependencies": [\ + ["smart-buffer", "npm:4.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["snake-case", [\ + ["npm:3.0.4", {\ + "packageLocation": "./.yarn/cache/snake-case-npm-3.0.4-67f447c30d-0a7a79900b.zip/node_modules/snake-case/",\ + "packageDependencies": [\ + ["snake-case", "npm:3.0.4"],\ + ["dot-case", "npm:3.0.4"],\ + ["tslib", "npm:2.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["socks", [\ + ["npm:2.8.3", {\ + "packageLocation": "./.yarn/cache/socks-npm-2.8.3-3532b59899-7a6b7f6eed.zip/node_modules/socks/",\ + "packageDependencies": [\ + ["socks", "npm:2.8.3"],\ + ["ip-address", "npm:9.0.5"],\ + ["smart-buffer", "npm:4.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["socks-proxy-agent", [\ + ["npm:8.0.4", {\ + "packageLocation": "./.yarn/cache/socks-proxy-agent-npm-8.0.4-991722041a-b2ec5051d8.zip/node_modules/socks-proxy-agent/",\ + "packageDependencies": [\ + ["socks-proxy-agent", "npm:8.0.4"],\ + ["agent-base", "npm:7.1.1"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"],\ + ["socks", "npm:2.8.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["sprintf-js", [\ + ["npm:1.1.3", {\ + "packageLocation": "./.yarn/cache/sprintf-js-npm-1.1.3-b99efd75b2-a3fdac7b49.zip/node_modules/sprintf-js/",\ + "packageDependencies": [\ + ["sprintf-js", "npm:1.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ssri", [\ + ["npm:10.0.6", {\ + "packageLocation": "./.yarn/cache/ssri-npm-10.0.6-6b8eaec5ce-4603d53a05.zip/node_modules/ssri/",\ + "packageDependencies": [\ + ["ssri", "npm:10.0.6"],\ + ["minipass", "npm:7.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["string-width", [\ + ["npm:4.2.3", {\ + "packageLocation": "./.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip/node_modules/string-width/",\ + "packageDependencies": [\ + ["string-width", "npm:4.2.3"],\ + ["emoji-regex", "npm:8.0.0"],\ + ["is-fullwidth-code-point", "npm:3.0.0"],\ + ["strip-ansi", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.1.2", {\ + "packageLocation": "./.yarn/cache/string-width-npm-5.1.2-bf60531341-7369deaa29.zip/node_modules/string-width/",\ + "packageDependencies": [\ + ["string-width", "npm:5.1.2"],\ + ["eastasianwidth", "npm:0.2.0"],\ + ["emoji-regex", "npm:9.2.2"],\ + ["strip-ansi", "npm:7.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["strip-ansi", [\ + ["npm:6.0.1", {\ + "packageLocation": "./.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-f3cd25890a.zip/node_modules/strip-ansi/",\ + "packageDependencies": [\ + ["strip-ansi", "npm:6.0.1"],\ + ["ansi-regex", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.1.0", {\ + "packageLocation": "./.yarn/cache/strip-ansi-npm-7.1.0-7453b80b79-859c73fcf2.zip/node_modules/strip-ansi/",\ + "packageDependencies": [\ + ["strip-ansi", "npm:7.1.0"],\ + ["ansi-regex", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["strip-json-comments", [\ + ["npm:3.1.1", {\ + "packageLocation": "./.yarn/cache/strip-json-comments-npm-3.1.1-dcb2324823-492f73e272.zip/node_modules/strip-json-comments/",\ + "packageDependencies": [\ + ["strip-json-comments", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["superstruct", [\ + ["npm:0.15.5", {\ + "packageLocation": "./.yarn/cache/superstruct-npm-0.15.5-25c6f7b4d6-6d1f5249fe.zip/node_modules/superstruct/",\ + "packageDependencies": [\ + ["superstruct", "npm:0.15.5"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:2.0.2", {\ + "packageLocation": "./.yarn/cache/superstruct-npm-2.0.2-105f89beae-a5f75b72cb.zip/node_modules/superstruct/",\ + "packageDependencies": [\ + ["superstruct", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["supports-color", [\ + ["npm:7.2.0", {\ + "packageLocation": "./.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-3dda818de0.zip/node_modules/supports-color/",\ + "packageDependencies": [\ + ["supports-color", "npm:7.2.0"],\ + ["has-flag", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:8.1.1", {\ + "packageLocation": "./.yarn/cache/supports-color-npm-8.1.1-289e937149-c052193a7e.zip/node_modules/supports-color/",\ + "packageDependencies": [\ + ["supports-color", "npm:8.1.1"],\ + ["has-flag", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tar", [\ + ["npm:6.2.1", {\ + "packageLocation": "./.yarn/cache/tar-npm-6.2.1-237800bb20-f1322768c9.zip/node_modules/tar/",\ + "packageDependencies": [\ + ["tar", "npm:6.2.1"],\ + ["chownr", "npm:2.0.0"],\ + ["fs-minipass", "npm:2.1.0"],\ + ["minipass", "npm:5.0.0"],\ + ["minizlib", "npm:2.1.2"],\ + ["mkdirp", "npm:1.0.4"],\ + ["yallist", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["text-encoding-utf-8", [\ + ["npm:1.0.2", {\ + "packageLocation": "./.yarn/cache/text-encoding-utf-8-npm-1.0.2-d3a9fb552b-ec4c15d50e.zip/node_modules/text-encoding-utf-8/",\ + "packageDependencies": [\ + ["text-encoding-utf-8", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["through", [\ + ["npm:2.3.8", {\ + "packageLocation": "./.yarn/cache/through-npm-2.3.8-df5f72a16e-a38c3e0598.zip/node_modules/through/",\ + "packageDependencies": [\ + ["through", "npm:2.3.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["to-regex-range", [\ + ["npm:5.0.1", {\ + "packageLocation": "./.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-f76fa01b3d.zip/node_modules/to-regex-range/",\ + "packageDependencies": [\ + ["to-regex-range", "npm:5.0.1"],\ + ["is-number", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["toml", [\ + ["npm:3.0.0", {\ + "packageLocation": "./.yarn/cache/toml-npm-3.0.0-f993270804-5d7f1d8413.zip/node_modules/toml/",\ + "packageDependencies": [\ + ["toml", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tr46", [\ + ["npm:0.0.3", {\ + "packageLocation": "./.yarn/cache/tr46-npm-0.0.3-de53018915-726321c5ea.zip/node_modules/tr46/",\ + "packageDependencies": [\ + ["tr46", "npm:0.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tslib", [\ + ["npm:2.7.0", {\ + "packageLocation": "./.yarn/cache/tslib-npm-2.7.0-21668f5c21-1606d5c89f.zip/node_modules/tslib/",\ + "packageDependencies": [\ + ["tslib", "npm:2.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["type-detect", [\ + ["npm:4.1.0", {\ + "packageLocation": "./.yarn/cache/type-detect-npm-4.1.0-171d011a73-3b32f873cd.zip/node_modules/type-detect/",\ + "packageDependencies": [\ + ["type-detect", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["typescript", [\ + ["patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587", {\ + "packageLocation": "./.yarn/cache/typescript-patch-f8edcd7439-1f8f3b6aae.zip/node_modules/typescript/",\ + "packageDependencies": [\ + ["typescript", "patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["undici-types", [\ + ["npm:6.19.8", {\ + "packageLocation": "./.yarn/cache/undici-types-npm-6.19.8-9f12285b7a-de51f1b447.zip/node_modules/undici-types/",\ + "packageDependencies": [\ + ["undici-types", "npm:6.19.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["unique-filename", [\ + ["npm:3.0.0", {\ + "packageLocation": "./.yarn/cache/unique-filename-npm-3.0.0-77d68e0a45-8e2f59b356.zip/node_modules/unique-filename/",\ + "packageDependencies": [\ + ["unique-filename", "npm:3.0.0"],\ + ["unique-slug", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["unique-slug", [\ + ["npm:4.0.0", {\ + "packageLocation": "./.yarn/cache/unique-slug-npm-4.0.0-e6b08f28aa-0884b58365.zip/node_modules/unique-slug/",\ + "packageDependencies": [\ + ["unique-slug", "npm:4.0.0"],\ + ["imurmurhash", "npm:0.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["utf-8-validate", [\ + ["npm:5.0.10", {\ + "packageLocation": "./.yarn/unplugged/utf-8-validate-npm-5.0.10-93e9b6f750/node_modules/utf-8-validate/",\ + "packageDependencies": [\ + ["utf-8-validate", "npm:5.0.10"],\ + ["node-gyp", "npm:10.2.0"],\ + ["node-gyp-build", "npm:4.8.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["uuid", [\ + ["npm:8.3.2", {\ + "packageLocation": "./.yarn/cache/uuid-npm-8.3.2-eca0baba53-5575a8a75c.zip/node_modules/uuid/",\ + "packageDependencies": [\ + ["uuid", "npm:8.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["webidl-conversions", [\ + ["npm:3.0.1", {\ + "packageLocation": "./.yarn/cache/webidl-conversions-npm-3.0.1-60310f6a2b-c92a0a6ab9.zip/node_modules/webidl-conversions/",\ + "packageDependencies": [\ + ["webidl-conversions", "npm:3.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["whatwg-url", [\ + ["npm:5.0.0", {\ + "packageLocation": "./.yarn/cache/whatwg-url-npm-5.0.0-374fb45e60-b8daed4ad3.zip/node_modules/whatwg-url/",\ + "packageDependencies": [\ + ["whatwg-url", "npm:5.0.0"],\ + ["tr46", "npm:0.0.3"],\ + ["webidl-conversions", "npm:3.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["which", [\ + ["npm:2.0.2", {\ + "packageLocation": "./.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip/node_modules/which/",\ + "packageDependencies": [\ + ["which", "npm:2.0.2"],\ + ["isexe", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.0", {\ + "packageLocation": "./.yarn/cache/which-npm-4.0.0-dd31cd4928-f17e84c042.zip/node_modules/which/",\ + "packageDependencies": [\ + ["which", "npm:4.0.0"],\ + ["isexe", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["workerpool", [\ + ["npm:6.2.0", {\ + "packageLocation": "./.yarn/cache/workerpool-npm-6.2.0-d2a722f6bb-3493b4f0ef.zip/node_modules/workerpool/",\ + "packageDependencies": [\ + ["workerpool", "npm:6.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["wrap-ansi", [\ + ["npm:7.0.0", {\ + "packageLocation": "./.yarn/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-a790b846fd.zip/node_modules/wrap-ansi/",\ + "packageDependencies": [\ + ["wrap-ansi", "npm:7.0.0"],\ + ["ansi-styles", "npm:4.3.0"],\ + ["string-width", "npm:4.2.3"],\ + ["strip-ansi", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:8.1.0", {\ + "packageLocation": "./.yarn/cache/wrap-ansi-npm-8.1.0-26a4e6ae28-371733296d.zip/node_modules/wrap-ansi/",\ + "packageDependencies": [\ + ["wrap-ansi", "npm:8.1.0"],\ + ["ansi-styles", "npm:6.2.1"],\ + ["string-width", "npm:5.1.2"],\ + ["strip-ansi", "npm:7.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["wrappy", [\ + ["npm:1.0.2", {\ + "packageLocation": "./.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip/node_modules/wrappy/",\ + "packageDependencies": [\ + ["wrappy", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ws", [\ + ["npm:7.5.10", {\ + "packageLocation": "./.yarn/cache/ws-npm-7.5.10-878ccb886b-f9bb062abf.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "npm:7.5.10"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["npm:8.18.0", {\ + "packageLocation": "./.yarn/cache/ws-npm-8.18.0-56f68bc4d6-91d4d35bc9.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "npm:8.18.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:dc49a5f774a6dfdc204dee2056dda8ad1e9e8b7e69ea88feeed0433a26ade57eb298157610f1c578e678a9dc677a55fdf8bb80cecdb2646496ba448cda26b126#npm:8.18.0", {\ + "packageLocation": "./.yarn/__virtual__/ws-virtual-216446dedb/0/cache/ws-npm-8.18.0-56f68bc4d6-91d4d35bc9.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "virtual:dc49a5f774a6dfdc204dee2056dda8ad1e9e8b7e69ea88feeed0433a26ade57eb298157610f1c578e678a9dc677a55fdf8bb80cecdb2646496ba448cda26b126#npm:8.18.0"],\ + ["@types/bufferutil", null],\ + ["@types/utf-8-validate", null],\ + ["bufferutil", "npm:4.0.8"],\ + ["utf-8-validate", "npm:5.0.10"]\ + ],\ + "packagePeers": [\ + "@types/bufferutil",\ + "@types/utf-8-validate",\ + "bufferutil",\ + "utf-8-validate"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:7.5.10", {\ + "packageLocation": "./.yarn/__virtual__/ws-virtual-d53d93d9c0/0/cache/ws-npm-7.5.10-878ccb886b-f9bb062abf.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:7.5.10"],\ + ["@types/bufferutil", null],\ + ["@types/utf-8-validate", null],\ + ["bufferutil", null],\ + ["utf-8-validate", null]\ + ],\ + "packagePeers": [\ + "@types/bufferutil",\ + "@types/utf-8-validate",\ + "bufferutil",\ + "utf-8-validate"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["y18n", [\ + ["npm:5.0.8", {\ + "packageLocation": "./.yarn/cache/y18n-npm-5.0.8-5f3a0a7e62-54f0fb9562.zip/node_modules/y18n/",\ + "packageDependencies": [\ + ["y18n", "npm:5.0.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yallist", [\ + ["npm:4.0.0", {\ + "packageLocation": "./.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip/node_modules/yallist/",\ + "packageDependencies": [\ + ["yallist", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yargs", [\ + ["npm:16.2.0", {\ + "packageLocation": "./.yarn/cache/yargs-npm-16.2.0-547873d425-b14afbb51e.zip/node_modules/yargs/",\ + "packageDependencies": [\ + ["yargs", "npm:16.2.0"],\ + ["cliui", "npm:7.0.4"],\ + ["escalade", "npm:3.2.0"],\ + ["get-caller-file", "npm:2.0.5"],\ + ["require-directory", "npm:2.1.1"],\ + ["string-width", "npm:4.2.3"],\ + ["y18n", "npm:5.0.8"],\ + ["yargs-parser", "npm:20.2.9"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yargs-parser", [\ + ["npm:20.2.4", {\ + "packageLocation": "./.yarn/cache/yargs-parser-npm-20.2.4-1de20916a6-d251998a37.zip/node_modules/yargs-parser/",\ + "packageDependencies": [\ + ["yargs-parser", "npm:20.2.4"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:20.2.9", {\ + "packageLocation": "./.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-8bb69015f2.zip/node_modules/yargs-parser/",\ + "packageDependencies": [\ + ["yargs-parser", "npm:20.2.9"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yargs-unparser", [\ + ["npm:2.0.0", {\ + "packageLocation": "./.yarn/cache/yargs-unparser-npm-2.0.0-930f3ff3f6-68f9a542c6.zip/node_modules/yargs-unparser/",\ + "packageDependencies": [\ + ["yargs-unparser", "npm:2.0.0"],\ + ["camelcase", "npm:6.3.0"],\ + ["decamelize", "npm:4.0.0"],\ + ["flat", "npm:5.0.2"],\ + ["is-plain-obj", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yocto-queue", [\ + ["npm:0.1.0", {\ + "packageLocation": "./.yarn/cache/yocto-queue-npm-0.1.0-c6c9a7db29-f77b3d8d00.zip/node_modules/yocto-queue/",\ + "packageDependencies": [\ + ["yocto-queue", "npm:0.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]]\ + ]\ + }'), {basePath: basePath || __dirname}); + } + +const fs = require('fs'); +const path = require('path'); +const require$$0 = require('module'); +const StringDecoder = require('string_decoder'); +const url = require('url'); +const os = require('os'); +const nodeUtils = require('util'); +const readline = require('readline'); +const assert = require('assert'); +const stream = require('stream'); +const zlib = require('zlib'); +const events = require('events'); + +const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e }; + +function _interopNamespace(e) { + if (e && e.__esModule) return e; + const n = Object.create(null); + if (e) { + for (const k in e) { + if (k !== 'default') { + const d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: () => e[k] + }); + } + } + } + n.default = e; + return Object.freeze(n); +} + +const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); +const path__default = /*#__PURE__*/_interopDefaultLegacy(path); +const require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0); +const StringDecoder__default = /*#__PURE__*/_interopDefaultLegacy(StringDecoder); +const nodeUtils__namespace = /*#__PURE__*/_interopNamespace(nodeUtils); +const assert__default = /*#__PURE__*/_interopDefaultLegacy(assert); +const zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib); + +const S_IFMT = 61440; +const S_IFDIR = 16384; +const S_IFREG = 32768; +const S_IFLNK = 40960; +const SAFE_TIME = 456789e3; + +const DEFAULT_MODE = S_IFREG | 420; +class StatEntry { + constructor() { + this.uid = 0; + this.gid = 0; + this.size = 0; + this.blksize = 0; + this.atimeMs = 0; + this.mtimeMs = 0; + this.ctimeMs = 0; + this.birthtimeMs = 0; + this.atime = new Date(0); + this.mtime = new Date(0); + this.ctime = new Date(0); + this.birthtime = new Date(0); + this.dev = 0; + this.ino = 0; + this.mode = DEFAULT_MODE; + this.nlink = 1; + this.rdev = 0; + this.blocks = 1; + } + isBlockDevice() { + return false; + } + isCharacterDevice() { + return false; + } + isDirectory() { + return (this.mode & S_IFMT) === S_IFDIR; + } + isFIFO() { + return false; + } + isFile() { + return (this.mode & S_IFMT) === S_IFREG; + } + isSocket() { + return false; + } + isSymbolicLink() { + return (this.mode & S_IFMT) === S_IFLNK; + } +} +class BigIntStatsEntry { + constructor() { + this.uid = BigInt(0); + this.gid = BigInt(0); + this.size = BigInt(0); + this.blksize = BigInt(0); + this.atimeMs = BigInt(0); + this.mtimeMs = BigInt(0); + this.ctimeMs = BigInt(0); + this.birthtimeMs = BigInt(0); + this.atimeNs = BigInt(0); + this.mtimeNs = BigInt(0); + this.ctimeNs = BigInt(0); + this.birthtimeNs = BigInt(0); + this.atime = new Date(0); + this.mtime = new Date(0); + this.ctime = new Date(0); + this.birthtime = new Date(0); + this.dev = BigInt(0); + this.ino = BigInt(0); + this.mode = BigInt(DEFAULT_MODE); + this.nlink = BigInt(1); + this.rdev = BigInt(0); + this.blocks = BigInt(1); + } + isBlockDevice() { + return false; + } + isCharacterDevice() { + return false; + } + isDirectory() { + return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFDIR); + } + isFIFO() { + return false; + } + isFile() { + return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFREG); + } + isSocket() { + return false; + } + isSymbolicLink() { + return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFLNK); + } +} +function makeDefaultStats() { + return new StatEntry(); +} +function clearStats(stats) { + for (const key in stats) { + if (Object.prototype.hasOwnProperty.call(stats, key)) { + const element = stats[key]; + if (typeof element === `number`) { + stats[key] = 0; + } else if (typeof element === `bigint`) { + stats[key] = BigInt(0); + } else if (nodeUtils__namespace.types.isDate(element)) { + stats[key] = new Date(0); + } + } + } + return stats; +} +function convertToBigIntStats(stats) { + const bigintStats = new BigIntStatsEntry(); + for (const key in stats) { + if (Object.prototype.hasOwnProperty.call(stats, key)) { + const element = stats[key]; + if (typeof element === `number`) { + bigintStats[key] = BigInt(element); + } else if (nodeUtils__namespace.types.isDate(element)) { + bigintStats[key] = new Date(element); + } + } + } + bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6); + bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6); + bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6); + bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6); + return bigintStats; +} +function areStatsEqual(a, b) { + if (a.atimeMs !== b.atimeMs) + return false; + if (a.birthtimeMs !== b.birthtimeMs) + return false; + if (a.blksize !== b.blksize) + return false; + if (a.blocks !== b.blocks) + return false; + if (a.ctimeMs !== b.ctimeMs) + return false; + if (a.dev !== b.dev) + return false; + if (a.gid !== b.gid) + return false; + if (a.ino !== b.ino) + return false; + if (a.isBlockDevice() !== b.isBlockDevice()) + return false; + if (a.isCharacterDevice() !== b.isCharacterDevice()) + return false; + if (a.isDirectory() !== b.isDirectory()) + return false; + if (a.isFIFO() !== b.isFIFO()) + return false; + if (a.isFile() !== b.isFile()) + return false; + if (a.isSocket() !== b.isSocket()) + return false; + if (a.isSymbolicLink() !== b.isSymbolicLink()) + return false; + if (a.mode !== b.mode) + return false; + if (a.mtimeMs !== b.mtimeMs) + return false; + if (a.nlink !== b.nlink) + return false; + if (a.rdev !== b.rdev) + return false; + if (a.size !== b.size) + return false; + if (a.uid !== b.uid) + return false; + const aN = a; + const bN = b; + if (aN.atimeNs !== bN.atimeNs) + return false; + if (aN.mtimeNs !== bN.mtimeNs) + return false; + if (aN.ctimeNs !== bN.ctimeNs) + return false; + if (aN.birthtimeNs !== bN.birthtimeNs) + return false; + return true; +} + +const PortablePath = { + root: `/`, + dot: `.`, + parent: `..` +}; +const Filename = { + nodeModules: `node_modules`, + manifest: `package.json`, + lockfile: `yarn.lock`, + virtual: `__virtual__`, + pnpJs: `.pnp.js`, + pnpCjs: `.pnp.cjs`, + rc: `.yarnrc.yml` +}; +const npath = Object.create(path__default.default); +const ppath = Object.create(path__default.default.posix); +npath.cwd = () => process.cwd(); +ppath.cwd = () => toPortablePath(process.cwd()); +ppath.resolve = (...segments) => { + if (segments.length > 0 && ppath.isAbsolute(segments[0])) { + return path__default.default.posix.resolve(...segments); + } else { + return path__default.default.posix.resolve(ppath.cwd(), ...segments); + } +}; +const contains = function(pathUtils, from, to) { + from = pathUtils.normalize(from); + to = pathUtils.normalize(to); + if (from === to) + return `.`; + if (!from.endsWith(pathUtils.sep)) + from = from + pathUtils.sep; + if (to.startsWith(from)) { + return to.slice(from.length); + } else { + return null; + } +}; +npath.fromPortablePath = fromPortablePath; +npath.toPortablePath = toPortablePath; +npath.contains = (from, to) => contains(npath, from, to); +ppath.contains = (from, to) => contains(ppath, from, to); +const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; +const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; +const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; +const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; +function fromPortablePath(p) { + if (process.platform !== `win32`) + return p; + let portablePathMatch, uncPortablePathMatch; + if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) + p = portablePathMatch[1]; + else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) + p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; + else + return p; + return p.replace(/\//g, `\\`); +} +function toPortablePath(p) { + if (process.platform !== `win32`) + return p; + p = p.replace(/\\/g, `/`); + let windowsPathMatch, uncWindowsPathMatch; + if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) + p = `/${windowsPathMatch[1]}`; + else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) + p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; + return p; +} +function convertPath(targetPathUtils, sourcePath) { + return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); +} + +const defaultTime = new Date(SAFE_TIME * 1e3); +async function copyPromise(destinationFs, destination, sourceFs, source, opts) { + const normalizedDestination = destinationFs.pathUtils.normalize(destination); + const normalizedSource = sourceFs.pathUtils.normalize(source); + const prelayout = []; + const postlayout = []; + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); + await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); + const updateTime = typeof destinationFs.lutimesPromise === `function` ? destinationFs.lutimesPromise.bind(destinationFs) : destinationFs.utimesPromise.bind(destinationFs); + await copyImpl(prelayout, postlayout, updateTime, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); + for (const operation of prelayout) + await operation(); + await Promise.all(postlayout.map((operation) => { + return operation(); + })); +} +async function copyImpl(prelayout, postlayout, updateTime, destinationFs, destination, sourceFs, source, opts) { + var _a, _b; + const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; + const sourceStat = await sourceFs.lstatPromise(source); + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; + let updated; + switch (true) { + case sourceStat.isDirectory(): + { + updated = await copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isFile(): + { + updated = await copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isSymbolicLink(): + { + updated = await copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + default: + { + throw new Error(`Unsupported file type (${sourceStat.mode})`); + } + } + if (updated || ((_a = destinationStat == null ? void 0 : destinationStat.mtime) == null ? void 0 : _a.getTime()) !== mtime.getTime() || ((_b = destinationStat == null ? void 0 : destinationStat.atime) == null ? void 0 : _b.getTime()) !== atime.getTime()) { + postlayout.push(() => updateTime(destination, atime, mtime)); + updated = true; + } + if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { + postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); + updated = true; + } + return updated; +} +async function maybeLStat(baseFs, p) { + try { + return await baseFs.lstatPromise(p); + } catch (e) { + return null; + } +} +async function copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null && !destinationStat.isDirectory()) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + let updated = false; + if (destinationStat === null) { + prelayout.push(async () => { + try { + await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); + } catch (err) { + if (err.code !== `EEXIST`) { + throw err; + } + } + }); + updated = true; + } + const entries = await sourceFs.readdirPromise(source); + const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; + if (opts.stableSort) { + for (const entry of entries.sort()) { + if (await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { + updated = true; + } + } + } else { + const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { + await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); + })); + if (entriesUpdateStatus.some((status) => status)) { + updated = true; + } + } + return updated; +} +const isCloneSupportedCache = /* @__PURE__ */ new WeakMap(); +function makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy) { + return async () => { + await opFs.linkPromise(source, destination); + if (linkStrategy === "readOnly" /* ReadOnly */) { + sourceStat.mode &= ~146; + await opFs.chmodPromise(destination, sourceStat.mode); + } + }; +} +function makeCloneLinkOperation(opFs, destination, source, sourceStat, linkStrategy) { + const isCloneSupported = isCloneSupportedCache.get(opFs); + if (typeof isCloneSupported === `undefined`) { + return async () => { + try { + await opFs.copyFilePromise(source, destination, fs__default.default.constants.COPYFILE_FICLONE_FORCE); + isCloneSupportedCache.set(opFs, true); + } catch (err) { + if (err.code === `ENOSYS` || err.code === `ENOTSUP`) { + isCloneSupportedCache.set(opFs, false); + await makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy)(); + } else { + throw err; + } + } + }; + } else { + if (isCloneSupported) { + return async () => opFs.copyFilePromise(source, destination, fs__default.default.constants.COPYFILE_FICLONE_FORCE); + } else { + return makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy); + } + } +} +async function copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + var _a; + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + const linkStrategy = (_a = opts.linkStrategy) != null ? _a : null; + const op = destinationFs === sourceFs ? linkStrategy !== null ? makeCloneLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.copyFilePromise(source, destination, fs__default.default.constants.COPYFILE_FICLONE) : linkStrategy !== null ? makeLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.writeFilePromise(destination, await sourceFs.readFilePromise(source)); + prelayout.push(async () => op()); + return true; +} +async function copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); + }); + return true; +} + +function makeError$1(code, message) { + return Object.assign(new Error(`${code}: ${message}`), { code }); +} +function EBUSY(message) { + return makeError$1(`EBUSY`, message); +} +function ENOSYS(message, reason) { + return makeError$1(`ENOSYS`, `${message}, ${reason}`); +} +function EINVAL(reason) { + return makeError$1(`EINVAL`, `invalid argument, ${reason}`); +} +function EBADF(reason) { + return makeError$1(`EBADF`, `bad file descriptor, ${reason}`); +} +function ENOENT(reason) { + return makeError$1(`ENOENT`, `no such file or directory, ${reason}`); +} +function ENOTDIR(reason) { + return makeError$1(`ENOTDIR`, `not a directory, ${reason}`); +} +function EISDIR(reason) { + return makeError$1(`EISDIR`, `illegal operation on a directory, ${reason}`); +} +function EEXIST(reason) { + return makeError$1(`EEXIST`, `file already exists, ${reason}`); +} +function EROFS(reason) { + return makeError$1(`EROFS`, `read-only filesystem, ${reason}`); +} +function ENOTEMPTY(reason) { + return makeError$1(`ENOTEMPTY`, `directory not empty, ${reason}`); +} +function EOPNOTSUPP(reason) { + return makeError$1(`EOPNOTSUPP`, `operation not supported, ${reason}`); +} +function ERR_DIR_CLOSED() { + return makeError$1(`ERR_DIR_CLOSED`, `Directory handle was closed`); +} +class LibzipError extends Error { + constructor(message, code) { + super(message); + this.name = `Libzip Error`; + this.code = code; + } +} + +class CustomDir { + constructor(path, nextDirent, opts = {}) { + this.path = path; + this.nextDirent = nextDirent; + this.opts = opts; + this.closed = false; + } + throwIfClosed() { + if (this.closed) { + throw ERR_DIR_CLOSED(); + } + } + async *[Symbol.asyncIterator]() { + try { + let dirent; + while ((dirent = await this.read()) !== null) { + yield dirent; + } + } finally { + await this.close(); + } + } + read(cb) { + const dirent = this.readSync(); + if (typeof cb !== `undefined`) + return cb(null, dirent); + return Promise.resolve(dirent); + } + readSync() { + this.throwIfClosed(); + return this.nextDirent(); + } + close(cb) { + this.closeSync(); + if (typeof cb !== `undefined`) + return cb(null); + return Promise.resolve(); + } + closeSync() { + var _a, _b; + this.throwIfClosed(); + (_b = (_a = this.opts).onClose) == null ? void 0 : _b.call(_a); + this.closed = true; + } +} +function opendir(fakeFs, path, entries, opts) { + const nextDirent = () => { + const filename = entries.shift(); + if (typeof filename === `undefined`) + return null; + return Object.assign(fakeFs.statSync(fakeFs.pathUtils.join(path, filename)), { + name: filename + }); + }; + return new CustomDir(path, nextDirent, opts); +} + +class FakeFS { + constructor(pathUtils) { + this.pathUtils = pathUtils; + } + async *genTraversePromise(init, { stableSort = false } = {}) { + const stack = [init]; + while (stack.length > 0) { + const p = stack.shift(); + const entry = await this.lstatPromise(p); + if (entry.isDirectory()) { + const entries = await this.readdirPromise(p); + if (stableSort) { + for (const entry2 of entries.sort()) { + stack.push(this.pathUtils.join(p, entry2)); + } + } else { + throw new Error(`Not supported`); + } + } else { + yield p; + } + } + } + async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { + let stat; + try { + stat = await this.lstatPromise(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) { + const entries = await this.readdirPromise(p); + await Promise.all(entries.map((entry) => { + return this.removePromise(this.pathUtils.resolve(p, entry)); + })); + } + for (let t = 0; t <= maxRetries; t++) { + try { + await this.rmdirPromise(p); + break; + } catch (error) { + if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { + throw error; + } else if (t < maxRetries) { + await new Promise((resolve) => setTimeout(resolve, t * 100)); + } + } + } + } else { + await this.unlinkPromise(p); + } + } + removeSync(p, { recursive = true } = {}) { + let stat; + try { + stat = this.lstatSync(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) + for (const entry of this.readdirSync(p)) + this.removeSync(this.pathUtils.resolve(p, entry)); + this.rmdirSync(p); + } else { + this.unlinkSync(p); + } + } + async mkdirpPromise(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + await this.mkdirPromise(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory != null ? createdDirectory : createdDirectory = subPath; + if (chmod != null) + await this.chmodPromise(subPath, chmod); + if (utimes != null) { + await this.utimesPromise(subPath, utimes[0], utimes[1]); + } else { + const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); + await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + mkdirpSync(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + this.mkdirSync(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory != null ? createdDirectory : createdDirectory = subPath; + if (chmod != null) + this.chmodSync(subPath, chmod); + if (utimes != null) { + this.utimesSync(subPath, utimes[0], utimes[1]); + } else { + const parentStat = this.statSync(this.pathUtils.dirname(subPath)); + this.utimesSync(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { + return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); + } + copySync(destination, source, { baseFs = this, overwrite = true } = {}) { + const stat = baseFs.lstatSync(source); + const exists = this.existsSync(destination); + if (stat.isDirectory()) { + this.mkdirpSync(destination); + const directoryListing = baseFs.readdirSync(source); + for (const entry of directoryListing) { + this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); + } + } else if (stat.isFile()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const content = baseFs.readFileSync(source); + this.writeFileSync(destination, content); + } + } else if (stat.isSymbolicLink()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const target = baseFs.readlinkSync(source); + this.symlinkSync(convertPath(this.pathUtils, target), destination); + } + } else { + throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); + } + const mode = stat.mode & 511; + this.chmodSync(destination, mode); + } + async changeFilePromise(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferPromise(p, content, opts); + } else { + return this.changeFileTextPromise(p, content, opts); + } + } + async changeFileBufferPromise(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = await this.readFilePromise(p); + } catch (error) { + } + if (Buffer.compare(current, content) === 0) + return; + await this.writeFilePromise(p, content, { mode }); + } + async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { + let current = ``; + try { + current = await this.readFilePromise(p, `utf8`); + } catch (error) { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + await this.writeFilePromise(p, normalizedContent, { mode }); + } + changeFileSync(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferSync(p, content, opts); + } else { + return this.changeFileTextSync(p, content, opts); + } + } + changeFileBufferSync(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = this.readFileSync(p); + } catch (error) { + } + if (Buffer.compare(current, content) === 0) + return; + this.writeFileSync(p, content, { mode }); + } + changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { + let current = ``; + try { + current = this.readFileSync(p, `utf8`); + } catch (error) { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + this.writeFileSync(p, normalizedContent, { mode }); + } + async movePromise(fromP, toP) { + try { + await this.renamePromise(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + await this.copyPromise(toP, fromP); + await this.removePromise(fromP); + } else { + throw error; + } + } + } + moveSync(fromP, toP) { + try { + this.renameSync(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + this.copySync(toP, fromP); + this.removeSync(fromP); + } else { + throw error; + } + } + } + async lockPromise(affectedPath, callback) { + const lockPath = `${affectedPath}.flock`; + const interval = 1e3 / 60; + const startTime = Date.now(); + let fd = null; + const isAlive = async () => { + let pid; + try { + [pid] = await this.readJsonPromise(lockPath); + } catch (error) { + return Date.now() - startTime < 500; + } + try { + process.kill(pid, 0); + return true; + } catch (error) { + return false; + } + }; + while (fd === null) { + try { + fd = await this.openPromise(lockPath, `wx`); + } catch (error) { + if (error.code === `EEXIST`) { + if (!await isAlive()) { + try { + await this.unlinkPromise(lockPath); + continue; + } catch (error2) { + } + } + if (Date.now() - startTime < 60 * 1e3) { + await new Promise((resolve) => setTimeout(resolve, interval)); + } else { + throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); + } + } else { + throw error; + } + } + } + await this.writePromise(fd, JSON.stringify([process.pid])); + try { + return await callback(); + } finally { + try { + await this.closePromise(fd); + await this.unlinkPromise(lockPath); + } catch (error) { + } + } + } + async readJsonPromise(p) { + const content = await this.readFilePromise(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + readJsonSync(p) { + const content = this.readFileSync(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + async writeJsonPromise(p, data) { + return await this.writeFilePromise(p, `${JSON.stringify(data, null, 2)} +`); + } + writeJsonSync(p, data) { + return this.writeFileSync(p, `${JSON.stringify(data, null, 2)} +`); + } + async preserveTimePromise(p, cb) { + const stat = await this.lstatPromise(p); + const result = await cb(); + if (typeof result !== `undefined`) + p = result; + if (this.lutimesPromise) { + await this.lutimesPromise(p, stat.atime, stat.mtime); + } else if (!stat.isSymbolicLink()) { + await this.utimesPromise(p, stat.atime, stat.mtime); + } + } + async preserveTimeSync(p, cb) { + const stat = this.lstatSync(p); + const result = cb(); + if (typeof result !== `undefined`) + p = result; + if (this.lutimesSync) { + this.lutimesSync(p, stat.atime, stat.mtime); + } else if (!stat.isSymbolicLink()) { + this.utimesSync(p, stat.atime, stat.mtime); + } + } +} +class BasePortableFakeFS extends FakeFS { + constructor() { + super(ppath); + } +} +function getEndOfLine(content) { + const matches = content.match(/\r?\n/g); + if (matches === null) + return os.EOL; + const crlf = matches.filter((nl) => nl === `\r +`).length; + const lf = matches.length - crlf; + return crlf > lf ? `\r +` : ` +`; +} +function normalizeLineEndings(originalContent, newContent) { + return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); +} + +class NodeFS extends BasePortableFakeFS { + constructor(realFs = fs__default.default) { + super(); + this.realFs = realFs; + if (typeof this.realFs.lutimes !== `undefined`) { + this.lutimesPromise = this.lutimesPromiseImpl; + this.lutimesSync = this.lutimesSyncImpl; + } + } + getExtractHint() { + return false; + } + getRealPath() { + return PortablePath.root; + } + resolve(p) { + return ppath.resolve(p); + } + async openPromise(p, flags, mode) { + return await new Promise((resolve, reject) => { + this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); + }); + } + openSync(p, flags, mode) { + return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); + } + async opendirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (typeof opts !== `undefined`) { + this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }).then((dir) => { + return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true }); + }); + } + opendirSync(p, opts) { + const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); + return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true }); + } + async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { + return await new Promise((resolve, reject) => { + this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { + if (error) { + reject(error); + } else { + resolve(bytesRead); + } + }); + }); + } + readSync(fd, buffer, offset, length, position) { + return this.realFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + return await new Promise((resolve, reject) => { + if (typeof buffer === `string`) { + return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); + } else { + return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); + } + }); + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.realFs.writeSync(fd, buffer, offset); + } else { + return this.realFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + await new Promise((resolve, reject) => { + this.realFs.close(fd, this.makeCallback(resolve, reject)); + }); + } + closeSync(fd) { + this.realFs.closeSync(fd); + } + createReadStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createReadStream(realPath, opts); + } + createWriteStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createWriteStream(realPath, opts); + } + async realpathPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + realpathSync(p) { + return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); + } + async existsPromise(p) { + return await new Promise((resolve) => { + this.realFs.exists(npath.fromPortablePath(p), resolve); + }); + } + accessSync(p, mode) { + return this.realFs.accessSync(npath.fromPortablePath(p), mode); + } + async accessPromise(p, mode) { + return await new Promise((resolve, reject) => { + this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); + }); + } + existsSync(p) { + return this.realFs.existsSync(npath.fromPortablePath(p)); + } + async statPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + statSync(p, opts) { + if (opts) { + return this.realFs.statSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.statSync(npath.fromPortablePath(p)); + } + } + async fstatPromise(fd, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.fstat(fd, this.makeCallback(resolve, reject)); + } + }); + } + fstatSync(fd, opts) { + if (opts) { + return this.realFs.fstatSync(fd, opts); + } else { + return this.realFs.fstatSync(fd); + } + } + async lstatPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + lstatSync(p, opts) { + if (opts) { + return this.realFs.lstatSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.lstatSync(npath.fromPortablePath(p)); + } + } + async fchmodPromise(fd, mask) { + return await new Promise((resolve, reject) => { + this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); + }); + } + fchmodSync(fd, mask) { + return this.realFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return await new Promise((resolve, reject) => { + this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); + }); + } + chmodSync(p, mask) { + return this.realFs.chmodSync(npath.fromPortablePath(p), mask); + } + async fchownPromise(fd, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); + }); + } + fchownSync(fd, uid, gid) { + return this.realFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); + }); + } + chownSync(p, uid, gid) { + return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); + } + async renamePromise(oldP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + renameSync(oldP, newP) { + return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return await new Promise((resolve, reject) => { + this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); + } + async appendFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + appendFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFileSync(fsNativePath, content, opts); + } else { + this.realFs.appendFileSync(fsNativePath, content); + } + } + async writeFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + writeFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFileSync(fsNativePath, content, opts); + } else { + this.realFs.writeFileSync(fsNativePath, content); + } + } + async unlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + unlinkSync(p) { + return this.realFs.unlinkSync(npath.fromPortablePath(p)); + } + async utimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + utimesSync(p, atime, mtime) { + this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); + } + async lutimesPromiseImpl(p, atime, mtime) { + const lutimes = this.realFs.lutimes; + if (typeof lutimes === `undefined`) + throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`); + return await new Promise((resolve, reject) => { + lutimes.call(this.realFs, npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + lutimesSyncImpl(p, atime, mtime) { + const lutimesSync = this.realFs.lutimesSync; + if (typeof lutimesSync === `undefined`) + throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`); + lutimesSync.call(this.realFs, npath.fromPortablePath(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + }); + } + mkdirSync(p, opts) { + return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); + } + async rmdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmdirSync(p, opts) { + return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); + } + async linkPromise(existingP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + linkSync(existingP, newP) { + return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); + } + async symlinkPromise(target, p, type) { + return await new Promise((resolve, reject) => { + this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); + }); + } + symlinkSync(target, p, type) { + return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); + } + async readFilePromise(p, encoding) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); + }); + } + readFileSync(p, encoding) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + return this.realFs.readFileSync(fsNativePath, encoding); + } + async readdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts == null ? void 0 : opts.withFileTypes) { + this.realFs.readdir(npath.fromPortablePath(p), { withFileTypes: true }, this.makeCallback(resolve, reject)); + } else { + this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback((value) => resolve(value), reject)); + } + }); + } + readdirSync(p, opts) { + if (opts == null ? void 0 : opts.withFileTypes) { + return this.realFs.readdirSync(npath.fromPortablePath(p), { withFileTypes: true }); + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p)); + } + } + async readlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + readlinkSync(p) { + return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); + } + async truncatePromise(p, len) { + return await new Promise((resolve, reject) => { + this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); + }); + } + truncateSync(p, len) { + return this.realFs.truncateSync(npath.fromPortablePath(p), len); + } + async ftruncatePromise(fd, len) { + return await new Promise((resolve, reject) => { + this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); + }); + } + ftruncateSync(fd, len) { + return this.realFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.realFs.watch( + npath.fromPortablePath(p), + a, + b + ); + } + watchFile(p, a, b) { + return this.realFs.watchFile( + npath.fromPortablePath(p), + a, + b + ); + } + unwatchFile(p, cb) { + return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); + } + makeCallback(resolve, reject) { + return (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }; + } +} + +function assertStatus(current, expected) { + if (current !== expected) { + throw new Error(`Invalid StatWatcher status: expected '${expected}', got '${current}'`); + } +} +class CustomStatWatcher extends events.EventEmitter { + constructor(fakeFs, path, { bigint = false } = {}) { + super(); + this.status = "ready" /* Ready */; + this.changeListeners = /* @__PURE__ */ new Map(); + this.startTimeout = null; + this.fakeFs = fakeFs; + this.path = path; + this.bigint = bigint; + this.lastStats = this.stat(); + } + static create(fakeFs, path, opts) { + const statWatcher = new CustomStatWatcher(fakeFs, path, opts); + statWatcher.start(); + return statWatcher; + } + start() { + assertStatus(this.status, "ready" /* Ready */); + this.status = "running" /* Running */; + this.startTimeout = setTimeout(() => { + this.startTimeout = null; + if (!this.fakeFs.existsSync(this.path)) { + this.emit("change" /* Change */, this.lastStats, this.lastStats); + } + }, 3); + } + stop() { + assertStatus(this.status, "running" /* Running */); + this.status = "stopped" /* Stopped */; + if (this.startTimeout !== null) { + clearTimeout(this.startTimeout); + this.startTimeout = null; + } + this.emit("stop" /* Stop */); + } + stat() { + try { + return this.fakeFs.statSync(this.path, { bigint: this.bigint }); + } catch (error) { + const statInstance = this.bigint ? new BigIntStatsEntry() : new StatEntry(); + return clearStats(statInstance); + } + } + makeInterval(opts) { + const interval = setInterval(() => { + const currentStats = this.stat(); + const previousStats = this.lastStats; + if (areStatsEqual(currentStats, previousStats)) + return; + this.lastStats = currentStats; + this.emit("change" /* Change */, currentStats, previousStats); + }, opts.interval); + return opts.persistent ? interval : interval.unref(); + } + registerChangeListener(listener, opts) { + this.addListener("change" /* Change */, listener); + this.changeListeners.set(listener, this.makeInterval(opts)); + } + unregisterChangeListener(listener) { + this.removeListener("change" /* Change */, listener); + const interval = this.changeListeners.get(listener); + if (typeof interval !== `undefined`) + clearInterval(interval); + this.changeListeners.delete(listener); + } + unregisterAllChangeListeners() { + for (const listener of this.changeListeners.keys()) { + this.unregisterChangeListener(listener); + } + } + hasChangeListeners() { + return this.changeListeners.size > 0; + } + ref() { + for (const interval of this.changeListeners.values()) + interval.ref(); + return this; + } + unref() { + for (const interval of this.changeListeners.values()) + interval.unref(); + return this; + } +} + +const statWatchersByFakeFS = /* @__PURE__ */ new WeakMap(); +function watchFile(fakeFs, path, a, b) { + let bigint; + let persistent; + let interval; + let listener; + switch (typeof a) { + case `function`: + { + bigint = false; + persistent = true; + interval = 5007; + listener = a; + } + break; + default: + { + ({ + bigint = false, + persistent = true, + interval = 5007 + } = a); + listener = b; + } + break; + } + let statWatchers = statWatchersByFakeFS.get(fakeFs); + if (typeof statWatchers === `undefined`) + statWatchersByFakeFS.set(fakeFs, statWatchers = /* @__PURE__ */ new Map()); + let statWatcher = statWatchers.get(path); + if (typeof statWatcher === `undefined`) { + statWatcher = CustomStatWatcher.create(fakeFs, path, { bigint }); + statWatchers.set(path, statWatcher); + } + statWatcher.registerChangeListener(listener, { persistent, interval }); + return statWatcher; +} +function unwatchFile(fakeFs, path, cb) { + const statWatchers = statWatchersByFakeFS.get(fakeFs); + if (typeof statWatchers === `undefined`) + return; + const statWatcher = statWatchers.get(path); + if (typeof statWatcher === `undefined`) + return; + if (typeof cb === `undefined`) + statWatcher.unregisterAllChangeListeners(); + else + statWatcher.unregisterChangeListener(cb); + if (!statWatcher.hasChangeListeners()) { + statWatcher.stop(); + statWatchers.delete(path); + } +} +function unwatchAllFiles(fakeFs) { + const statWatchers = statWatchersByFakeFS.get(fakeFs); + if (typeof statWatchers === `undefined`) + return; + for (const path of statWatchers.keys()) { + unwatchFile(fakeFs, path); + } +} + +const DEFAULT_COMPRESSION_LEVEL = `mixed`; +function toUnixTimestamp(time) { + if (typeof time === `string` && String(+time) === time) + return +time; + if (typeof time === `number` && Number.isFinite(time)) { + if (time < 0) { + return Date.now() / 1e3; + } else { + return time; + } + } + if (nodeUtils.types.isDate(time)) + return time.getTime() / 1e3; + throw new Error(`Invalid time`); +} +function makeEmptyArchive() { + return Buffer.from([ + 80, + 75, + 5, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ]); +} +class ZipFS extends BasePortableFakeFS { + constructor(source, opts) { + super(); + this.lzSource = null; + this.listings = /* @__PURE__ */ new Map(); + this.entries = /* @__PURE__ */ new Map(); + this.fileSources = /* @__PURE__ */ new Map(); + this.fds = /* @__PURE__ */ new Map(); + this.nextFd = 0; + this.ready = false; + this.readOnly = false; + this.libzip = opts.libzip; + const pathOptions = opts; + this.level = typeof pathOptions.level !== `undefined` ? pathOptions.level : DEFAULT_COMPRESSION_LEVEL; + source != null ? source : source = makeEmptyArchive(); + if (typeof source === `string`) { + const { baseFs = new NodeFS() } = pathOptions; + this.baseFs = baseFs; + this.path = source; + } else { + this.path = null; + this.baseFs = null; + } + if (opts.stats) { + this.stats = opts.stats; + } else { + if (typeof source === `string`) { + try { + this.stats = this.baseFs.statSync(source); + } catch (error) { + if (error.code === `ENOENT` && pathOptions.create) { + this.stats = makeDefaultStats(); + } else { + throw error; + } + } + } else { + this.stats = makeDefaultStats(); + } + } + const errPtr = this.libzip.malloc(4); + try { + let flags = 0; + if (typeof source === `string` && pathOptions.create) + flags |= this.libzip.ZIP_CREATE | this.libzip.ZIP_TRUNCATE; + if (opts.readOnly) { + flags |= this.libzip.ZIP_RDONLY; + this.readOnly = true; + } + if (typeof source === `string`) { + this.zip = this.libzip.open(npath.fromPortablePath(source), flags, errPtr); + } else { + const lzSource = this.allocateUnattachedSource(source); + try { + this.zip = this.libzip.openFromSource(lzSource, flags, errPtr); + this.lzSource = lzSource; + } catch (error) { + this.libzip.source.free(lzSource); + throw error; + } + } + if (this.zip === 0) { + const error = this.libzip.struct.errorS(); + this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`)); + throw this.makeLibzipError(error); + } + } finally { + this.libzip.free(errPtr); + } + this.listings.set(PortablePath.root, /* @__PURE__ */ new Set()); + const entryCount = this.libzip.getNumEntries(this.zip, 0); + for (let t = 0; t < entryCount; ++t) { + const raw = this.libzip.getName(this.zip, t, 0); + if (ppath.isAbsolute(raw)) + continue; + const p = ppath.resolve(PortablePath.root, raw); + this.registerEntry(p, t); + if (raw.endsWith(`/`)) { + this.registerListing(p); + } + } + this.symlinkCount = this.libzip.ext.countSymlinks(this.zip); + if (this.symlinkCount === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + this.ready = true; + } + makeLibzipError(error) { + const errorCode = this.libzip.struct.errorCodeZip(error); + const strerror = this.libzip.error.strerror(error); + const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]); + if (errorCode === this.libzip.errors.ZIP_ER_CHANGED) + throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`); + return libzipError; + } + getExtractHint(hints) { + for (const fileName of this.entries.keys()) { + const ext = this.pathUtils.extname(fileName); + if (hints.relevantExtensions.has(ext)) { + return true; + } + } + return false; + } + getAllFiles() { + return Array.from(this.entries.keys()); + } + getRealPath() { + if (!this.path) + throw new Error(`ZipFS don't have real paths when loaded from a buffer`); + return this.path; + } + getBufferAndClose() { + this.prepareClose(); + if (!this.lzSource) + throw new Error(`ZipFS was not created from a Buffer`); + if (this.entries.size === 0) { + this.discardAndClose(); + return makeEmptyArchive(); + } + try { + this.libzip.source.keep(this.lzSource); + if (this.libzip.close(this.zip) === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + if (this.libzip.source.open(this.lzSource) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + const size = this.libzip.source.tell(this.lzSource); + if (size === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + const buffer = this.libzip.malloc(size); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + try { + const rc = this.libzip.source.read(this.lzSource, buffer, size); + if (rc === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + else if (rc < size) + throw new Error(`Incomplete read`); + else if (rc > size) + throw new Error(`Overread`); + const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size); + return Buffer.from(memory); + } finally { + this.libzip.free(buffer); + } + } finally { + this.libzip.source.close(this.lzSource); + this.libzip.source.free(this.lzSource); + this.ready = false; + } + } + prepareClose() { + if (!this.ready) + throw EBUSY(`archive closed, close`); + unwatchAllFiles(this); + } + saveAndClose() { + if (!this.path || !this.baseFs) + throw new Error(`ZipFS cannot be saved and must be discarded when loaded from a buffer`); + this.prepareClose(); + if (this.readOnly) { + this.discardAndClose(); + return; + } + const newMode = this.baseFs.existsSync(this.path) || this.stats.mode === DEFAULT_MODE ? void 0 : this.stats.mode; + if (this.entries.size === 0) { + this.discardAndClose(); + this.baseFs.writeFileSync(this.path, makeEmptyArchive(), { mode: newMode }); + } else { + const rc = this.libzip.close(this.zip); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + if (typeof newMode !== `undefined`) { + this.baseFs.chmodSync(this.path, newMode); + } + } + this.ready = false; + } + discardAndClose() { + this.prepareClose(); + this.libzip.discard(this.zip); + this.ready = false; + } + resolve(p) { + return ppath.resolve(PortablePath.root, p); + } + async openPromise(p, flags, mode) { + return this.openSync(p, flags, mode); + } + openSync(p, flags, mode) { + const fd = this.nextFd++; + this.fds.set(fd, { cursor: 0, p }); + return fd; + } + hasOpenFileHandles() { + return !!this.fds.size; + } + async opendirPromise(p, opts) { + return this.opendirSync(p, opts); + } + opendirSync(p, opts = {}) { + const resolvedP = this.resolveFilename(`opendir '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`opendir '${p}'`); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`opendir '${p}'`); + const entries = [...directoryListing]; + const fd = this.openSync(resolvedP, `r`); + const onClose = () => { + this.closeSync(fd); + }; + return opendir(this, resolvedP, entries, { onClose }); + } + async readPromise(fd, buffer, offset, length, position) { + return this.readSync(fd, buffer, offset, length, position); + } + readSync(fd, buffer, offset = 0, length = buffer.byteLength, position = -1) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + const realPosition = position === -1 || position === null ? entry.cursor : position; + const source = this.readFileSync(entry.p); + source.copy(buffer, offset, realPosition, realPosition + length); + const bytesRead = Math.max(0, Math.min(source.length - realPosition, length)); + if (position === -1 || position === null) + entry.cursor += bytesRead; + return bytesRead; + } + async writePromise(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.writeSync(fd, buffer, position); + } else { + return this.writeSync(fd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + throw new Error(`Unimplemented`); + } + async closePromise(fd) { + return this.closeSync(fd); + } + closeSync(fd) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + this.fds.delete(fd); + } + createReadStream(p, { encoding } = {}) { + if (p === null) + throw new Error(`Unimplemented`); + const fd = this.openSync(p, `r`); + const stream$1 = Object.assign( + new stream.PassThrough({ + emitClose: true, + autoDestroy: true, + destroy: (error, callback) => { + clearImmediate(immediate); + this.closeSync(fd); + callback(error); + } + }), + { + close() { + stream$1.destroy(); + }, + bytesRead: 0, + path: p + } + ); + const immediate = setImmediate(async () => { + try { + const data = await this.readFilePromise(p, encoding); + stream$1.bytesRead = data.length; + stream$1.end(data); + } catch (error) { + stream$1.destroy(error); + } + }); + return stream$1; + } + createWriteStream(p, { encoding } = {}) { + if (this.readOnly) + throw EROFS(`open '${p}'`); + if (p === null) + throw new Error(`Unimplemented`); + const chunks = []; + const fd = this.openSync(p, `w`); + const stream$1 = Object.assign( + new stream.PassThrough({ + autoDestroy: true, + emitClose: true, + destroy: (error, callback) => { + try { + if (error) { + callback(error); + } else { + this.writeFileSync(p, Buffer.concat(chunks), encoding); + callback(null); + } + } catch (err) { + callback(err); + } finally { + this.closeSync(fd); + } + } + }), + { + bytesWritten: 0, + path: p, + close() { + stream$1.destroy(); + } + } + ); + stream$1.on(`data`, (chunk) => { + const chunkBuffer = Buffer.from(chunk); + stream$1.bytesWritten += chunkBuffer.length; + chunks.push(chunkBuffer); + }); + return stream$1; + } + async realpathPromise(p) { + return this.realpathSync(p); + } + realpathSync(p) { + const resolvedP = this.resolveFilename(`lstat '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`lstat '${p}'`); + return resolvedP; + } + async existsPromise(p) { + return this.existsSync(p); + } + existsSync(p) { + if (!this.ready) + throw EBUSY(`archive closed, existsSync '${p}'`); + if (this.symlinkCount === 0) { + const resolvedP2 = ppath.resolve(PortablePath.root, p); + return this.entries.has(resolvedP2) || this.listings.has(resolvedP2); + } + let resolvedP; + try { + resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, false); + } catch (error) { + return false; + } + if (resolvedP === void 0) + return false; + return this.entries.has(resolvedP) || this.listings.has(resolvedP); + } + async accessPromise(p, mode) { + return this.accessSync(p, mode); + } + accessSync(p, mode = fs.constants.F_OK) { + const resolvedP = this.resolveFilename(`access '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`access '${p}'`); + if (this.readOnly && mode & fs.constants.W_OK) { + throw EROFS(`access '${p}'`); + } + } + async statPromise(p, opts = { bigint: false }) { + if (opts.bigint) + return this.statSync(p, { bigint: true }); + return this.statSync(p); + } + statSync(p, opts = { bigint: false, throwIfNoEntry: true }) { + const resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, opts.throwIfNoEntry); + if (resolvedP === void 0) + return void 0; + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { + if (opts.throwIfNoEntry === false) + return void 0; + throw ENOENT(`stat '${p}'`); + } + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`stat '${p}'`); + return this.statImpl(`stat '${p}'`, resolvedP, opts); + } + async fstatPromise(fd, opts) { + return this.fstatSync(fd, opts); + } + fstatSync(fd, opts) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fstatSync`); + const { p } = entry; + const resolvedP = this.resolveFilename(`stat '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`stat '${p}'`); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`stat '${p}'`); + return this.statImpl(`fstat '${p}'`, resolvedP, opts); + } + async lstatPromise(p, opts = { bigint: false }) { + if (opts.bigint) + return this.lstatSync(p, { bigint: true }); + return this.lstatSync(p); + } + lstatSync(p, opts = { bigint: false, throwIfNoEntry: true }) { + const resolvedP = this.resolveFilename(`lstat '${p}'`, p, false, opts.throwIfNoEntry); + if (resolvedP === void 0) + return void 0; + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { + if (opts.throwIfNoEntry === false) + return void 0; + throw ENOENT(`lstat '${p}'`); + } + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`lstat '${p}'`); + return this.statImpl(`lstat '${p}'`, resolvedP, opts); + } + statImpl(reason, p, opts = {}) { + const entry = this.entries.get(p); + if (typeof entry !== `undefined`) { + const stat = this.libzip.struct.statS(); + const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const uid = this.stats.uid; + const gid = this.stats.gid; + const size = this.libzip.struct.statSize(stat) >>> 0; + const blksize = 512; + const blocks = Math.ceil(size / blksize); + const mtimeMs = (this.libzip.struct.statMtime(stat) >>> 0) * 1e3; + const atimeMs = mtimeMs; + const birthtimeMs = mtimeMs; + const ctimeMs = mtimeMs; + const atime = new Date(atimeMs); + const birthtime = new Date(birthtimeMs); + const ctime = new Date(ctimeMs); + const mtime = new Date(mtimeMs); + const type = this.listings.has(p) ? S_IFDIR : this.isSymbolicLink(entry) ? S_IFLNK : S_IFREG; + const defaultMode = type === S_IFDIR ? 493 : 420; + const mode = type | this.getUnixMode(entry, defaultMode) & 511; + const crc = this.libzip.struct.statCrc(stat); + const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); + return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; + } + if (this.listings.has(p)) { + const uid = this.stats.uid; + const gid = this.stats.gid; + const size = 0; + const blksize = 512; + const blocks = 0; + const atimeMs = this.stats.mtimeMs; + const birthtimeMs = this.stats.mtimeMs; + const ctimeMs = this.stats.mtimeMs; + const mtimeMs = this.stats.mtimeMs; + const atime = new Date(atimeMs); + const birthtime = new Date(birthtimeMs); + const ctime = new Date(ctimeMs); + const mtime = new Date(mtimeMs); + const mode = S_IFDIR | 493; + const crc = 0; + const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); + return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; + } + throw new Error(`Unreachable`); + } + getUnixMode(index, defaultMode) { + const rc = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; + if (opsys !== this.libzip.ZIP_OPSYS_UNIX) + return defaultMode; + return this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16; + } + registerListing(p) { + const existingListing = this.listings.get(p); + if (existingListing) + return existingListing; + const parentListing = this.registerListing(ppath.dirname(p)); + parentListing.add(ppath.basename(p)); + const newListing = /* @__PURE__ */ new Set(); + this.listings.set(p, newListing); + return newListing; + } + registerEntry(p, index) { + const parentListing = this.registerListing(ppath.dirname(p)); + parentListing.add(ppath.basename(p)); + this.entries.set(p, index); + } + unregisterListing(p) { + this.listings.delete(p); + const parentListing = this.listings.get(ppath.dirname(p)); + parentListing == null ? void 0 : parentListing.delete(ppath.basename(p)); + } + unregisterEntry(p) { + this.unregisterListing(p); + const entry = this.entries.get(p); + this.entries.delete(p); + if (typeof entry === `undefined`) + return; + this.fileSources.delete(entry); + if (this.isSymbolicLink(entry)) { + this.symlinkCount--; + } + } + deleteEntry(p, index) { + this.unregisterEntry(p); + const rc = this.libzip.delete(this.zip, index); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + resolveFilename(reason, p, resolveLastComponent = true, throwIfNoEntry = true) { + if (!this.ready) + throw EBUSY(`archive closed, ${reason}`); + let resolvedP = ppath.resolve(PortablePath.root, p); + if (resolvedP === `/`) + return PortablePath.root; + const fileIndex = this.entries.get(resolvedP); + if (resolveLastComponent && fileIndex !== void 0) { + if (this.symlinkCount !== 0 && this.isSymbolicLink(fileIndex)) { + const target = this.getFileSource(fileIndex).toString(); + return this.resolveFilename(reason, ppath.resolve(ppath.dirname(resolvedP), target), true, throwIfNoEntry); + } else { + return resolvedP; + } + } + while (true) { + const parentP = this.resolveFilename(reason, ppath.dirname(resolvedP), true, throwIfNoEntry); + if (parentP === void 0) + return parentP; + const isDir = this.listings.has(parentP); + const doesExist = this.entries.has(parentP); + if (!isDir && !doesExist) { + if (throwIfNoEntry === false) + return void 0; + throw ENOENT(reason); + } + if (!isDir) + throw ENOTDIR(reason); + resolvedP = ppath.resolve(parentP, ppath.basename(resolvedP)); + if (!resolveLastComponent || this.symlinkCount === 0) + break; + const index = this.libzip.name.locate(this.zip, resolvedP.slice(1), 0); + if (index === -1) + break; + if (this.isSymbolicLink(index)) { + const target = this.getFileSource(index).toString(); + resolvedP = ppath.resolve(ppath.dirname(resolvedP), target); + } else { + break; + } + } + return resolvedP; + } + allocateBuffer(content) { + if (!Buffer.isBuffer(content)) + content = Buffer.from(content); + const buffer = this.libzip.malloc(content.byteLength); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength); + heap.set(content); + return { buffer, byteLength: content.byteLength }; + } + allocateUnattachedSource(content) { + const error = this.libzip.struct.errorS(); + const { buffer, byteLength } = this.allocateBuffer(content); + const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, 1, error); + if (source === 0) { + this.libzip.free(error); + throw this.makeLibzipError(error); + } + return source; + } + allocateSource(content) { + const { buffer, byteLength } = this.allocateBuffer(content); + const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, 1); + if (source === 0) { + this.libzip.free(buffer); + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + return source; + } + setFileSource(p, content) { + const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content); + const target = ppath.relative(PortablePath.root, p); + const lzSource = this.allocateSource(content); + try { + const newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE); + if (newIndex === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + if (this.level !== `mixed`) { + const method = this.level === 0 ? this.libzip.ZIP_CM_STORE : this.libzip.ZIP_CM_DEFLATE; + const rc = this.libzip.file.setCompression(this.zip, newIndex, 0, method, this.level); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + this.fileSources.set(newIndex, buffer); + return newIndex; + } catch (error) { + this.libzip.source.free(lzSource); + throw error; + } + } + isSymbolicLink(index) { + if (this.symlinkCount === 0) + return false; + const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); + if (attrs === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; + if (opsys !== this.libzip.ZIP_OPSYS_UNIX) + return false; + const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16; + return (attributes & S_IFMT) === S_IFLNK; + } + getFileSource(index, opts = { asyncDecompress: false }) { + const cachedFileSource = this.fileSources.get(index); + if (typeof cachedFileSource !== `undefined`) + return cachedFileSource; + const stat = this.libzip.struct.statS(); + const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const size = this.libzip.struct.statCompSize(stat); + const compressionMethod = this.libzip.struct.statCompMethod(stat); + const buffer = this.libzip.malloc(size); + try { + const file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED); + if (file === 0) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + try { + const rc2 = this.libzip.fread(file, buffer, size, 0); + if (rc2 === -1) + throw this.makeLibzipError(this.libzip.file.getError(file)); + else if (rc2 < size) + throw new Error(`Incomplete read`); + else if (rc2 > size) + throw new Error(`Overread`); + const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size); + const data = Buffer.from(memory); + if (compressionMethod === 0) { + this.fileSources.set(index, data); + return data; + } else if (opts.asyncDecompress) { + return new Promise((resolve, reject) => { + zlib__default.default.inflateRaw(data, (error, result) => { + if (error) { + reject(error); + } else { + this.fileSources.set(index, result); + resolve(result); + } + }); + }); + } else { + const decompressedData = zlib__default.default.inflateRawSync(data); + this.fileSources.set(index, decompressedData); + return decompressedData; + } + } finally { + this.libzip.fclose(file); + } + } finally { + this.libzip.free(buffer); + } + } + async fchmodPromise(fd, mask) { + return this.chmodPromise(this.fdToPath(fd, `fchmod`), mask); + } + fchmodSync(fd, mask) { + return this.chmodSync(this.fdToPath(fd, `fchmodSync`), mask); + } + async chmodPromise(p, mask) { + return this.chmodSync(p, mask); + } + chmodSync(p, mask) { + if (this.readOnly) + throw EROFS(`chmod '${p}'`); + mask &= 493; + const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false); + const entry = this.entries.get(resolvedP); + if (typeof entry === `undefined`) + throw new Error(`Assertion failed: The entry should have been registered (${resolvedP})`); + const oldMod = this.getUnixMode(entry, S_IFREG | 0); + const newMod = oldMod & ~511 | mask; + const rc = this.libzip.file.setExternalAttributes(this.zip, entry, 0, 0, this.libzip.ZIP_OPSYS_UNIX, newMod << 16); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + async fchownPromise(fd, uid, gid) { + return this.chownPromise(this.fdToPath(fd, `fchown`), uid, gid); + } + fchownSync(fd, uid, gid) { + return this.chownSync(this.fdToPath(fd, `fchownSync`), uid, gid); + } + async chownPromise(p, uid, gid) { + return this.chownSync(p, uid, gid); + } + chownSync(p, uid, gid) { + throw new Error(`Unimplemented`); + } + async renamePromise(oldP, newP) { + return this.renameSync(oldP, newP); + } + renameSync(oldP, newP) { + throw new Error(`Unimplemented`); + } + async copyFilePromise(sourceP, destP, flags) { + const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags); + const source = await this.getFileSource(indexSource, { asyncDecompress: true }); + const newIndex = this.setFileSource(resolvedDestP, source); + if (newIndex !== indexDest) { + this.registerEntry(resolvedDestP, newIndex); + } + } + copyFileSync(sourceP, destP, flags = 0) { + const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags); + const source = this.getFileSource(indexSource); + const newIndex = this.setFileSource(resolvedDestP, source); + if (newIndex !== indexDest) { + this.registerEntry(resolvedDestP, newIndex); + } + } + prepareCopyFile(sourceP, destP, flags = 0) { + if (this.readOnly) + throw EROFS(`copyfile '${sourceP} -> '${destP}'`); + if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw ENOSYS(`unsupported clone operation`, `copyfile '${sourceP}' -> ${destP}'`); + const resolvedSourceP = this.resolveFilename(`copyfile '${sourceP} -> ${destP}'`, sourceP); + const indexSource = this.entries.get(resolvedSourceP); + if (typeof indexSource === `undefined`) + throw EINVAL(`copyfile '${sourceP}' -> '${destP}'`); + const resolvedDestP = this.resolveFilename(`copyfile '${sourceP}' -> ${destP}'`, destP); + const indexDest = this.entries.get(resolvedDestP); + if ((flags & (fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest !== `undefined`) + throw EEXIST(`copyfile '${sourceP}' -> '${destP}'`); + return { + indexSource, + resolvedDestP, + indexDest + }; + } + async appendFilePromise(p, content, opts) { + if (this.readOnly) + throw EROFS(`open '${p}'`); + if (typeof opts === `undefined`) + opts = { flag: `a` }; + else if (typeof opts === `string`) + opts = { flag: `a`, encoding: opts }; + else if (typeof opts.flag === `undefined`) + opts = { flag: `a`, ...opts }; + return this.writeFilePromise(p, content, opts); + } + appendFileSync(p, content, opts = {}) { + if (this.readOnly) + throw EROFS(`open '${p}'`); + if (typeof opts === `undefined`) + opts = { flag: `a` }; + else if (typeof opts === `string`) + opts = { flag: `a`, encoding: opts }; + else if (typeof opts.flag === `undefined`) + opts = { flag: `a`, ...opts }; + return this.writeFileSync(p, content, opts); + } + fdToPath(fd, reason) { + var _a; + const path = (_a = this.fds.get(fd)) == null ? void 0 : _a.p; + if (typeof path === `undefined`) + throw EBADF(reason); + return path; + } + async writeFilePromise(p, content, opts) { + const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts); + if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) + content = Buffer.concat([await this.getFileSource(index, { asyncDecompress: true }), Buffer.from(content)]); + if (encoding !== null) + content = content.toString(encoding); + const newIndex = this.setFileSource(resolvedP, content); + if (newIndex !== index) + this.registerEntry(resolvedP, newIndex); + if (mode !== null) { + await this.chmodPromise(resolvedP, mode); + } + } + writeFileSync(p, content, opts) { + const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts); + if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) + content = Buffer.concat([this.getFileSource(index), Buffer.from(content)]); + if (encoding !== null) + content = content.toString(encoding); + const newIndex = this.setFileSource(resolvedP, content); + if (newIndex !== index) + this.registerEntry(resolvedP, newIndex); + if (mode !== null) { + this.chmodSync(resolvedP, mode); + } + } + prepareWriteFile(p, opts) { + if (typeof p === `number`) + p = this.fdToPath(p, `read`); + if (this.readOnly) + throw EROFS(`open '${p}'`); + const resolvedP = this.resolveFilename(`open '${p}'`, p); + if (this.listings.has(resolvedP)) + throw EISDIR(`open '${p}'`); + let encoding = null, mode = null; + if (typeof opts === `string`) { + encoding = opts; + } else if (typeof opts === `object`) { + ({ + encoding = null, + mode = null + } = opts); + } + const index = this.entries.get(resolvedP); + return { + encoding, + mode, + resolvedP, + index + }; + } + async unlinkPromise(p) { + return this.unlinkSync(p); + } + unlinkSync(p) { + if (this.readOnly) + throw EROFS(`unlink '${p}'`); + const resolvedP = this.resolveFilename(`unlink '${p}'`, p); + if (this.listings.has(resolvedP)) + throw EISDIR(`unlink '${p}'`); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`unlink '${p}'`); + this.deleteEntry(resolvedP, index); + } + async utimesPromise(p, atime, mtime) { + return this.utimesSync(p, atime, mtime); + } + utimesSync(p, atime, mtime) { + if (this.readOnly) + throw EROFS(`utimes '${p}'`); + const resolvedP = this.resolveFilename(`utimes '${p}'`, p); + this.utimesImpl(resolvedP, mtime); + } + async lutimesPromise(p, atime, mtime) { + return this.lutimesSync(p, atime, mtime); + } + lutimesSync(p, atime, mtime) { + if (this.readOnly) + throw EROFS(`lutimes '${p}'`); + const resolvedP = this.resolveFilename(`utimes '${p}'`, p, false); + this.utimesImpl(resolvedP, mtime); + } + utimesImpl(resolvedP, mtime) { + if (this.listings.has(resolvedP)) { + if (!this.entries.has(resolvedP)) + this.hydrateDirectory(resolvedP); + } + const entry = this.entries.get(resolvedP); + if (entry === void 0) + throw new Error(`Unreachable`); + const rc = this.libzip.file.setMtime(this.zip, entry, 0, toUnixTimestamp(mtime), 0); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + async mkdirPromise(p, opts) { + return this.mkdirSync(p, opts); + } + mkdirSync(p, { mode = 493, recursive = false } = {}) { + if (recursive) + return this.mkdirpSync(p, { chmod: mode }); + if (this.readOnly) + throw EROFS(`mkdir '${p}'`); + const resolvedP = this.resolveFilename(`mkdir '${p}'`, p); + if (this.entries.has(resolvedP) || this.listings.has(resolvedP)) + throw EEXIST(`mkdir '${p}'`); + this.hydrateDirectory(resolvedP); + this.chmodSync(resolvedP, mode); + return void 0; + } + async rmdirPromise(p, opts) { + return this.rmdirSync(p, opts); + } + rmdirSync(p, { recursive = false } = {}) { + if (this.readOnly) + throw EROFS(`rmdir '${p}'`); + if (recursive) { + this.removeSync(p); + return; + } + const resolvedP = this.resolveFilename(`rmdir '${p}'`, p); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`rmdir '${p}'`); + if (directoryListing.size > 0) + throw ENOTEMPTY(`rmdir '${p}'`); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`rmdir '${p}'`); + this.deleteEntry(p, index); + } + hydrateDirectory(resolvedP) { + const index = this.libzip.dir.add(this.zip, ppath.relative(PortablePath.root, resolvedP)); + if (index === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + this.registerListing(resolvedP); + this.registerEntry(resolvedP, index); + return index; + } + async linkPromise(existingP, newP) { + return this.linkSync(existingP, newP); + } + linkSync(existingP, newP) { + throw EOPNOTSUPP(`link '${existingP}' -> '${newP}'`); + } + async symlinkPromise(target, p) { + return this.symlinkSync(target, p); + } + symlinkSync(target, p) { + if (this.readOnly) + throw EROFS(`symlink '${target}' -> '${p}'`); + const resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p); + if (this.listings.has(resolvedP)) + throw EISDIR(`symlink '${target}' -> '${p}'`); + if (this.entries.has(resolvedP)) + throw EEXIST(`symlink '${target}' -> '${p}'`); + const index = this.setFileSource(resolvedP, target); + this.registerEntry(resolvedP, index); + const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, this.libzip.ZIP_OPSYS_UNIX, (S_IFLNK | 511) << 16); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + this.symlinkCount += 1; + } + async readFilePromise(p, encoding) { + if (typeof encoding === `object`) + encoding = encoding ? encoding.encoding : void 0; + const data = await this.readFileBuffer(p, { asyncDecompress: true }); + return encoding ? data.toString(encoding) : data; + } + readFileSync(p, encoding) { + if (typeof encoding === `object`) + encoding = encoding ? encoding.encoding : void 0; + const data = this.readFileBuffer(p); + return encoding ? data.toString(encoding) : data; + } + readFileBuffer(p, opts = { asyncDecompress: false }) { + if (typeof p === `number`) + p = this.fdToPath(p, `read`); + const resolvedP = this.resolveFilename(`open '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`open '${p}'`); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`open '${p}'`); + if (this.listings.has(resolvedP)) + throw EISDIR(`read`); + const entry = this.entries.get(resolvedP); + if (entry === void 0) + throw new Error(`Unreachable`); + return this.getFileSource(entry, opts); + } + async readdirPromise(p, opts) { + return this.readdirSync(p, opts); + } + readdirSync(p, opts) { + const resolvedP = this.resolveFilename(`scandir '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`scandir '${p}'`); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`scandir '${p}'`); + const entries = [...directoryListing]; + if (!(opts == null ? void 0 : opts.withFileTypes)) + return entries; + return entries.map((name) => { + return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), { + name + }); + }); + } + async readlinkPromise(p) { + const entry = this.prepareReadlink(p); + return (await this.getFileSource(entry, { asyncDecompress: true })).toString(); + } + readlinkSync(p) { + const entry = this.prepareReadlink(p); + return this.getFileSource(entry).toString(); + } + prepareReadlink(p) { + const resolvedP = this.resolveFilename(`readlink '${p}'`, p, false); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`readlink '${p}'`); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`open '${p}'`); + if (this.listings.has(resolvedP)) + throw EINVAL(`readlink '${p}'`); + const entry = this.entries.get(resolvedP); + if (entry === void 0) + throw new Error(`Unreachable`); + if (!this.isSymbolicLink(entry)) + throw EINVAL(`readlink '${p}'`); + return entry; + } + async truncatePromise(p, len = 0) { + const resolvedP = this.resolveFilename(`open '${p}'`, p); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`open '${p}'`); + const source = await this.getFileSource(index, { asyncDecompress: true }); + const truncated = Buffer.alloc(len, 0); + source.copy(truncated); + return await this.writeFilePromise(p, truncated); + } + truncateSync(p, len = 0) { + const resolvedP = this.resolveFilename(`open '${p}'`, p); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`open '${p}'`); + const source = this.getFileSource(index); + const truncated = Buffer.alloc(len, 0); + source.copy(truncated); + return this.writeFileSync(p, truncated); + } + async ftruncatePromise(fd, len) { + return this.truncatePromise(this.fdToPath(fd, `ftruncate`), len); + } + ftruncateSync(fd, len) { + return this.truncateSync(this.fdToPath(fd, `ftruncateSync`), len); + } + watch(p, a, b) { + let persistent; + switch (typeof a) { + case `function`: + case `string`: + case `undefined`: + { + persistent = true; + } + break; + default: + { + ({ persistent = true } = a); + } + break; + } + if (!persistent) + return { on: () => { + }, close: () => { + } }; + const interval = setInterval(() => { + }, 24 * 60 * 60 * 1e3); + return { on: () => { + }, close: () => { + clearInterval(interval); + } }; + } + watchFile(p, a, b) { + const resolvedP = ppath.resolve(PortablePath.root, p); + return watchFile(this, resolvedP, a, b); + } + unwatchFile(p, cb) { + const resolvedP = ppath.resolve(PortablePath.root, p); + return unwatchFile(this, resolvedP, cb); + } +} + +class ProxiedFS extends FakeFS { + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + resolve(path) { + return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); + } + getRealPath() { + return this.mapFromBase(this.baseFs.getRealPath()); + } + async openPromise(p, flags, mode) { + return this.baseFs.openPromise(this.mapToBase(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(this.mapToBase(p), flags, mode); + } + async opendirPromise(p, opts) { + return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); + } + opendirSync(p, opts) { + return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); + } + async readPromise(fd, buffer, offset, length, position) { + return await this.baseFs.readPromise(fd, buffer, offset, length, position); + } + readSync(fd, buffer, offset, length, position) { + return this.baseFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return await this.baseFs.writePromise(fd, buffer, offset); + } else { + return await this.baseFs.writePromise(fd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.baseFs.writeSync(fd, buffer, offset); + } else { + return this.baseFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + return this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); + } + async realpathPromise(p) { + return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); + } + realpathSync(p) { + return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); + } + async existsPromise(p) { + return this.baseFs.existsPromise(this.mapToBase(p)); + } + existsSync(p) { + return this.baseFs.existsSync(this.mapToBase(p)); + } + accessSync(p, mode) { + return this.baseFs.accessSync(this.mapToBase(p), mode); + } + async accessPromise(p, mode) { + return this.baseFs.accessPromise(this.mapToBase(p), mode); + } + async statPromise(p, opts) { + return this.baseFs.statPromise(this.mapToBase(p), opts); + } + statSync(p, opts) { + return this.baseFs.statSync(this.mapToBase(p), opts); + } + async fstatPromise(fd, opts) { + return this.baseFs.fstatPromise(fd, opts); + } + fstatSync(fd, opts) { + return this.baseFs.fstatSync(fd, opts); + } + lstatPromise(p, opts) { + return this.baseFs.lstatPromise(this.mapToBase(p), opts); + } + lstatSync(p, opts) { + return this.baseFs.lstatSync(this.mapToBase(p), opts); + } + async fchmodPromise(fd, mask) { + return this.baseFs.fchmodPromise(fd, mask); + } + fchmodSync(fd, mask) { + return this.baseFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return this.baseFs.chmodPromise(this.mapToBase(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(this.mapToBase(p), mask); + } + async fchownPromise(fd, uid, gid) { + return this.baseFs.fchownPromise(fd, uid, gid); + } + fchownSync(fd, uid, gid) { + return this.baseFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); + } + chownSync(p, uid, gid) { + return this.baseFs.chownSync(this.mapToBase(p), uid, gid); + } + async renamePromise(oldP, newP) { + return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + async appendFilePromise(p, content, opts) { + return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); + } + appendFileSync(p, content, opts) { + return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); + } + async writeFilePromise(p, content, opts) { + return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); + } + async unlinkPromise(p) { + return this.baseFs.unlinkPromise(this.mapToBase(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(this.mapToBase(p)); + } + async utimesPromise(p, atime, mtime) { + return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return this.baseFs.mkdirPromise(this.mapToBase(p), opts); + } + mkdirSync(p, opts) { + return this.baseFs.mkdirSync(this.mapToBase(p), opts); + } + async rmdirPromise(p, opts) { + return this.baseFs.rmdirPromise(this.mapToBase(p), opts); + } + rmdirSync(p, opts) { + return this.baseFs.rmdirSync(this.mapToBase(p), opts); + } + async linkPromise(existingP, newP) { + return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); + } + linkSync(existingP, newP) { + return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); + } + async symlinkPromise(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); + } + symlinkSync(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkSync(mappedTarget, mappedP, type); + } + async readFilePromise(p, encoding) { + if (encoding === `utf8`) { + return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); + } else { + return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); + } + } + readFileSync(p, encoding) { + if (encoding === `utf8`) { + return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); + } else { + return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); + } + } + async readdirPromise(p, opts) { + return this.baseFs.readdirPromise(this.mapToBase(p), opts); + } + readdirSync(p, opts) { + return this.baseFs.readdirSync(this.mapToBase(p), opts); + } + async readlinkPromise(p) { + return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); + } + readlinkSync(p) { + return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); + } + async truncatePromise(p, len) { + return this.baseFs.truncatePromise(this.mapToBase(p), len); + } + truncateSync(p, len) { + return this.baseFs.truncateSync(this.mapToBase(p), len); + } + async ftruncatePromise(fd, len) { + return this.baseFs.ftruncatePromise(fd, len); + } + ftruncateSync(fd, len) { + return this.baseFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.baseFs.watch( + this.mapToBase(p), + a, + b + ); + } + watchFile(p, a, b) { + return this.baseFs.watchFile( + this.mapToBase(p), + a, + b + ); + } + unwatchFile(p, cb) { + return this.baseFs.unwatchFile(this.mapToBase(p), cb); + } + fsMapToBase(p) { + if (typeof p === `number`) { + return p; + } else { + return this.mapToBase(p); + } + } +} + +class PosixFS extends ProxiedFS { + constructor(baseFs) { + super(npath); + this.baseFs = baseFs; + } + mapFromBase(path) { + return npath.fromPortablePath(path); + } + mapToBase(path) { + return npath.toPortablePath(path); + } +} + +const NUMBER_REGEXP = /^[0-9]+$/; +const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; +const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; +class VirtualFS extends ProxiedFS { + constructor({ baseFs = new NodeFS() } = {}) { + super(ppath); + this.baseFs = baseFs; + } + static makeVirtualPath(base, component, to) { + if (ppath.basename(base) !== `__virtual__`) + throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); + if (!ppath.basename(component).match(VALID_COMPONENT)) + throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); + const target = ppath.relative(ppath.dirname(base), to); + const segments = target.split(`/`); + let depth = 0; + while (depth < segments.length && segments[depth] === `..`) + depth += 1; + const finalSegments = segments.slice(depth); + const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); + return fullVirtualPath; + } + static resolveVirtual(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match || !match[3] && match[5]) + return p; + const target = ppath.dirname(match[1]); + if (!match[3] || !match[4]) + return target; + const isnum = NUMBER_REGEXP.test(match[4]); + if (!isnum) + return p; + const depth = Number(match[4]); + const backstep = `../`.repeat(depth); + const subpath = match[5] || `.`; + return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); + } + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + getRealPath() { + return this.baseFs.getRealPath(); + } + realpathSync(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return this.baseFs.realpathSync(p); + if (!match[5]) + return p; + const realpath = this.baseFs.realpathSync(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + async realpathPromise(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return await this.baseFs.realpathPromise(p); + if (!match[5]) + return p; + const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + mapToBase(p) { + if (p === ``) + return p; + if (this.pathUtils.isAbsolute(p)) + return VirtualFS.resolveVirtual(p); + const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); + const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); + return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; + } + mapFromBase(p) { + return p; + } +} + +const ZIP_MASK = 4278190080; +const ZIP_MAGIC = 704643072; +const getArchivePart = (path, extension) => { + let idx = path.indexOf(extension); + if (idx <= 0) + return null; + let nextCharIdx = idx; + while (idx >= 0) { + nextCharIdx = idx + extension.length; + if (path[nextCharIdx] === ppath.sep) + break; + if (path[idx - 1] === ppath.sep) + return null; + idx = path.indexOf(extension, nextCharIdx); + } + if (path.length > nextCharIdx && path[nextCharIdx] !== ppath.sep) + return null; + return path.slice(0, nextCharIdx); +}; +class ZipOpenFS extends BasePortableFakeFS { + constructor({ libzip, baseFs = new NodeFS(), filter = null, maxOpenFiles = Infinity, readOnlyArchives = false, useCache = true, maxAge = 5e3, fileExtensions = null }) { + super(); + this.fdMap = /* @__PURE__ */ new Map(); + this.nextFd = 3; + this.isZip = /* @__PURE__ */ new Set(); + this.notZip = /* @__PURE__ */ new Set(); + this.realPaths = /* @__PURE__ */ new Map(); + this.limitOpenFilesTimeout = null; + this.libzipFactory = typeof libzip !== `function` ? () => libzip : libzip; + this.baseFs = baseFs; + this.zipInstances = useCache ? /* @__PURE__ */ new Map() : null; + this.filter = filter; + this.maxOpenFiles = maxOpenFiles; + this.readOnlyArchives = readOnlyArchives; + this.maxAge = maxAge; + this.fileExtensions = fileExtensions; + } + static async openPromise(fn, opts) { + const zipOpenFs = new ZipOpenFS(opts); + try { + return await fn(zipOpenFs); + } finally { + zipOpenFs.saveAndClose(); + } + } + get libzip() { + if (typeof this.libzipInstance === `undefined`) + this.libzipInstance = this.libzipFactory(); + return this.libzipInstance; + } + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + getRealPath() { + return this.baseFs.getRealPath(); + } + saveAndClose() { + unwatchAllFiles(this); + if (this.zipInstances) { + for (const [path, { zipFs }] of this.zipInstances.entries()) { + zipFs.saveAndClose(); + this.zipInstances.delete(path); + } + } + } + discardAndClose() { + unwatchAllFiles(this); + if (this.zipInstances) { + for (const [path, { zipFs }] of this.zipInstances.entries()) { + zipFs.discardAndClose(); + this.zipInstances.delete(path); + } + } + } + resolve(p) { + return this.baseFs.resolve(p); + } + remapFd(zipFs, fd) { + const remappedFd = this.nextFd++ | ZIP_MAGIC; + this.fdMap.set(remappedFd, [zipFs, fd]); + return remappedFd; + } + async openPromise(p, flags, mode) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.openPromise(p, flags, mode); + }, async (zipFs, { subPath }) => { + return this.remapFd(zipFs, await zipFs.openPromise(subPath, flags, mode)); + }); + } + openSync(p, flags, mode) { + return this.makeCallSync(p, () => { + return this.baseFs.openSync(p, flags, mode); + }, (zipFs, { subPath }) => { + return this.remapFd(zipFs, zipFs.openSync(subPath, flags, mode)); + }); + } + async opendirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.opendirPromise(p, opts); + }, async (zipFs, { subPath }) => { + return await zipFs.opendirPromise(subPath, opts); + }, { + requireSubpath: false + }); + } + opendirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.opendirSync(p, opts); + }, (zipFs, { subPath }) => { + return zipFs.opendirSync(subPath, opts); + }, { + requireSubpath: false + }); + } + async readPromise(fd, buffer, offset, length, position) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) + return await this.baseFs.readPromise(fd, buffer, offset, length, position); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + const [zipFs, realFd] = entry; + return await zipFs.readPromise(realFd, buffer, offset, length, position); + } + readSync(fd, buffer, offset, length, position) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) + return this.baseFs.readSync(fd, buffer, offset, length, position); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`readSync`); + const [zipFs, realFd] = entry; + return zipFs.readSync(realFd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) { + if (typeof buffer === `string`) { + return await this.baseFs.writePromise(fd, buffer, offset); + } else { + return await this.baseFs.writePromise(fd, buffer, offset, length, position); + } + } + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`write`); + const [zipFs, realFd] = entry; + if (typeof buffer === `string`) { + return await zipFs.writePromise(realFd, buffer, offset); + } else { + return await zipFs.writePromise(realFd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) { + if (typeof buffer === `string`) { + return this.baseFs.writeSync(fd, buffer, offset); + } else { + return this.baseFs.writeSync(fd, buffer, offset, length, position); + } + } + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`writeSync`); + const [zipFs, realFd] = entry; + if (typeof buffer === `string`) { + return zipFs.writeSync(realFd, buffer, offset); + } else { + return zipFs.writeSync(realFd, buffer, offset, length, position); + } + } + async closePromise(fd) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) + return await this.baseFs.closePromise(fd); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`close`); + this.fdMap.delete(fd); + const [zipFs, realFd] = entry; + return await zipFs.closePromise(realFd); + } + closeSync(fd) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) + return this.baseFs.closeSync(fd); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`closeSync`); + this.fdMap.delete(fd); + const [zipFs, realFd] = entry; + return zipFs.closeSync(realFd); + } + createReadStream(p, opts) { + if (p === null) + return this.baseFs.createReadStream(p, opts); + return this.makeCallSync(p, () => { + return this.baseFs.createReadStream(p, opts); + }, (zipFs, { archivePath, subPath }) => { + const stream = zipFs.createReadStream(subPath, opts); + stream.path = npath.fromPortablePath(this.pathUtils.join(archivePath, subPath)); + return stream; + }); + } + createWriteStream(p, opts) { + if (p === null) + return this.baseFs.createWriteStream(p, opts); + return this.makeCallSync(p, () => { + return this.baseFs.createWriteStream(p, opts); + }, (zipFs, { subPath }) => { + return zipFs.createWriteStream(subPath, opts); + }); + } + async realpathPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.realpathPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + let realArchivePath = this.realPaths.get(archivePath); + if (typeof realArchivePath === `undefined`) { + realArchivePath = await this.baseFs.realpathPromise(archivePath); + this.realPaths.set(archivePath, realArchivePath); + } + return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, await zipFs.realpathPromise(subPath))); + }); + } + realpathSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.realpathSync(p); + }, (zipFs, { archivePath, subPath }) => { + let realArchivePath = this.realPaths.get(archivePath); + if (typeof realArchivePath === `undefined`) { + realArchivePath = this.baseFs.realpathSync(archivePath); + this.realPaths.set(archivePath, realArchivePath); + } + return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, zipFs.realpathSync(subPath))); + }); + } + async existsPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.existsPromise(p); + }, async (zipFs, { subPath }) => { + return await zipFs.existsPromise(subPath); + }); + } + existsSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.existsSync(p); + }, (zipFs, { subPath }) => { + return zipFs.existsSync(subPath); + }); + } + async accessPromise(p, mode) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.accessPromise(p, mode); + }, async (zipFs, { subPath }) => { + return await zipFs.accessPromise(subPath, mode); + }); + } + accessSync(p, mode) { + return this.makeCallSync(p, () => { + return this.baseFs.accessSync(p, mode); + }, (zipFs, { subPath }) => { + return zipFs.accessSync(subPath, mode); + }); + } + async statPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.statPromise(p, opts); + }, async (zipFs, { subPath }) => { + return await zipFs.statPromise(subPath, opts); + }); + } + statSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.statSync(p, opts); + }, (zipFs, { subPath }) => { + return zipFs.statSync(subPath, opts); + }); + } + async fstatPromise(fd, opts) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) + return this.baseFs.fstatPromise(fd, opts); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fstat`); + const [zipFs, realFd] = entry; + return zipFs.fstatPromise(realFd, opts); + } + fstatSync(fd, opts) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) + return this.baseFs.fstatSync(fd, opts); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fstatSync`); + const [zipFs, realFd] = entry; + return zipFs.fstatSync(realFd, opts); + } + async lstatPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.lstatPromise(p, opts); + }, async (zipFs, { subPath }) => { + return await zipFs.lstatPromise(subPath, opts); + }); + } + lstatSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.lstatSync(p, opts); + }, (zipFs, { subPath }) => { + return zipFs.lstatSync(subPath, opts); + }); + } + async fchmodPromise(fd, mask) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) + return this.baseFs.fchmodPromise(fd, mask); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchmod`); + const [zipFs, realFd] = entry; + return zipFs.fchmodPromise(realFd, mask); + } + fchmodSync(fd, mask) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) + return this.baseFs.fchmodSync(fd, mask); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchmodSync`); + const [zipFs, realFd] = entry; + return zipFs.fchmodSync(realFd, mask); + } + async chmodPromise(p, mask) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.chmodPromise(p, mask); + }, async (zipFs, { subPath }) => { + return await zipFs.chmodPromise(subPath, mask); + }); + } + chmodSync(p, mask) { + return this.makeCallSync(p, () => { + return this.baseFs.chmodSync(p, mask); + }, (zipFs, { subPath }) => { + return zipFs.chmodSync(subPath, mask); + }); + } + async fchownPromise(fd, uid, gid) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) + return this.baseFs.fchownPromise(fd, uid, gid); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchown`); + const [zipFs, realFd] = entry; + return zipFs.fchownPromise(realFd, uid, gid); + } + fchownSync(fd, uid, gid) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) + return this.baseFs.fchownSync(fd, uid, gid); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchownSync`); + const [zipFs, realFd] = entry; + return zipFs.fchownSync(realFd, uid, gid); + } + async chownPromise(p, uid, gid) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.chownPromise(p, uid, gid); + }, async (zipFs, { subPath }) => { + return await zipFs.chownPromise(subPath, uid, gid); + }); + } + chownSync(p, uid, gid) { + return this.makeCallSync(p, () => { + return this.baseFs.chownSync(p, uid, gid); + }, (zipFs, { subPath }) => { + return zipFs.chownSync(subPath, uid, gid); + }); + } + async renamePromise(oldP, newP) { + return await this.makeCallPromise(oldP, async () => { + return await this.makeCallPromise(newP, async () => { + return await this.baseFs.renamePromise(oldP, newP); + }, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }); + }, async (zipFsO, { subPath: subPathO }) => { + return await this.makeCallPromise(newP, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }, async (zipFsN, { subPath: subPathN }) => { + if (zipFsO !== zipFsN) { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + } else { + return await zipFsO.renamePromise(subPathO, subPathN); + } + }); + }); + } + renameSync(oldP, newP) { + return this.makeCallSync(oldP, () => { + return this.makeCallSync(newP, () => { + return this.baseFs.renameSync(oldP, newP); + }, () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }); + }, (zipFsO, { subPath: subPathO }) => { + return this.makeCallSync(newP, () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }, (zipFsN, { subPath: subPathN }) => { + if (zipFsO !== zipFsN) { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + } else { + return zipFsO.renameSync(subPathO, subPathN); + } + }); + }); + } + async copyFilePromise(sourceP, destP, flags = 0) { + const fallback = async (sourceFs, sourceP2, destFs, destP2) => { + if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` }); + if (flags & fs.constants.COPYFILE_EXCL && await this.existsPromise(sourceP2)) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` }); + let content; + try { + content = await sourceFs.readFilePromise(sourceP2); + } catch (error) { + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` }); + } + await destFs.writeFilePromise(destP2, content); + }; + return await this.makeCallPromise(sourceP, async () => { + return await this.makeCallPromise(destP, async () => { + return await this.baseFs.copyFilePromise(sourceP, destP, flags); + }, async (zipFsD, { subPath: subPathD }) => { + return await fallback(this.baseFs, sourceP, zipFsD, subPathD); + }); + }, async (zipFsS, { subPath: subPathS }) => { + return await this.makeCallPromise(destP, async () => { + return await fallback(zipFsS, subPathS, this.baseFs, destP); + }, async (zipFsD, { subPath: subPathD }) => { + if (zipFsS !== zipFsD) { + return await fallback(zipFsS, subPathS, zipFsD, subPathD); + } else { + return await zipFsS.copyFilePromise(subPathS, subPathD, flags); + } + }); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + const fallback = (sourceFs, sourceP2, destFs, destP2) => { + if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` }); + if (flags & fs.constants.COPYFILE_EXCL && this.existsSync(sourceP2)) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` }); + let content; + try { + content = sourceFs.readFileSync(sourceP2); + } catch (error) { + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` }); + } + destFs.writeFileSync(destP2, content); + }; + return this.makeCallSync(sourceP, () => { + return this.makeCallSync(destP, () => { + return this.baseFs.copyFileSync(sourceP, destP, flags); + }, (zipFsD, { subPath: subPathD }) => { + return fallback(this.baseFs, sourceP, zipFsD, subPathD); + }); + }, (zipFsS, { subPath: subPathS }) => { + return this.makeCallSync(destP, () => { + return fallback(zipFsS, subPathS, this.baseFs, destP); + }, (zipFsD, { subPath: subPathD }) => { + if (zipFsS !== zipFsD) { + return fallback(zipFsS, subPathS, zipFsD, subPathD); + } else { + return zipFsS.copyFileSync(subPathS, subPathD, flags); + } + }); + }); + } + async appendFilePromise(p, content, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.appendFilePromise(p, content, opts); + }, async (zipFs, { subPath }) => { + return await zipFs.appendFilePromise(subPath, content, opts); + }); + } + appendFileSync(p, content, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.appendFileSync(p, content, opts); + }, (zipFs, { subPath }) => { + return zipFs.appendFileSync(subPath, content, opts); + }); + } + async writeFilePromise(p, content, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.writeFilePromise(p, content, opts); + }, async (zipFs, { subPath }) => { + return await zipFs.writeFilePromise(subPath, content, opts); + }); + } + writeFileSync(p, content, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.writeFileSync(p, content, opts); + }, (zipFs, { subPath }) => { + return zipFs.writeFileSync(subPath, content, opts); + }); + } + async unlinkPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.unlinkPromise(p); + }, async (zipFs, { subPath }) => { + return await zipFs.unlinkPromise(subPath); + }); + } + unlinkSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.unlinkSync(p); + }, (zipFs, { subPath }) => { + return zipFs.unlinkSync(subPath); + }); + } + async utimesPromise(p, atime, mtime) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.utimesPromise(p, atime, mtime); + }, async (zipFs, { subPath }) => { + return await zipFs.utimesPromise(subPath, atime, mtime); + }); + } + utimesSync(p, atime, mtime) { + return this.makeCallSync(p, () => { + return this.baseFs.utimesSync(p, atime, mtime); + }, (zipFs, { subPath }) => { + return zipFs.utimesSync(subPath, atime, mtime); + }); + } + async mkdirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.mkdirPromise(p, opts); + }, async (zipFs, { subPath }) => { + return await zipFs.mkdirPromise(subPath, opts); + }); + } + mkdirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.mkdirSync(p, opts); + }, (zipFs, { subPath }) => { + return zipFs.mkdirSync(subPath, opts); + }); + } + async rmdirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.rmdirPromise(p, opts); + }, async (zipFs, { subPath }) => { + return await zipFs.rmdirPromise(subPath, opts); + }); + } + rmdirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.rmdirSync(p, opts); + }, (zipFs, { subPath }) => { + return zipFs.rmdirSync(subPath, opts); + }); + } + async linkPromise(existingP, newP) { + return await this.makeCallPromise(newP, async () => { + return await this.baseFs.linkPromise(existingP, newP); + }, async (zipFs, { subPath }) => { + return await zipFs.linkPromise(existingP, subPath); + }); + } + linkSync(existingP, newP) { + return this.makeCallSync(newP, () => { + return this.baseFs.linkSync(existingP, newP); + }, (zipFs, { subPath }) => { + return zipFs.linkSync(existingP, subPath); + }); + } + async symlinkPromise(target, p, type) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.symlinkPromise(target, p, type); + }, async (zipFs, { subPath }) => { + return await zipFs.symlinkPromise(target, subPath); + }); + } + symlinkSync(target, p, type) { + return this.makeCallSync(p, () => { + return this.baseFs.symlinkSync(target, p, type); + }, (zipFs, { subPath }) => { + return zipFs.symlinkSync(target, subPath); + }); + } + async readFilePromise(p, encoding) { + return this.makeCallPromise(p, async () => { + switch (encoding) { + case `utf8`: + return await this.baseFs.readFilePromise(p, encoding); + default: + return await this.baseFs.readFilePromise(p, encoding); + } + }, async (zipFs, { subPath }) => { + return await zipFs.readFilePromise(subPath, encoding); + }); + } + readFileSync(p, encoding) { + return this.makeCallSync(p, () => { + switch (encoding) { + case `utf8`: + return this.baseFs.readFileSync(p, encoding); + default: + return this.baseFs.readFileSync(p, encoding); + } + }, (zipFs, { subPath }) => { + return zipFs.readFileSync(subPath, encoding); + }); + } + async readdirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.readdirPromise(p, opts); + }, async (zipFs, { subPath }) => { + return await zipFs.readdirPromise(subPath, opts); + }, { + requireSubpath: false + }); + } + readdirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.readdirSync(p, opts); + }, (zipFs, { subPath }) => { + return zipFs.readdirSync(subPath, opts); + }, { + requireSubpath: false + }); + } + async readlinkPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.readlinkPromise(p); + }, async (zipFs, { subPath }) => { + return await zipFs.readlinkPromise(subPath); + }); + } + readlinkSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.readlinkSync(p); + }, (zipFs, { subPath }) => { + return zipFs.readlinkSync(subPath); + }); + } + async truncatePromise(p, len) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.truncatePromise(p, len); + }, async (zipFs, { subPath }) => { + return await zipFs.truncatePromise(subPath, len); + }); + } + truncateSync(p, len) { + return this.makeCallSync(p, () => { + return this.baseFs.truncateSync(p, len); + }, (zipFs, { subPath }) => { + return zipFs.truncateSync(subPath, len); + }); + } + async ftruncatePromise(fd, len) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) + return this.baseFs.ftruncatePromise(fd, len); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`ftruncate`); + const [zipFs, realFd] = entry; + return zipFs.ftruncatePromise(realFd, len); + } + ftruncateSync(fd, len) { + if ((fd & ZIP_MASK) !== ZIP_MAGIC) + return this.baseFs.ftruncateSync(fd, len); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`ftruncateSync`); + const [zipFs, realFd] = entry; + return zipFs.ftruncateSync(realFd, len); + } + watch(p, a, b) { + return this.makeCallSync(p, () => { + return this.baseFs.watch( + p, + a, + b + ); + }, (zipFs, { subPath }) => { + return zipFs.watch( + subPath, + a, + b + ); + }); + } + watchFile(p, a, b) { + return this.makeCallSync(p, () => { + return this.baseFs.watchFile( + p, + a, + b + ); + }, () => { + return watchFile(this, p, a, b); + }); + } + unwatchFile(p, cb) { + return this.makeCallSync(p, () => { + return this.baseFs.unwatchFile(p, cb); + }, () => { + return unwatchFile(this, p, cb); + }); + } + async makeCallPromise(p, discard, accept, { requireSubpath = true } = {}) { + if (typeof p !== `string`) + return await discard(); + const normalizedP = this.resolve(p); + const zipInfo = this.findZip(normalizedP); + if (!zipInfo) + return await discard(); + if (requireSubpath && zipInfo.subPath === `/`) + return await discard(); + return await this.getZipPromise(zipInfo.archivePath, async (zipFs) => await accept(zipFs, zipInfo)); + } + makeCallSync(p, discard, accept, { requireSubpath = true } = {}) { + if (typeof p !== `string`) + return discard(); + const normalizedP = this.resolve(p); + const zipInfo = this.findZip(normalizedP); + if (!zipInfo) + return discard(); + if (requireSubpath && zipInfo.subPath === `/`) + return discard(); + return this.getZipSync(zipInfo.archivePath, (zipFs) => accept(zipFs, zipInfo)); + } + findZip(p) { + if (this.filter && !this.filter.test(p)) + return null; + let filePath = ``; + while (true) { + const pathPartWithArchive = p.substring(filePath.length); + let archivePart; + if (!this.fileExtensions) { + archivePart = getArchivePart(pathPartWithArchive, `.zip`); + } else { + for (const ext of this.fileExtensions) { + archivePart = getArchivePart(pathPartWithArchive, ext); + if (archivePart) { + break; + } + } + } + if (!archivePart) + return null; + filePath = this.pathUtils.join(filePath, archivePart); + if (this.isZip.has(filePath) === false) { + if (this.notZip.has(filePath)) + continue; + try { + if (!this.baseFs.lstatSync(filePath).isFile()) { + this.notZip.add(filePath); + continue; + } + } catch { + return null; + } + this.isZip.add(filePath); + } + return { + archivePath: filePath, + subPath: this.pathUtils.join(PortablePath.root, p.substring(filePath.length)) + }; + } + } + limitOpenFiles(max) { + if (this.zipInstances === null) + return; + const now = Date.now(); + let nextExpiresAt = now + this.maxAge; + let closeCount = max === null ? 0 : this.zipInstances.size - max; + for (const [path, { zipFs, expiresAt, refCount }] of this.zipInstances.entries()) { + if (refCount !== 0 || zipFs.hasOpenFileHandles()) { + continue; + } else if (now >= expiresAt) { + zipFs.saveAndClose(); + this.zipInstances.delete(path); + closeCount -= 1; + continue; + } else if (max === null || closeCount <= 0) { + nextExpiresAt = expiresAt; + break; + } + zipFs.saveAndClose(); + this.zipInstances.delete(path); + closeCount -= 1; + } + if (this.limitOpenFilesTimeout === null && (max === null && this.zipInstances.size > 0 || max !== null)) { + this.limitOpenFilesTimeout = setTimeout(() => { + this.limitOpenFilesTimeout = null; + this.limitOpenFiles(null); + }, nextExpiresAt - now).unref(); + } + } + async getZipPromise(p, accept) { + const getZipOptions = async () => ({ + baseFs: this.baseFs, + libzip: this.libzip, + readOnly: this.readOnlyArchives, + stats: await this.baseFs.statPromise(p) + }); + if (this.zipInstances) { + let cachedZipFs = this.zipInstances.get(p); + if (!cachedZipFs) { + const zipOptions = await getZipOptions(); + cachedZipFs = this.zipInstances.get(p); + if (!cachedZipFs) { + cachedZipFs = { + zipFs: new ZipFS(p, zipOptions), + expiresAt: 0, + refCount: 0 + }; + } + } + this.zipInstances.delete(p); + this.limitOpenFiles(this.maxOpenFiles - 1); + this.zipInstances.set(p, cachedZipFs); + cachedZipFs.expiresAt = Date.now() + this.maxAge; + cachedZipFs.refCount += 1; + try { + return await accept(cachedZipFs.zipFs); + } finally { + cachedZipFs.refCount -= 1; + } + } else { + const zipFs = new ZipFS(p, await getZipOptions()); + try { + return await accept(zipFs); + } finally { + zipFs.saveAndClose(); + } + } + } + getZipSync(p, accept) { + const getZipOptions = () => ({ + baseFs: this.baseFs, + libzip: this.libzip, + readOnly: this.readOnlyArchives, + stats: this.baseFs.statSync(p) + }); + if (this.zipInstances) { + let cachedZipFs = this.zipInstances.get(p); + if (!cachedZipFs) { + cachedZipFs = { + zipFs: new ZipFS(p, getZipOptions()), + expiresAt: 0, + refCount: 0 + }; + } + this.zipInstances.delete(p); + this.limitOpenFiles(this.maxOpenFiles - 1); + this.zipInstances.set(p, cachedZipFs); + cachedZipFs.expiresAt = Date.now() + this.maxAge; + return accept(cachedZipFs.zipFs); + } else { + const zipFs = new ZipFS(p, getZipOptions()); + try { + return accept(zipFs); + } finally { + zipFs.saveAndClose(); + } + } + } +} + +class NodePathFS extends ProxiedFS { + constructor(baseFs) { + super(npath); + this.baseFs = baseFs; + } + mapFromBase(path) { + return path; + } + mapToBase(path) { + if (typeof path === `string`) + return path; + if (path instanceof url.URL) + return url.fileURLToPath(path); + if (Buffer.isBuffer(path)) { + const str = path.toString(); + if (Buffer.byteLength(str) !== path.byteLength) + throw new Error(`Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942`); + return str; + } + throw new Error(`Unsupported path type: ${nodeUtils.inspect(path)}`); + } +} + +var _a, _b, _c, _d; +const kBaseFs = Symbol(`kBaseFs`); +const kFd = Symbol(`kFd`); +const kClosePromise = Symbol(`kClosePromise`); +const kCloseResolve = Symbol(`kCloseResolve`); +const kCloseReject = Symbol(`kCloseReject`); +const kRefs = Symbol(`kRefs`); +const kRef = Symbol(`kRef`); +const kUnref = Symbol(`kUnref`); +class FileHandle { + constructor(fd, baseFs) { + this[_a] = 1; + this[_b] = void 0; + this[_c] = void 0; + this[_d] = void 0; + this[kBaseFs] = baseFs; + this[kFd] = fd; + } + get fd() { + return this[kFd]; + } + async appendFile(data, options) { + var _a2; + try { + this[kRef](this.appendFile); + const encoding = (_a2 = typeof options === `string` ? options : options == null ? void 0 : options.encoding) != null ? _a2 : void 0; + return await this[kBaseFs].appendFilePromise(this.fd, data, encoding ? { encoding } : void 0); + } finally { + this[kUnref](); + } + } + async chown(uid, gid) { + try { + this[kRef](this.chown); + return await this[kBaseFs].fchownPromise(this.fd, uid, gid); + } finally { + this[kUnref](); + } + } + async chmod(mode) { + try { + this[kRef](this.chmod); + return await this[kBaseFs].fchmodPromise(this.fd, mode); + } finally { + this[kUnref](); + } + } + createReadStream(options) { + return this[kBaseFs].createReadStream(null, { ...options, fd: this.fd }); + } + createWriteStream(options) { + return this[kBaseFs].createWriteStream(null, { ...options, fd: this.fd }); + } + datasync() { + throw new Error(`Method not implemented.`); + } + sync() { + throw new Error(`Method not implemented.`); + } + async read(bufferOrOptions, offset, length, position) { + var _a2, _b2, _c2; + try { + this[kRef](this.read); + let buffer; + if (!Buffer.isBuffer(bufferOrOptions)) { + bufferOrOptions != null ? bufferOrOptions : bufferOrOptions = {}; + buffer = (_a2 = bufferOrOptions.buffer) != null ? _a2 : Buffer.alloc(16384); + offset = bufferOrOptions.offset || 0; + length = (_b2 = bufferOrOptions.length) != null ? _b2 : buffer.byteLength; + position = (_c2 = bufferOrOptions.position) != null ? _c2 : null; + } else { + buffer = bufferOrOptions; + } + offset != null ? offset : offset = 0; + length != null ? length : length = 0; + if (length === 0) { + return { + bytesRead: length, + buffer + }; + } + const bytesRead = await this[kBaseFs].readPromise(this.fd, buffer, offset, length, position); + return { + bytesRead, + buffer + }; + } finally { + this[kUnref](); + } + } + async readFile(options) { + var _a2; + try { + this[kRef](this.readFile); + const encoding = (_a2 = typeof options === `string` ? options : options == null ? void 0 : options.encoding) != null ? _a2 : void 0; + return await this[kBaseFs].readFilePromise(this.fd, encoding); + } finally { + this[kUnref](); + } + } + readLines(options) { + return readline.createInterface({ + input: this.createReadStream(options), + crlfDelay: Infinity + }); + } + async stat(opts) { + try { + this[kRef](this.stat); + return await this[kBaseFs].fstatPromise(this.fd, opts); + } finally { + this[kUnref](); + } + } + async truncate(len) { + try { + this[kRef](this.truncate); + return await this[kBaseFs].ftruncatePromise(this.fd, len); + } finally { + this[kUnref](); + } + } + utimes(atime, mtime) { + throw new Error(`Method not implemented.`); + } + async writeFile(data, options) { + var _a2; + try { + this[kRef](this.writeFile); + const encoding = (_a2 = typeof options === `string` ? options : options == null ? void 0 : options.encoding) != null ? _a2 : void 0; + await this[kBaseFs].writeFilePromise(this.fd, data, encoding); + } finally { + this[kUnref](); + } + } + async write(...args) { + try { + this[kRef](this.write); + if (ArrayBuffer.isView(args[0])) { + const [buffer, offset, length, position] = args; + const bytesWritten = await this[kBaseFs].writePromise(this.fd, buffer, offset != null ? offset : void 0, length != null ? length : void 0, position != null ? position : void 0); + return { bytesWritten, buffer }; + } else { + const [data, position, encoding] = args; + const bytesWritten = await this[kBaseFs].writePromise(this.fd, data, position, encoding); + return { bytesWritten, buffer: data }; + } + } finally { + this[kUnref](); + } + } + async writev(buffers, position) { + try { + this[kRef](this.writev); + let bytesWritten = 0; + if (typeof position !== `undefined`) { + for (const buffer of buffers) { + const writeResult = await this.write(buffer, void 0, void 0, position); + bytesWritten += writeResult.bytesWritten; + position += writeResult.bytesWritten; + } + } else { + for (const buffer of buffers) { + const writeResult = await this.write(buffer); + bytesWritten += writeResult.bytesWritten; + } + } + return { + buffers, + bytesWritten + }; + } finally { + this[kUnref](); + } + } + readv(buffers, position) { + throw new Error(`Method not implemented.`); + } + close() { + if (this[kFd] === -1) + return Promise.resolve(); + if (this[kClosePromise]) + return this[kClosePromise]; + this[kRefs]--; + if (this[kRefs] === 0) { + const fd = this[kFd]; + this[kFd] = -1; + this[kClosePromise] = this[kBaseFs].closePromise(fd).finally(() => { + this[kClosePromise] = void 0; + }); + } else { + this[kClosePromise] = new Promise((resolve, reject) => { + this[kCloseResolve] = resolve; + this[kCloseReject] = reject; + }).finally(() => { + this[kClosePromise] = void 0; + this[kCloseReject] = void 0; + this[kCloseResolve] = void 0; + }); + } + return this[kClosePromise]; + } + [(_a = kRefs, _b = kClosePromise, _c = kCloseResolve, _d = kCloseReject, kRef)](caller) { + if (this[kFd] === -1) { + const err = new Error(`file closed`); + err.code = `EBADF`; + err.syscall = caller.name; + throw err; + } + this[kRefs]++; + } + [kUnref]() { + this[kRefs]--; + if (this[kRefs] === 0) { + const fd = this[kFd]; + this[kFd] = -1; + this[kBaseFs].closePromise(fd).then(this[kCloseResolve], this[kCloseReject]); + } + } +} + +const SYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ + `accessSync`, + `appendFileSync`, + `createReadStream`, + `createWriteStream`, + `chmodSync`, + `fchmodSync`, + `chownSync`, + `fchownSync`, + `closeSync`, + `copyFileSync`, + `linkSync`, + `lstatSync`, + `fstatSync`, + `lutimesSync`, + `mkdirSync`, + `openSync`, + `opendirSync`, + `readlinkSync`, + `readFileSync`, + `readdirSync`, + `readlinkSync`, + `realpathSync`, + `renameSync`, + `rmdirSync`, + `statSync`, + `symlinkSync`, + `truncateSync`, + `ftruncateSync`, + `unlinkSync`, + `unwatchFile`, + `utimesSync`, + `watch`, + `watchFile`, + `writeFileSync`, + `writeSync` +]); +const ASYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ + `accessPromise`, + `appendFilePromise`, + `fchmodPromise`, + `chmodPromise`, + `fchownPromise`, + `chownPromise`, + `closePromise`, + `copyFilePromise`, + `linkPromise`, + `fstatPromise`, + `lstatPromise`, + `lutimesPromise`, + `mkdirPromise`, + `openPromise`, + `opendirPromise`, + `readdirPromise`, + `realpathPromise`, + `readFilePromise`, + `readdirPromise`, + `readlinkPromise`, + `renamePromise`, + `rmdirPromise`, + `statPromise`, + `symlinkPromise`, + `truncatePromise`, + `ftruncatePromise`, + `unlinkPromise`, + `utimesPromise`, + `writeFilePromise`, + `writeSync` +]); +function patchFs(patchedFs, fakeFs) { + fakeFs = new NodePathFS(fakeFs); + const setupFn = (target, name, replacement) => { + const orig = target[name]; + target[name] = replacement; + if (typeof (orig == null ? void 0 : orig[nodeUtils.promisify.custom]) !== `undefined`) { + replacement[nodeUtils.promisify.custom] = orig[nodeUtils.promisify.custom]; + } + }; + { + setupFn(patchedFs, `exists`, (p, ...args) => { + const hasCallback = typeof args[args.length - 1] === `function`; + const callback = hasCallback ? args.pop() : () => { + }; + process.nextTick(() => { + fakeFs.existsPromise(p).then((exists) => { + callback(exists); + }, () => { + callback(false); + }); + }); + }); + setupFn(patchedFs, `read`, (...args) => { + let [fd, buffer, offset, length, position, callback] = args; + if (args.length <= 3) { + let options = {}; + if (args.length < 3) { + callback = args[1]; + } else { + options = args[1]; + callback = args[2]; + } + ({ + buffer = Buffer.alloc(16384), + offset = 0, + length = buffer.byteLength, + position + } = options); + } + if (offset == null) + offset = 0; + length |= 0; + if (length === 0) { + process.nextTick(() => { + callback(null, 0, buffer); + }); + return; + } + if (position == null) + position = -1; + process.nextTick(() => { + fakeFs.readPromise(fd, buffer, offset, length, position).then((bytesRead) => { + callback(null, bytesRead, buffer); + }, (error) => { + callback(error, 0, buffer); + }); + }); + }); + for (const fnName of ASYNC_IMPLEMENTATIONS) { + const origName = fnName.replace(/Promise$/, ``); + if (typeof patchedFs[origName] === `undefined`) + continue; + const fakeImpl = fakeFs[fnName]; + if (typeof fakeImpl === `undefined`) + continue; + const wrapper = (...args) => { + const hasCallback = typeof args[args.length - 1] === `function`; + const callback = hasCallback ? args.pop() : () => { + }; + process.nextTick(() => { + fakeImpl.apply(fakeFs, args).then((result) => { + callback(null, result); + }, (error) => { + callback(error); + }); + }); + }; + setupFn(patchedFs, origName, wrapper); + } + patchedFs.realpath.native = patchedFs.realpath; + } + { + setupFn(patchedFs, `existsSync`, (p) => { + try { + return fakeFs.existsSync(p); + } catch (error) { + return false; + } + }); + setupFn(patchedFs, `readSync`, (...args) => { + let [fd, buffer, offset, length, position] = args; + if (args.length <= 3) { + const options = args[2] || {}; + ({ offset = 0, length = buffer.byteLength, position } = options); + } + if (offset == null) + offset = 0; + length |= 0; + if (length === 0) + return 0; + if (position == null) + position = -1; + return fakeFs.readSync(fd, buffer, offset, length, position); + }); + for (const fnName of SYNC_IMPLEMENTATIONS) { + const origName = fnName; + if (typeof patchedFs[origName] === `undefined`) + continue; + const fakeImpl = fakeFs[fnName]; + if (typeof fakeImpl === `undefined`) + continue; + setupFn(patchedFs, origName, fakeImpl.bind(fakeFs)); + } + patchedFs.realpathSync.native = patchedFs.realpathSync; + } + { + const origEmitWarning = process.emitWarning; + process.emitWarning = () => { + }; + let patchedFsPromises; + try { + patchedFsPromises = patchedFs.promises; + } finally { + process.emitWarning = origEmitWarning; + } + if (typeof patchedFsPromises !== `undefined`) { + for (const fnName of ASYNC_IMPLEMENTATIONS) { + const origName = fnName.replace(/Promise$/, ``); + if (typeof patchedFsPromises[origName] === `undefined`) + continue; + const fakeImpl = fakeFs[fnName]; + if (typeof fakeImpl === `undefined`) + continue; + if (fnName === `open`) + continue; + setupFn(patchedFsPromises, origName, (pathLike, ...args) => { + if (pathLike instanceof FileHandle) { + return pathLike[origName].apply(pathLike, args); + } else { + return fakeImpl.call(fakeFs, pathLike, ...args); + } + }); + } + setupFn(patchedFsPromises, `open`, async (...args) => { + const fd = await fakeFs.openPromise(...args); + return new FileHandle(fd, fakeFs); + }); + } + } + { + patchedFs.read[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => { + const res = fakeFs.readPromise(fd, buffer, ...args); + return { bytesRead: await res, buffer }; + }; + patchedFs.write[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => { + const res = fakeFs.writePromise(fd, buffer, ...args); + return { bytesWritten: await res, buffer }; + }; + } +} + +var libzipSync = {exports: {}}; + +(function (module, exports) { +var frozenFs = Object.assign({}, fs__default.default); +var createModule = function() { + var _scriptDir = void 0; + if (typeof __filename !== "undefined") + _scriptDir = _scriptDir || __filename; + return function(createModule2) { + createModule2 = createModule2 || {}; + var Module = typeof createModule2 !== "undefined" ? createModule2 : {}; + var readyPromiseResolve, readyPromiseReject; + Module["ready"] = new Promise(function(resolve, reject) { + readyPromiseResolve = resolve; + readyPromiseReject = reject; + }); + var moduleOverrides = {}; + var key; + for (key in Module) { + if (Module.hasOwnProperty(key)) { + moduleOverrides[key] = Module[key]; + } + } + var scriptDirectory = ""; + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory); + } + return scriptDirectory + path; + } + var read_, readBinary; + var nodeFS; + var nodePath; + { + { + scriptDirectory = __dirname + "/"; + } + read_ = function shell_read(filename, binary) { + var ret = tryParseAsDataURI(filename); + if (ret) { + return binary ? ret : ret.toString(); + } + if (!nodeFS) + nodeFS = frozenFs; + if (!nodePath) + nodePath = path__default.default; + filename = nodePath["normalize"](filename); + return nodeFS["readFileSync"](filename, binary ? null : "utf8"); + }; + readBinary = function readBinary2(filename) { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + assert(ret.buffer); + return ret; + }; + if (process["argv"].length > 1) { + process["argv"][1].replace(/\\/g, "/"); + } + process["argv"].slice(2); + Module["inspect"] = function() { + return "[Emscripten Module object]"; + }; + } + var out = Module["print"] || console.log.bind(console); + var err = Module["printErr"] || console.warn.bind(console); + for (key in moduleOverrides) { + if (moduleOverrides.hasOwnProperty(key)) { + Module[key] = moduleOverrides[key]; + } + } + moduleOverrides = null; + if (Module["arguments"]) + ; + if (Module["thisProgram"]) + ; + if (Module["quit"]) + ; + var STACK_ALIGN = 16; + function alignMemory(size, factor) { + if (!factor) + factor = STACK_ALIGN; + return Math.ceil(size / factor) * factor; + } + var wasmBinary; + if (Module["wasmBinary"]) + wasmBinary = Module["wasmBinary"]; + Module["noExitRuntime"] || true; + if (typeof WebAssembly !== "object") { + abort("no native wasm support detected"); + } + function getValue(ptr, type, noSafe) { + type = type || "i8"; + if (type.charAt(type.length - 1) === "*") + type = "i32"; + switch (type) { + case "i1": + return HEAP8[ptr >> 0]; + case "i8": + return HEAP8[ptr >> 0]; + case "i16": + return HEAP16[ptr >> 1]; + case "i32": + return HEAP32[ptr >> 2]; + case "i64": + return HEAP32[ptr >> 2]; + case "float": + return HEAPF32[ptr >> 2]; + case "double": + return HEAPF64[ptr >> 3]; + default: + abort("invalid type for getValue: " + type); + } + return null; + } + var wasmMemory; + var ABORT = false; + function assert(condition, text) { + if (!condition) { + abort("Assertion failed: " + text); + } + } + function getCFunc(ident) { + var func = Module["_" + ident]; + assert( + func, + "Cannot call unknown function " + ident + ", make sure it is exported" + ); + return func; + } + function ccall(ident, returnType, argTypes, args, opts) { + var toC = { + string: function(str) { + var ret2 = 0; + if (str !== null && str !== void 0 && str !== 0) { + var len = (str.length << 2) + 1; + ret2 = stackAlloc(len); + stringToUTF8(str, ret2, len); + } + return ret2; + }, + array: function(arr) { + var ret2 = stackAlloc(arr.length); + writeArrayToMemory(arr, ret2); + return ret2; + } + }; + function convertReturnValue(ret2) { + if (returnType === "string") + return UTF8ToString(ret2); + if (returnType === "boolean") + return Boolean(ret2); + return ret2; + } + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) + stack = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func.apply(null, cArgs); + ret = convertReturnValue(ret); + if (stack !== 0) + stackRestore(stack); + return ret; + } + function cwrap(ident, returnType, argTypes, opts) { + argTypes = argTypes || []; + var numericArgs = argTypes.every(function(type) { + return type === "number"; + }); + var numericRet = returnType !== "string"; + if (numericRet && numericArgs && !opts) { + return getCFunc(ident); + } + return function() { + return ccall(ident, returnType, argTypes, arguments); + }; + } + var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : void 0; + function UTF8ArrayToString(heap, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + while (heap[endPtr] && !(endPtr >= endIdx)) + ++endPtr; + if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { + return UTF8Decoder.decode(heap.subarray(idx, endPtr)); + } else { + var str = ""; + while (idx < endPtr) { + var u0 = heap[idx++]; + if (!(u0 & 128)) { + str += String.fromCharCode(u0); + continue; + } + var u1 = heap[idx++] & 63; + if ((u0 & 224) == 192) { + str += String.fromCharCode((u0 & 31) << 6 | u1); + continue; + } + var u2 = heap[idx++] & 63; + if ((u0 & 240) == 224) { + u0 = (u0 & 15) << 12 | u1 << 6 | u2; + } else { + u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63; + } + if (u0 < 65536) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); + } + } + } + return str; + } + function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""; + } + function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) + return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023; + } + if (u <= 127) { + if (outIdx >= endIdx) + break; + heap[outIdx++] = u; + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) + break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63; + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) + break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } else { + if (outIdx + 3 >= endIdx) + break; + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } + } + heap[outIdx] = 0; + return outIdx - startIdx; + } + function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + } + function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) + u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; + if (u <= 127) + ++len; + else if (u <= 2047) + len += 2; + else if (u <= 65535) + len += 3; + else + len += 4; + } + return len; + } + function allocateUTF8(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = _malloc(size); + if (ret) + stringToUTF8Array(str, HEAP8, ret, size); + return ret; + } + function writeArrayToMemory(array, buffer2) { + HEAP8.set(array, buffer2); + } + function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - x % multiple; + } + return x; + } + var buffer, HEAP8, HEAPU8, HEAP16, HEAP32, HEAPF32, HEAPF64; + function updateGlobalBufferAndViews(buf) { + buffer = buf; + Module["HEAP8"] = HEAP8 = new Int8Array(buf); + Module["HEAP16"] = HEAP16 = new Int16Array(buf); + Module["HEAP32"] = HEAP32 = new Int32Array(buf); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); + Module["HEAPU16"] = new Uint16Array(buf); + Module["HEAPU32"] = new Uint32Array(buf); + Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); + Module["HEAPF64"] = HEAPF64 = new Float64Array(buf); + } + Module["INITIAL_MEMORY"] || 16777216; + var wasmTable; + var __ATPRERUN__ = []; + var __ATINIT__ = []; + var __ATPOSTRUN__ = []; + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") + Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); + } + function initRuntime() { + if (!Module["noFSInit"] && !FS.init.initialized) + FS.init(); + callRuntimeCallbacks(__ATINIT__); + } + function postRun() { + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") + Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); + } + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); + } + function addOnInit(cb) { + __ATINIT__.unshift(cb); + } + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); + } + var runDependencies = 0; + var dependenciesFulfilled = null; + function addRunDependency(id) { + runDependencies++; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + } + function removeRunDependency(id) { + runDependencies--; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + if (runDependencies == 0) { + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } + } + Module["preloadedImages"] = {}; + Module["preloadedAudios"] = {}; + function abort(what) { + if (Module["onAbort"]) { + Module["onAbort"](what); + } + what += ""; + err(what); + ABORT = true; + what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."; + var e = new WebAssembly.RuntimeError(what); + readyPromiseReject(e); + throw e; + } + var dataURIPrefix = "data:application/octet-stream;base64,"; + function isDataURI(filename) { + return filename.startsWith(dataURIPrefix); + } + var wasmBinaryFile = "data:application/octet-stream;base64,AGFzbQEAAAABlAInYAF/AX9gA39/fwF/YAF/AGACf38Bf2ACf38AYAV/f39/fwF/YAR/f39/AX9gA39/fwBgBH9+f38Bf2AAAX9gBX9/f35/AX5gA39+fwF/YAF/AX5gAn9+AX9gBH9/fn8BfmADf35/AX5gA39/fgF/YAR/f35/AX9gBn9/f39/fwF/YAR/f39/AGADf39+AX5gAn5/AX9gA398fwBgBH9/f38BfmADf39/AX5gBn98f39/fwF/YAV/f35/fwF/YAV/fn9/fwF/YAV/f39/fwBgAn9+AGACf38BfmACf3wAYAh/fn5/f39+fwF/YAV/f39+fwBgAABgBX5+f35/AX5gBX9/f39/AX5gAnx/AXxgAn9+AX4CeRQBYQFhAAIBYQFiAAABYQFjAAMBYQFkAAYBYQFlAAEBYQFmAAABYQFnAAYBYQFoAAABYQFpAAMBYQFqAAMBYQFrAAMBYQFsAAEBYQFtAAABYQFuAAUBYQFvAAEBYQFwAAMBYQFxAAEBYQFyAAABYQFzAAMBYQF0AAADggKAAgcCAgQAAQECAgANBA4EBwICAhwLEw0AFA0dAAAMDAIHHgwQAgIDAwICAQAIAAcIFBUEBgAADAAECAgDAQYAAgIBBgAfFwEBAwITAiAPBgIFEQMFAxgBCAIBAAAHBQEYABoSAQIABwQDIREIAyIGAAEBAwMAIwUbASQHAQsVAQMABQMEAA0bFw0BBAALCwMDDAwAAwAHJQMBAAgaAQECBQMBAgMDAAcHBwICAgImEQsICAsECQoJAgAAAAAAAAkFAAUFBQEGAwYGBgUSBgYBARIBAAIJBgABDgABAQ8ACQEEGQkJCQAAAAMECgoBAQIQAAAAAgEDAwAEAQoFAA4ACQAEBQFwAR8fBQcBAYACgIACBgkBfwFB0KDBAgsHvgI8AXUCAAF2AIABAXcAkwIBeADjAQF5APEBAXoA0QEBQQDQAQFCAM8BAUMAzgEBRADMAQFFAMsBAUYAyQEBRwCSAgFIAJECAUkAjwIBSgCKAgFLAOkBAUwA4gEBTQDhAQFOADwBTwD8AQFQAPkBAVEA+AEBUgDwAQFTAPoBAVQA4AEBVQAVAVYAGAFXAMcBAVgAzQEBWQDfAQFaAN4BAV8A3QEBJADkAQJhYQDcAQJiYQDbAQJjYQDaAQJkYQDZAQJlYQDYAQJmYQDXAQJnYQDqAQJoYQCcAQJpYQDWAQJqYQDVAQJrYQDUAQJsYQAvAm1hABsCbmEAygECb2EASAJwYQEAAnFhAGcCcmEA0wECc2EA6AECdGEA0gECdWEA9wECdmEA9gECd2EA9QECeGEA5wECeWEA5gECemEA5QEJQQEAQQELHsgBkAKNAo4CjAKLArcBiQKIAocChgKFAoQCgwKCAoECgAL/Af4B/QH7AVv0AfMB8gHvAe4B7QHsAesBCu+QCYACQAEBfyMAQRBrIgMgADYCDCADIAE2AgggAyACNgIEIAMoAgwEQCADKAIMIAMoAgg2AgAgAygCDCADKAIENgIECwvMDAEHfwJAIABFDQAgAEEIayIDIABBBGsoAgAiAUF4cSIAaiEFAkAgAUEBcQ0AIAFBA3FFDQEgAyADKAIAIgFrIgNB9JsBKAIASQ0BIAAgAWohACADQfibASgCAEcEQCABQf8BTQRAIAMoAggiAiABQQN2IgRBA3RBjJwBakYaIAIgAygCDCIBRgRAQeSbAUHkmwEoAgBBfiAEd3E2AgAMAwsgAiABNgIMIAEgAjYCCAwCCyADKAIYIQYCQCADIAMoAgwiAUcEQCADKAIIIgIgATYCDCABIAI2AggMAQsCQCADQRRqIgIoAgAiBA0AIANBEGoiAigCACIEDQBBACEBDAELA0AgAiEHIAQiAUEUaiICKAIAIgQNACABQRBqIQIgASgCECIEDQALIAdBADYCAAsgBkUNAQJAIAMgAygCHCICQQJ0QZSeAWoiBCgCAEYEQCAEIAE2AgAgAQ0BQeibAUHomwEoAgBBfiACd3E2AgAMAwsgBkEQQRQgBigCECADRhtqIAE2AgAgAUUNAgsgASAGNgIYIAMoAhAiAgRAIAEgAjYCECACIAE2AhgLIAMoAhQiAkUNASABIAI2AhQgAiABNgIYDAELIAUoAgQiAUEDcUEDRw0AQeybASAANgIAIAUgAUF+cTYCBCADIABBAXI2AgQgACADaiAANgIADwsgAyAFTw0AIAUoAgQiAUEBcUUNAAJAIAFBAnFFBEAgBUH8mwEoAgBGBEBB/JsBIAM2AgBB8JsBQfCbASgCACAAaiIANgIAIAMgAEEBcjYCBCADQfibASgCAEcNA0HsmwFBADYCAEH4mwFBADYCAA8LIAVB+JsBKAIARgRAQfibASADNgIAQeybAUHsmwEoAgAgAGoiADYCACADIABBAXI2AgQgACADaiAANgIADwsgAUF4cSAAaiEAAkAgAUH/AU0EQCAFKAIIIgIgAUEDdiIEQQN0QYycAWpGGiACIAUoAgwiAUYEQEHkmwFB5JsBKAIAQX4gBHdxNgIADAILIAIgATYCDCABIAI2AggMAQsgBSgCGCEGAkAgBSAFKAIMIgFHBEAgBSgCCCICQfSbASgCAEkaIAIgATYCDCABIAI2AggMAQsCQCAFQRRqIgIoAgAiBA0AIAVBEGoiAigCACIEDQBBACEBDAELA0AgAiEHIAQiAUEUaiICKAIAIgQNACABQRBqIQIgASgCECIEDQALIAdBADYCAAsgBkUNAAJAIAUgBSgCHCICQQJ0QZSeAWoiBCgCAEYEQCAEIAE2AgAgAQ0BQeibAUHomwEoAgBBfiACd3E2AgAMAgsgBkEQQRQgBigCECAFRhtqIAE2AgAgAUUNAQsgASAGNgIYIAUoAhAiAgRAIAEgAjYCECACIAE2AhgLIAUoAhQiAkUNACABIAI2AhQgAiABNgIYCyADIABBAXI2AgQgACADaiAANgIAIANB+JsBKAIARw0BQeybASAANgIADwsgBSABQX5xNgIEIAMgAEEBcjYCBCAAIANqIAA2AgALIABB/wFNBEAgAEEDdiIBQQN0QYycAWohAAJ/QeSbASgCACICQQEgAXQiAXFFBEBB5JsBIAEgAnI2AgAgAAwBCyAAKAIICyECIAAgAzYCCCACIAM2AgwgAyAANgIMIAMgAjYCCA8LQR8hAiADQgA3AhAgAEH///8HTQRAIABBCHYiASABQYD+P2pBEHZBCHEiAXQiAiACQYDgH2pBEHZBBHEiAnQiBCAEQYCAD2pBEHZBAnEiBHRBD3YgASACciAEcmsiAUEBdCAAIAFBFWp2QQFxckEcaiECCyADIAI2AhwgAkECdEGUngFqIQECQAJAAkBB6JsBKAIAIgRBASACdCIHcUUEQEHomwEgBCAHcjYCACABIAM2AgAgAyABNgIYDAELIABBAEEZIAJBAXZrIAJBH0YbdCECIAEoAgAhAQNAIAEiBCgCBEF4cSAARg0CIAJBHXYhASACQQF0IQIgBCABQQRxaiIHQRBqKAIAIgENAAsgByADNgIQIAMgBDYCGAsgAyADNgIMIAMgAzYCCAwBCyAEKAIIIgAgAzYCDCAEIAM2AgggA0EANgIYIAMgBDYCDCADIAA2AggLQYScAUGEnAEoAgBBAWsiAEF/IAAbNgIACwtCAQF/IwBBEGsiASQAIAEgADYCDCABKAIMBEAgASgCDC0AAUEBcQRAIAEoAgwoAgQQFQsgASgCDBAVCyABQRBqJAALQwEBfyMAQRBrIgIkACACIAA2AgwgAiABNgIIIAIoAgwCfyMAQRBrIgAgAigCCDYCDCAAKAIMQQxqCxBFIAJBEGokAAuiLgEMfyMAQRBrIgwkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQfQBTQRAQeSbASgCACIFQRAgAEELakF4cSAAQQtJGyIIQQN2IgJ2IgFBA3EEQCABQX9zQQFxIAJqIgNBA3QiAUGUnAFqKAIAIgRBCGohAAJAIAQoAggiAiABQYycAWoiAUYEQEHkmwEgBUF+IAN3cTYCAAwBCyACIAE2AgwgASACNgIICyAEIANBA3QiAUEDcjYCBCABIARqIgEgASgCBEEBcjYCBAwNCyAIQeybASgCACIKTQ0BIAEEQAJAQQIgAnQiAEEAIABrciABIAJ0cSIAQQAgAGtxQQFrIgAgAEEMdkEQcSICdiIBQQV2QQhxIgAgAnIgASAAdiIBQQJ2QQRxIgByIAEgAHYiAUEBdkECcSIAciABIAB2IgFBAXZBAXEiAHIgASAAdmoiA0EDdCIAQZScAWooAgAiBCgCCCIBIABBjJwBaiIARgRAQeSbASAFQX4gA3dxIgU2AgAMAQsgASAANgIMIAAgATYCCAsgBEEIaiEAIAQgCEEDcjYCBCAEIAhqIgIgA0EDdCIBIAhrIgNBAXI2AgQgASAEaiADNgIAIAoEQCAKQQN2IgFBA3RBjJwBaiEHQfibASgCACEEAn8gBUEBIAF0IgFxRQRAQeSbASABIAVyNgIAIAcMAQsgBygCCAshASAHIAQ2AgggASAENgIMIAQgBzYCDCAEIAE2AggLQfibASACNgIAQeybASADNgIADA0LQeibASgCACIGRQ0BIAZBACAGa3FBAWsiACAAQQx2QRBxIgJ2IgFBBXZBCHEiACACciABIAB2IgFBAnZBBHEiAHIgASAAdiIBQQF2QQJxIgByIAEgAHYiAUEBdkEBcSIAciABIAB2akECdEGUngFqKAIAIgEoAgRBeHEgCGshAyABIQIDQAJAIAIoAhAiAEUEQCACKAIUIgBFDQELIAAoAgRBeHEgCGsiAiADIAIgA0kiAhshAyAAIAEgAhshASAAIQIMAQsLIAEgCGoiCSABTQ0CIAEoAhghCyABIAEoAgwiBEcEQCABKAIIIgBB9JsBKAIASRogACAENgIMIAQgADYCCAwMCyABQRRqIgIoAgAiAEUEQCABKAIQIgBFDQQgAUEQaiECCwNAIAIhByAAIgRBFGoiAigCACIADQAgBEEQaiECIAQoAhAiAA0ACyAHQQA2AgAMCwtBfyEIIABBv39LDQAgAEELaiIAQXhxIQhB6JsBKAIAIglFDQBBACAIayEDAkACQAJAAn9BACAIQYACSQ0AGkEfIAhB////B0sNABogAEEIdiIAIABBgP4/akEQdkEIcSICdCIAIABBgOAfakEQdkEEcSIBdCIAIABBgIAPakEQdkECcSIAdEEPdiABIAJyIAByayIAQQF0IAggAEEVanZBAXFyQRxqCyIFQQJ0QZSeAWooAgAiAkUEQEEAIQAMAQtBACEAIAhBAEEZIAVBAXZrIAVBH0YbdCEBA0ACQCACKAIEQXhxIAhrIgcgA08NACACIQQgByIDDQBBACEDIAIhAAwDCyAAIAIoAhQiByAHIAIgAUEddkEEcWooAhAiAkYbIAAgBxshACABQQF0IQEgAg0ACwsgACAEckUEQEECIAV0IgBBACAAa3IgCXEiAEUNAyAAQQAgAGtxQQFrIgAgAEEMdkEQcSICdiIBQQV2QQhxIgAgAnIgASAAdiIBQQJ2QQRxIgByIAEgAHYiAUEBdkECcSIAciABIAB2IgFBAXZBAXEiAHIgASAAdmpBAnRBlJ4BaigCACEACyAARQ0BCwNAIAAoAgRBeHEgCGsiASADSSECIAEgAyACGyEDIAAgBCACGyEEIAAoAhAiAQR/IAEFIAAoAhQLIgANAAsLIARFDQAgA0HsmwEoAgAgCGtPDQAgBCAIaiIGIARNDQEgBCgCGCEFIAQgBCgCDCIBRwRAIAQoAggiAEH0mwEoAgBJGiAAIAE2AgwgASAANgIIDAoLIARBFGoiAigCACIARQRAIAQoAhAiAEUNBCAEQRBqIQILA0AgAiEHIAAiAUEUaiICKAIAIgANACABQRBqIQIgASgCECIADQALIAdBADYCAAwJCyAIQeybASgCACICTQRAQfibASgCACEDAkAgAiAIayIBQRBPBEBB7JsBIAE2AgBB+JsBIAMgCGoiADYCACAAIAFBAXI2AgQgAiADaiABNgIAIAMgCEEDcjYCBAwBC0H4mwFBADYCAEHsmwFBADYCACADIAJBA3I2AgQgAiADaiIAIAAoAgRBAXI2AgQLIANBCGohAAwLCyAIQfCbASgCACIGSQRAQfCbASAGIAhrIgE2AgBB/JsBQfybASgCACICIAhqIgA2AgAgACABQQFyNgIEIAIgCEEDcjYCBCACQQhqIQAMCwtBACEAIAhBL2oiCQJ/QbyfASgCAARAQcSfASgCAAwBC0HInwFCfzcCAEHAnwFCgKCAgICABDcCAEG8nwEgDEEMakFwcUHYqtWqBXM2AgBB0J8BQQA2AgBBoJ8BQQA2AgBBgCALIgFqIgVBACABayIHcSICIAhNDQpBnJ8BKAIAIgQEQEGUnwEoAgAiAyACaiIBIANNDQsgASAESw0LC0GgnwEtAABBBHENBQJAAkBB/JsBKAIAIgMEQEGknwEhAANAIAMgACgCACIBTwRAIAEgACgCBGogA0sNAwsgACgCCCIADQALC0EAED4iAUF/Rg0GIAIhBUHAnwEoAgAiA0EBayIAIAFxBEAgAiABayAAIAFqQQAgA2txaiEFCyAFIAhNDQYgBUH+////B0sNBkGcnwEoAgAiBARAQZSfASgCACIDIAVqIgAgA00NByAAIARLDQcLIAUQPiIAIAFHDQEMCAsgBSAGayAHcSIFQf7///8HSw0FIAUQPiIBIAAoAgAgACgCBGpGDQQgASEACwJAIABBf0YNACAIQTBqIAVNDQBBxJ8BKAIAIgEgCSAFa2pBACABa3EiAUH+////B0sEQCAAIQEMCAsgARA+QX9HBEAgASAFaiEFIAAhAQwIC0EAIAVrED4aDAULIAAiAUF/Rw0GDAQLAAtBACEEDAcLQQAhAQwFCyABQX9HDQILQaCfAUGgnwEoAgBBBHI2AgALIAJB/v///wdLDQEgAhA+IQFBABA+IQAgAUF/Rg0BIABBf0YNASAAIAFNDQEgACABayIFIAhBKGpNDQELQZSfAUGUnwEoAgAgBWoiADYCAEGYnwEoAgAgAEkEQEGYnwEgADYCAAsCQAJAAkBB/JsBKAIAIgcEQEGknwEhAANAIAEgACgCACIDIAAoAgQiAmpGDQIgACgCCCIADQALDAILQfSbASgCACIAQQAgACABTRtFBEBB9JsBIAE2AgALQQAhAEGonwEgBTYCAEGknwEgATYCAEGEnAFBfzYCAEGInAFBvJ8BKAIANgIAQbCfAUEANgIAA0AgAEEDdCIDQZScAWogA0GMnAFqIgI2AgAgA0GYnAFqIAI2AgAgAEEBaiIAQSBHDQALQfCbASAFQShrIgNBeCABa0EHcUEAIAFBCGpBB3EbIgBrIgI2AgBB/JsBIAAgAWoiADYCACAAIAJBAXI2AgQgASADakEoNgIEQYCcAUHMnwEoAgA2AgAMAgsgAC0ADEEIcQ0AIAMgB0sNACABIAdNDQAgACACIAVqNgIEQfybASAHQXggB2tBB3FBACAHQQhqQQdxGyIAaiICNgIAQfCbAUHwmwEoAgAgBWoiASAAayIANgIAIAIgAEEBcjYCBCABIAdqQSg2AgRBgJwBQcyfASgCADYCAAwBC0H0mwEoAgAgAUsEQEH0mwEgATYCAAsgASAFaiECQaSfASEAAkACQAJAAkACQAJAA0AgAiAAKAIARwRAIAAoAggiAA0BDAILCyAALQAMQQhxRQ0BC0GknwEhAANAIAcgACgCACICTwRAIAIgACgCBGoiBCAHSw0DCyAAKAIIIQAMAAsACyAAIAE2AgAgACAAKAIEIAVqNgIEIAFBeCABa0EHcUEAIAFBCGpBB3EbaiIJIAhBA3I2AgQgAkF4IAJrQQdxQQAgAkEIakEHcRtqIgUgCCAJaiIGayECIAUgB0YEQEH8mwEgBjYCAEHwmwFB8JsBKAIAIAJqIgA2AgAgBiAAQQFyNgIEDAMLIAVB+JsBKAIARgRAQfibASAGNgIAQeybAUHsmwEoAgAgAmoiADYCACAGIABBAXI2AgQgACAGaiAANgIADAMLIAUoAgQiAEEDcUEBRgRAIABBeHEhBwJAIABB/wFNBEAgBSgCCCIDIABBA3YiAEEDdEGMnAFqRhogAyAFKAIMIgFGBEBB5JsBQeSbASgCAEF+IAB3cTYCAAwCCyADIAE2AgwgASADNgIIDAELIAUoAhghCAJAIAUgBSgCDCIBRwRAIAUoAggiACABNgIMIAEgADYCCAwBCwJAIAVBFGoiACgCACIDDQAgBUEQaiIAKAIAIgMNAEEAIQEMAQsDQCAAIQQgAyIBQRRqIgAoAgAiAw0AIAFBEGohACABKAIQIgMNAAsgBEEANgIACyAIRQ0AAkAgBSAFKAIcIgNBAnRBlJ4BaiIAKAIARgRAIAAgATYCACABDQFB6JsBQeibASgCAEF+IAN3cTYCAAwCCyAIQRBBFCAIKAIQIAVGG2ogATYCACABRQ0BCyABIAg2AhggBSgCECIABEAgASAANgIQIAAgATYCGAsgBSgCFCIARQ0AIAEgADYCFCAAIAE2AhgLIAUgB2ohBSACIAdqIQILIAUgBSgCBEF+cTYCBCAGIAJBAXI2AgQgAiAGaiACNgIAIAJB/wFNBEAgAkEDdiIAQQN0QYycAWohAgJ/QeSbASgCACIBQQEgAHQiAHFFBEBB5JsBIAAgAXI2AgAgAgwBCyACKAIICyEAIAIgBjYCCCAAIAY2AgwgBiACNgIMIAYgADYCCAwDC0EfIQAgAkH///8HTQRAIAJBCHYiACAAQYD+P2pBEHZBCHEiA3QiACAAQYDgH2pBEHZBBHEiAXQiACAAQYCAD2pBEHZBAnEiAHRBD3YgASADciAAcmsiAEEBdCACIABBFWp2QQFxckEcaiEACyAGIAA2AhwgBkIANwIQIABBAnRBlJ4BaiEEAkBB6JsBKAIAIgNBASAAdCIBcUUEQEHomwEgASADcjYCACAEIAY2AgAgBiAENgIYDAELIAJBAEEZIABBAXZrIABBH0YbdCEAIAQoAgAhAQNAIAEiAygCBEF4cSACRg0DIABBHXYhASAAQQF0IQAgAyABQQRxaiIEKAIQIgENAAsgBCAGNgIQIAYgAzYCGAsgBiAGNgIMIAYgBjYCCAwCC0HwmwEgBUEoayIDQXggAWtBB3FBACABQQhqQQdxGyIAayICNgIAQfybASAAIAFqIgA2AgAgACACQQFyNgIEIAEgA2pBKDYCBEGAnAFBzJ8BKAIANgIAIAcgBEEnIARrQQdxQQAgBEEna0EHcRtqQS9rIgAgACAHQRBqSRsiAkEbNgIEIAJBrJ8BKQIANwIQIAJBpJ8BKQIANwIIQayfASACQQhqNgIAQaifASAFNgIAQaSfASABNgIAQbCfAUEANgIAIAJBGGohAANAIABBBzYCBCAAQQhqIQEgAEEEaiEAIAEgBEkNAAsgAiAHRg0DIAIgAigCBEF+cTYCBCAHIAIgB2siBEEBcjYCBCACIAQ2AgAgBEH/AU0EQCAEQQN2IgBBA3RBjJwBaiECAn9B5JsBKAIAIgFBASAAdCIAcUUEQEHkmwEgACABcjYCACACDAELIAIoAggLIQAgAiAHNgIIIAAgBzYCDCAHIAI2AgwgByAANgIIDAQLQR8hACAHQgA3AhAgBEH///8HTQRAIARBCHYiACAAQYD+P2pBEHZBCHEiAnQiACAAQYDgH2pBEHZBBHEiAXQiACAAQYCAD2pBEHZBAnEiAHRBD3YgASACciAAcmsiAEEBdCAEIABBFWp2QQFxckEcaiEACyAHIAA2AhwgAEECdEGUngFqIQMCQEHomwEoAgAiAkEBIAB0IgFxRQRAQeibASABIAJyNgIAIAMgBzYCACAHIAM2AhgMAQsgBEEAQRkgAEEBdmsgAEEfRht0IQAgAygCACEBA0AgASICKAIEQXhxIARGDQQgAEEddiEBIABBAXQhACACIAFBBHFqIgMoAhAiAQ0ACyADIAc2AhAgByACNgIYCyAHIAc2AgwgByAHNgIIDAMLIAMoAggiACAGNgIMIAMgBjYCCCAGQQA2AhggBiADNgIMIAYgADYCCAsgCUEIaiEADAULIAIoAggiACAHNgIMIAIgBzYCCCAHQQA2AhggByACNgIMIAcgADYCCAtB8JsBKAIAIgAgCE0NAEHwmwEgACAIayIBNgIAQfybAUH8mwEoAgAiAiAIaiIANgIAIAAgAUEBcjYCBCACIAhBA3I2AgQgAkEIaiEADAMLQbSbAUEwNgIAQQAhAAwCCwJAIAVFDQACQCAEKAIcIgJBAnRBlJ4BaiIAKAIAIARGBEAgACABNgIAIAENAUHomwEgCUF+IAJ3cSIJNgIADAILIAVBEEEUIAUoAhAgBEYbaiABNgIAIAFFDQELIAEgBTYCGCAEKAIQIgAEQCABIAA2AhAgACABNgIYCyAEKAIUIgBFDQAgASAANgIUIAAgATYCGAsCQCADQQ9NBEAgBCADIAhqIgBBA3I2AgQgACAEaiIAIAAoAgRBAXI2AgQMAQsgBCAIQQNyNgIEIAYgA0EBcjYCBCADIAZqIAM2AgAgA0H/AU0EQCADQQN2IgBBA3RBjJwBaiECAn9B5JsBKAIAIgFBASAAdCIAcUUEQEHkmwEgACABcjYCACACDAELIAIoAggLIQAgAiAGNgIIIAAgBjYCDCAGIAI2AgwgBiAANgIIDAELQR8hACADQf///wdNBEAgA0EIdiIAIABBgP4/akEQdkEIcSICdCIAIABBgOAfakEQdkEEcSIBdCIAIABBgIAPakEQdkECcSIAdEEPdiABIAJyIAByayIAQQF0IAMgAEEVanZBAXFyQRxqIQALIAYgADYCHCAGQgA3AhAgAEECdEGUngFqIQICQAJAIAlBASAAdCIBcUUEQEHomwEgASAJcjYCACACIAY2AgAgBiACNgIYDAELIANBAEEZIABBAXZrIABBH0YbdCEAIAIoAgAhCANAIAgiASgCBEF4cSADRg0CIABBHXYhAiAAQQF0IQAgASACQQRxaiICKAIQIggNAAsgAiAGNgIQIAYgATYCGAsgBiAGNgIMIAYgBjYCCAwBCyABKAIIIgAgBjYCDCABIAY2AgggBkEANgIYIAYgATYCDCAGIAA2AggLIARBCGohAAwBCwJAIAtFDQACQCABKAIcIgJBAnRBlJ4BaiIAKAIAIAFGBEAgACAENgIAIAQNAUHomwEgBkF+IAJ3cTYCAAwCCyALQRBBFCALKAIQIAFGG2ogBDYCACAERQ0BCyAEIAs2AhggASgCECIABEAgBCAANgIQIAAgBDYCGAsgASgCFCIARQ0AIAQgADYCFCAAIAQ2AhgLAkAgA0EPTQRAIAEgAyAIaiIAQQNyNgIEIAAgAWoiACAAKAIEQQFyNgIEDAELIAEgCEEDcjYCBCAJIANBAXI2AgQgAyAJaiADNgIAIAoEQCAKQQN2IgBBA3RBjJwBaiEEQfibASgCACECAn9BASAAdCIAIAVxRQRAQeSbASAAIAVyNgIAIAQMAQsgBCgCCAshACAEIAI2AgggACACNgIMIAIgBDYCDCACIAA2AggLQfibASAJNgIAQeybASADNgIACyABQQhqIQALIAxBEGokACAAC4MEAQN/IAJBgARPBEAgACABIAIQCxogAA8LIAAgAmohAwJAIAAgAXNBA3FFBEACQCAAQQNxRQRAIAAhAgwBCyACQQFIBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICQQNxRQ0BIAIgA0kNAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAvBGAECfyMAQRBrIgQkACAEIAA2AgwgBCABNgIIIAQgAjYCBCAEKAIMIQAgBCgCCCECIAQoAgQhAyMAQSBrIgEkACABIAA2AhggASACNgIUIAEgAzYCEAJAIAEoAhRFBEAgAUEANgIcDAELIAFBATYCDCABLQAMBEAgASgCFCECIAEoAhAhAyMAQSBrIgAgASgCGDYCHCAAIAI2AhggACADNgIUIAAgACgCHDYCECAAIAAoAhBBf3M2AhADQCAAKAIUBH8gACgCGEEDcUEARwVBAAtBAXEEQCAAKAIQIQIgACAAKAIYIgNBAWo2AhggACADLQAAIAJzQf8BcUECdEGgGWooAgAgACgCEEEIdnM2AhAgACAAKAIUQQFrNgIUDAELCyAAIAAoAhg2AgwDQCAAKAIUQSBPBEAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIUQSBrNgIUDAELCwNAIAAoAhRBBE8EQCAAIAAoAgwiAkEEajYCDCAAIAIoAgAgACgCEHM2AhAgACAAKAIQQRh2QQJ0QaAZaigCACAAKAIQQRB2Qf8BcUECdEGgIWooAgAgACgCEEH/AXFBAnRBoDFqKAIAIAAoAhBBCHZB/wFxQQJ0QaApaigCAHNzczYCECAAIAAoAhRBBGs2AhQMAQsLIAAgACgCDDYCGCAAKAIUBEADQCAAKAIQIQIgACAAKAIYIgNBAWo2AhggACADLQAAIAJzQf8BcUECdEGgGWooAgAgACgCEEEIdnM2AhAgACAAKAIUQQFrIgI2AhQgAg0ACwsgACAAKAIQQX9zNgIQIAEgACgCEDYCHAwBCyABKAIUIQIgASgCECEDIwBBIGsiACABKAIYNgIcIAAgAjYCGCAAIAM2AhQgACAAKAIcQQh2QYD+A3EgACgCHEEYdmogACgCHEGA/gNxQQh0aiAAKAIcQf8BcUEYdGo2AhAgACAAKAIQQX9zNgIQA0AgACgCFAR/IAAoAhhBA3FBAEcFQQALQQFxBEAgACgCEEEYdiECIAAgACgCGCIDQQFqNgIYIAAgAy0AACACc0ECdEGgOWooAgAgACgCEEEIdHM2AhAgACAAKAIUQQFrNgIUDAELCyAAIAAoAhg2AgwDQCAAKAIUQSBPBEAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIUQSBrNgIUDAELCwNAIAAoAhRBBE8EQCAAIAAoAgwiAkEEajYCDCAAIAIoAgAgACgCEHM2AhAgACAAKAIQQRh2QQJ0QaDRAGooAgAgACgCEEEQdkH/AXFBAnRBoMkAaigCACAAKAIQQf8BcUECdEGgOWooAgAgACgCEEEIdkH/AXFBAnRBoMEAaigCAHNzczYCECAAIAAoAhRBBGs2AhQMAQsLIAAgACgCDDYCGCAAKAIUBEADQCAAKAIQQRh2IQIgACAAKAIYIgNBAWo2AhggACADLQAAIAJzQQJ0QaA5aigCACAAKAIQQQh0czYCECAAIAAoAhRBAWsiAjYCFCACDQALCyAAIAAoAhBBf3M2AhAgASAAKAIQQQh2QYD+A3EgACgCEEEYdmogACgCEEGA/gNxQQh0aiAAKAIQQf8BcUEYdGo2AhwLIAEoAhwhACABQSBqJAAgBEEQaiQAIAAL7AIBAn8jAEEQayIBJAAgASAANgIMAkAgASgCDEUNACABKAIMKAIwBEAgASgCDCIAIAAoAjBBAWs2AjALIAEoAgwoAjANACABKAIMKAIgBEAgASgCDEEBNgIgIAEoAgwQLxoLIAEoAgwoAiRBAUYEQCABKAIMEGILAkAgASgCDCgCLEUNACABKAIMLQAoQQFxDQAgASgCDCECIwBBEGsiACABKAIMKAIsNgIMIAAgAjYCCCAAQQA2AgQDQCAAKAIEIAAoAgwoAkRJBEAgACgCDCgCTCAAKAIEQQJ0aigCACAAKAIIRgRAIAAoAgwoAkwgACgCBEECdGogACgCDCgCTCAAKAIMKAJEQQFrQQJ0aigCADYCACAAKAIMIgAgACgCREEBazYCRAUgACAAKAIEQQFqNgIEDAILCwsLIAEoAgxBAEIAQQUQIBogASgCDCgCAARAIAEoAgwoAgAQGwsgASgCDBAVCyABQRBqJAALnwIBAn8jAEEQayIBJAAgASAANgIMIAEgASgCDCgCHDYCBCABKAIEIQIjAEEQayIAJAAgACACNgIMIAAoAgwQvAEgAEEQaiQAIAEgASgCBCgCFDYCCCABKAIIIAEoAgwoAhBLBEAgASABKAIMKAIQNgIICwJAIAEoAghFDQAgASgCDCgCDCABKAIEKAIQIAEoAggQGRogASgCDCIAIAEoAgggACgCDGo2AgwgASgCBCIAIAEoAgggACgCEGo2AhAgASgCDCIAIAEoAgggACgCFGo2AhQgASgCDCIAIAAoAhAgASgCCGs2AhAgASgCBCIAIAAoAhQgASgCCGs2AhQgASgCBCgCFA0AIAEoAgQgASgCBCgCCDYCEAsgAUEQaiQAC2ABAX8jAEEQayIBJAAgASAANgIIIAEgASgCCEICEB42AgQCQCABKAIERQRAIAFBADsBDgwBCyABIAEoAgQtAAAgASgCBC0AAUEIdGo7AQ4LIAEvAQ4hACABQRBqJAAgAAvpAQEBfyMAQSBrIgIkACACIAA2AhwgAiABNwMQIAIpAxAhASMAQSBrIgAgAigCHDYCGCAAIAE3AxACQAJAAkAgACgCGC0AAEEBcUUNACAAKQMQIAAoAhgpAxAgACkDEHxWDQAgACgCGCkDCCAAKAIYKQMQIAApAxB8Wg0BCyAAKAIYQQA6AAAgAEEANgIcDAELIAAgACgCGCgCBCAAKAIYKQMQp2o2AgwgACAAKAIMNgIcCyACIAAoAhw2AgwgAigCDARAIAIoAhwiACACKQMQIAApAxB8NwMQCyACKAIMIQAgAkEgaiQAIAALbwEBfyMAQRBrIgIkACACIAA2AgggAiABOwEGIAIgAigCCEICEB42AgACQCACKAIARQRAIAJBfzYCDAwBCyACKAIAIAIvAQY6AAAgAigCACACLwEGQQh2OgABIAJBADYCDAsgAigCDBogAkEQaiQAC7YCAQF/IwBBMGsiBCQAIAQgADYCJCAEIAE2AiAgBCACNwMYIAQgAzYCFAJAIAQoAiQpAxhCASAEKAIUrYaDUARAIAQoAiRBDGpBHEEAEBQgBEJ/NwMoDAELAkAgBCgCJCgCAEUEQCAEIAQoAiQoAgggBCgCICAEKQMYIAQoAhQgBCgCJCgCBBEOADcDCAwBCyAEIAQoAiQoAgAgBCgCJCgCCCAEKAIgIAQpAxggBCgCFCAEKAIkKAIEEQoANwMICyAEKQMIQgBTBEACQCAEKAIUQQRGDQAgBCgCFEEORg0AAkAgBCgCJCAEQghBBBAgQgBTBEAgBCgCJEEMakEUQQAQFAwBCyAEKAIkQQxqIAQoAgAgBCgCBBAUCwsLIAQgBCkDCDcDKAsgBCkDKCECIARBMGokACACC48BAQF/IwBBEGsiAiQAIAIgADYCCCACIAE2AgQgAiACKAIIQgQQHjYCAAJAIAIoAgBFBEAgAkF/NgIMDAELIAIoAgAgAigCBDoAACACKAIAIAIoAgRBCHY6AAEgAigCACACKAIEQRB2OgACIAIoAgAgAigCBEEYdjoAAyACQQA2AgwLIAIoAgwaIAJBEGokAAsXACAALQAAQSBxRQRAIAEgAiAAEHEaCwtQAQF/IwBBEGsiASQAIAEgADYCDANAIAEoAgwEQCABIAEoAgwoAgA2AgggASgCDCgCDBAVIAEoAgwQFSABIAEoAgg2AgwMAQsLIAFBEGokAAs+AQF/IwBBEGsiASQAIAEgADYCDCABKAIMBEAgASgCDCgCABAVIAEoAgwoAgwQFSABKAIMEBULIAFBEGokAAt9AQF/IwBBEGsiASQAIAEgADYCDCABKAIMBEAgAUIANwMAA0AgASkDACABKAIMKQMIWkUEQCABKAIMKAIAIAEpAwCnQQR0ahB3IAEgASkDAEIBfDcDAAwBCwsgASgCDCgCABAVIAEoAgwoAigQJCABKAIMEBULIAFBEGokAAtuAQF/IwBBgAJrIgUkAAJAIARBgMAEcQ0AIAIgA0wNACAFIAFB/wFxIAIgA2siAkGAAiACQYACSSIBGxAzIAFFBEADQCAAIAVBgAIQIiACQYACayICQf8BSw0ACwsgACAFIAIQIgsgBUGAAmokAAvRAQEBfyMAQTBrIgMkACADIAA2AiggAyABNwMgIAMgAjYCHAJAIAMoAigtAChBAXEEQCADQX82AiwMAQsCQCADKAIoKAIgBEAgAygCHEUNASADKAIcQQFGDQEgAygCHEECRg0BCyADKAIoQQxqQRJBABAUIANBfzYCLAwBCyADIAMpAyA3AwggAyADKAIcNgIQIAMoAiggA0EIakIQQQYQIEIAUwRAIANBfzYCLAwBCyADKAIoQQA6ADQgA0EANgIsCyADKAIsIQAgA0EwaiQAIAALmBcBAn8jAEEwayIEJAAgBCAANgIsIAQgATYCKCAEIAI2AiQgBCADNgIgIARBADYCFAJAIAQoAiwoAoQBQQBKBEAgBCgCLCgCACgCLEECRgRAIwBBEGsiACAEKAIsNgIIIABB/4D/n382AgQgAEEANgIAAkADQCAAKAIAQR9MBEACQCAAKAIEQQFxRQ0AIAAoAghBlAFqIAAoAgBBAnRqLwEARQ0AIABBADYCDAwDCyAAIAAoAgBBAWo2AgAgACAAKAIEQQF2NgIEDAELCwJAAkAgACgCCC8BuAENACAAKAIILwG8AQ0AIAAoAggvAcgBRQ0BCyAAQQE2AgwMAQsgAEEgNgIAA0AgACgCAEGAAkgEQCAAKAIIQZQBaiAAKAIAQQJ0ai8BAARAIABBATYCDAwDBSAAIAAoAgBBAWo2AgAMAgsACwsgAEEANgIMCyAAKAIMIQAgBCgCLCgCACAANgIsCyAEKAIsIAQoAixBmBZqEHogBCgCLCAEKAIsQaQWahB6IAQoAiwhASMAQRBrIgAkACAAIAE2AgwgACgCDCAAKAIMQZQBaiAAKAIMKAKcFhC6ASAAKAIMIAAoAgxBiBNqIAAoAgwoAqgWELoBIAAoAgwgACgCDEGwFmoQeiAAQRI2AggDQAJAIAAoAghBA0gNACAAKAIMQfwUaiAAKAIILQDgbEECdGovAQINACAAIAAoAghBAWs2AggMAQsLIAAoAgwiASABKAKoLSAAKAIIQQNsQRFqajYCqC0gACgCCCEBIABBEGokACAEIAE2AhQgBCAEKAIsKAKoLUEKakEDdjYCHCAEIAQoAiwoAqwtQQpqQQN2NgIYIAQoAhggBCgCHE0EQCAEIAQoAhg2AhwLDAELIAQgBCgCJEEFaiIANgIYIAQgADYCHAsCQAJAIAQoAhwgBCgCJEEEakkNACAEKAIoRQ0AIAQoAiwgBCgCKCAEKAIkIAQoAiAQXQwBCwJAAkAgBCgCLCgCiAFBBEcEQCAEKAIYIAQoAhxHDQELIARBAzYCEAJAIAQoAiwoArwtQRAgBCgCEGtKBEAgBCAEKAIgQQJqNgIMIAQoAiwiACAALwG4LSAEKAIMQf//A3EgBCgCLCgCvC10cjsBuC0gBCgCLC8BuC1B/wFxIQEgBCgCLCgCCCECIAQoAiwiAygCFCEAIAMgAEEBajYCFCAAIAJqIAE6AAAgBCgCLC8BuC1BCHYhASAEKAIsKAIIIQIgBCgCLCIDKAIUIQAgAyAAQQFqNgIUIAAgAmogAToAACAEKAIsIAQoAgxB//8DcUEQIAQoAiwoArwta3U7AbgtIAQoAiwiACAAKAK8LSAEKAIQQRBrajYCvC0MAQsgBCgCLCIAIAAvAbgtIAQoAiBBAmpB//8DcSAEKAIsKAK8LXRyOwG4LSAEKAIsIgAgBCgCECAAKAK8LWo2ArwtCyAEKAIsQZDgAEGQ6QAQuwEMAQsgBEEDNgIIAkAgBCgCLCgCvC1BECAEKAIIa0oEQCAEIAQoAiBBBGo2AgQgBCgCLCIAIAAvAbgtIAQoAgRB//8DcSAEKAIsKAK8LXRyOwG4LSAEKAIsLwG4LUH/AXEhASAEKAIsKAIIIQIgBCgCLCIDKAIUIQAgAyAAQQFqNgIUIAAgAmogAToAACAEKAIsLwG4LUEIdiEBIAQoAiwoAgghAiAEKAIsIgMoAhQhACADIABBAWo2AhQgACACaiABOgAAIAQoAiwgBCgCBEH//wNxQRAgBCgCLCgCvC1rdTsBuC0gBCgCLCIAIAAoArwtIAQoAghBEGtqNgK8LQwBCyAEKAIsIgAgAC8BuC0gBCgCIEEEakH//wNxIAQoAiwoArwtdHI7AbgtIAQoAiwiACAEKAIIIAAoArwtajYCvC0LIAQoAiwhASAEKAIsKAKcFkEBaiECIAQoAiwoAqgWQQFqIQMgBCgCFEEBaiEFIwBBQGoiACQAIAAgATYCPCAAIAI2AjggACADNgI0IAAgBTYCMCAAQQU2AigCQCAAKAI8KAK8LUEQIAAoAihrSgRAIAAgACgCOEGBAms2AiQgACgCPCIBIAEvAbgtIAAoAiRB//8DcSAAKAI8KAK8LXRyOwG4LSAAKAI8LwG4LUH/AXEhAiAAKAI8KAIIIQMgACgCPCIFKAIUIQEgBSABQQFqNgIUIAEgA2ogAjoAACAAKAI8LwG4LUEIdiECIAAoAjwoAgghAyAAKAI8IgUoAhQhASAFIAFBAWo2AhQgASADaiACOgAAIAAoAjwgACgCJEH//wNxQRAgACgCPCgCvC1rdTsBuC0gACgCPCIBIAEoArwtIAAoAihBEGtqNgK8LQwBCyAAKAI8IgEgAS8BuC0gACgCOEGBAmtB//8DcSAAKAI8KAK8LXRyOwG4LSAAKAI8IgEgACgCKCABKAK8LWo2ArwtCyAAQQU2AiACQCAAKAI8KAK8LUEQIAAoAiBrSgRAIAAgACgCNEEBazYCHCAAKAI8IgEgAS8BuC0gACgCHEH//wNxIAAoAjwoArwtdHI7AbgtIAAoAjwvAbgtQf8BcSECIAAoAjwoAgghAyAAKAI8IgUoAhQhASAFIAFBAWo2AhQgASADaiACOgAAIAAoAjwvAbgtQQh2IQIgACgCPCgCCCEDIAAoAjwiBSgCFCEBIAUgAUEBajYCFCABIANqIAI6AAAgACgCPCAAKAIcQf//A3FBECAAKAI8KAK8LWt1OwG4LSAAKAI8IgEgASgCvC0gACgCIEEQa2o2ArwtDAELIAAoAjwiASABLwG4LSAAKAI0QQFrQf//A3EgACgCPCgCvC10cjsBuC0gACgCPCIBIAAoAiAgASgCvC1qNgK8LQsgAEEENgIYAkAgACgCPCgCvC1BECAAKAIYa0oEQCAAIAAoAjBBBGs2AhQgACgCPCIBIAEvAbgtIAAoAhRB//8DcSAAKAI8KAK8LXRyOwG4LSAAKAI8LwG4LUH/AXEhAiAAKAI8KAIIIQMgACgCPCIFKAIUIQEgBSABQQFqNgIUIAEgA2ogAjoAACAAKAI8LwG4LUEIdiECIAAoAjwoAgghAyAAKAI8IgUoAhQhASAFIAFBAWo2AhQgASADaiACOgAAIAAoAjwgACgCFEH//wNxQRAgACgCPCgCvC1rdTsBuC0gACgCPCIBIAEoArwtIAAoAhhBEGtqNgK8LQwBCyAAKAI8IgEgAS8BuC0gACgCMEEEa0H//wNxIAAoAjwoArwtdHI7AbgtIAAoAjwiASAAKAIYIAEoArwtajYCvC0LIABBADYCLANAIAAoAiwgACgCMEgEQCAAQQM2AhACQCAAKAI8KAK8LUEQIAAoAhBrSgRAIAAgACgCPEH8FGogACgCLC0A4GxBAnRqLwECNgIMIAAoAjwiASABLwG4LSAAKAIMQf//A3EgACgCPCgCvC10cjsBuC0gACgCPC8BuC1B/wFxIQIgACgCPCgCCCEDIAAoAjwiBSgCFCEBIAUgAUEBajYCFCABIANqIAI6AAAgACgCPC8BuC1BCHYhAiAAKAI8KAIIIQMgACgCPCIFKAIUIQEgBSABQQFqNgIUIAEgA2ogAjoAACAAKAI8IAAoAgxB//8DcUEQIAAoAjwoArwta3U7AbgtIAAoAjwiASABKAK8LSAAKAIQQRBrajYCvC0MAQsgACgCPCIBIAEvAbgtIAAoAjxB/BRqIAAoAiwtAOBsQQJ0ai8BAiAAKAI8KAK8LXRyOwG4LSAAKAI8IgEgACgCECABKAK8LWo2ArwtCyAAIAAoAixBAWo2AiwMAQsLIAAoAjwgACgCPEGUAWogACgCOEEBaxC5ASAAKAI8IAAoAjxBiBNqIAAoAjRBAWsQuQEgAEFAayQAIAQoAiwgBCgCLEGUAWogBCgCLEGIE2oQuwELCyAEKAIsEL4BIAQoAiAEQCAEKAIsEL0BCyAEQTBqJAAL1AEBAX8jAEEgayICJAAgAiAANgIYIAIgATcDECACIAIoAhhFOgAPAkAgAigCGEUEQCACIAIpAxCnEBgiADYCGCAARQRAIAJBADYCHAwCCwsgAkEYEBgiADYCCCAARQRAIAItAA9BAXEEQCACKAIYEBULIAJBADYCHAwBCyACKAIIQQE6AAAgAigCCCACKAIYNgIEIAIoAgggAikDEDcDCCACKAIIQgA3AxAgAigCCCACLQAPQQFxOgABIAIgAigCCDYCHAsgAigCHCEAIAJBIGokACAAC3gBAX8jAEEQayIBJAAgASAANgIIIAEgASgCCEIEEB42AgQCQCABKAIERQRAIAFBADYCDAwBCyABIAEoAgQtAAAgASgCBC0AASABKAIELQACIAEoAgQtAANBCHRqQQh0akEIdGo2AgwLIAEoAgwhACABQRBqJAAgAAuHAwEBfyMAQTBrIgMkACADIAA2AiQgAyABNgIgIAMgAjcDGAJAIAMoAiQtAChBAXEEQCADQn83AygMAQsCQAJAIAMoAiQoAiBFDQAgAykDGEL///////////8AVg0AIAMpAxhQDQEgAygCIA0BCyADKAIkQQxqQRJBABAUIANCfzcDKAwBCyADKAIkLQA1QQFxBEAgA0J/NwMoDAELAn8jAEEQayIAIAMoAiQ2AgwgACgCDC0ANEEBcQsEQCADQgA3AygMAQsgAykDGFAEQCADQgA3AygMAQsgA0IANwMQA0AgAykDECADKQMYVARAIAMgAygCJCADKAIgIAMpAxCnaiADKQMYIAMpAxB9QQEQICICNwMIIAJCAFMEQCADKAIkQQE6ADUgAykDEFAEQCADQn83AygMBAsgAyADKQMQNwMoDAMLIAMpAwhQBEAgAygCJEEBOgA0BSADIAMpAwggAykDEHw3AxAMAgsLCyADIAMpAxA3AygLIAMpAyghAiADQTBqJAAgAgthAQF/IwBBEGsiAiAANgIIIAIgATcDAAJAIAIpAwAgAigCCCkDCFYEQCACKAIIQQA6AAAgAkF/NgIMDAELIAIoAghBAToAACACKAIIIAIpAwA3AxAgAkEANgIMCyACKAIMC+8BAQF/IwBBIGsiAiQAIAIgADYCGCACIAE3AxAgAiACKAIYQggQHjYCDAJAIAIoAgxFBEAgAkF/NgIcDAELIAIoAgwgAikDEEL/AYM8AAAgAigCDCACKQMQQgiIQv8BgzwAASACKAIMIAIpAxBCEIhC/wGDPAACIAIoAgwgAikDEEIYiEL/AYM8AAMgAigCDCACKQMQQiCIQv8BgzwABCACKAIMIAIpAxBCKIhC/wGDPAAFIAIoAgwgAikDEEIwiEL/AYM8AAYgAigCDCACKQMQQjiIQv8BgzwAByACQQA2AhwLIAIoAhwaIAJBIGokAAt/AQN/IAAhAQJAIABBA3EEQANAIAEtAABFDQIgAUEBaiIBQQNxDQALCwNAIAEiAkEEaiEBIAIoAgAiA0F/cyADQYGChAhrcUGAgYKEeHFFDQALIANB/wFxRQRAIAIgAGsPCwNAIAItAAEhAyACQQFqIgEhAiADDQALCyABIABrC6YBAQF/IwBBEGsiASQAIAEgADYCCAJAIAEoAggoAiBFBEAgASgCCEEMakESQQAQFCABQX82AgwMAQsgASgCCCIAIAAoAiBBAWs2AiAgASgCCCgCIEUEQCABKAIIQQBCAEECECAaIAEoAggoAgAEQCABKAIIKAIAEC9BAEgEQCABKAIIQQxqQRRBABAUCwsLIAFBADYCDAsgASgCDCEAIAFBEGokACAACzYBAX8jAEEQayIBIAA2AgwCfiABKAIMLQAAQQFxBEAgASgCDCkDCCABKAIMKQMQfQwBC0IACwuyAQIBfwF+IwBBEGsiASQAIAEgADYCBCABIAEoAgRCCBAeNgIAAkAgASgCAEUEQCABQgA3AwgMAQsgASABKAIALQAArSABKAIALQAHrUI4hiABKAIALQAGrUIwhnwgASgCAC0ABa1CKIZ8IAEoAgAtAAStQiCGfCABKAIALQADrUIYhnwgASgCAC0AAq1CEIZ8IAEoAgAtAAGtQgiGfHw3AwgLIAEpAwghAiABQRBqJAAgAgvcAQEBfyMAQRBrIgEkACABIAA2AgwgASgCDARAIAEoAgwoAigEQCABKAIMKAIoQQA2AiggASgCDCgCKEIANwMgIAEoAgwCfiABKAIMKQMYIAEoAgwpAyBWBEAgASgCDCkDGAwBCyABKAIMKQMgCzcDGAsgASABKAIMKQMYNwMAA0AgASkDACABKAIMKQMIWkUEQCABKAIMKAIAIAEpAwCnQQR0aigCABAVIAEgASkDAEIBfDcDAAwBCwsgASgCDCgCABAVIAEoAgwoAgQQFSABKAIMEBULIAFBEGokAAvwAgICfwF+AkAgAkUNACAAIAJqIgNBAWsgAToAACAAIAE6AAAgAkEDSQ0AIANBAmsgAToAACAAIAE6AAEgA0EDayABOgAAIAAgAToAAiACQQdJDQAgA0EEayABOgAAIAAgAToAAyACQQlJDQAgAEEAIABrQQNxIgRqIgMgAUH/AXFBgYKECGwiADYCACADIAIgBGtBfHEiAmoiAUEEayAANgIAIAJBCUkNACADIAA2AgggAyAANgIEIAFBCGsgADYCACABQQxrIAA2AgAgAkEZSQ0AIAMgADYCGCADIAA2AhQgAyAANgIQIAMgADYCDCABQRBrIAA2AgAgAUEUayAANgIAIAFBGGsgADYCACABQRxrIAA2AgAgAiADQQRxQRhyIgFrIgJBIEkNACAArUKBgICAEH4hBSABIANqIQEDQCABIAU3AxggASAFNwMQIAEgBTcDCCABIAU3AwAgAUEgaiEBIAJBIGsiAkEfSw0ACwsLawEBfyMAQSBrIgIgADYCHCACQgEgAigCHK2GNwMQIAJBDGogATYCAANAIAIgAigCDCIAQQRqNgIMIAIgACgCADYCCCACKAIIQQBIRQRAIAIgAikDEEIBIAIoAgithoQ3AxAMAQsLIAIpAxALYAIBfwF+IwBBEGsiASQAIAEgADYCBAJAIAEoAgQoAiRBAUcEQCABKAIEQQxqQRJBABAUIAFCfzcDCAwBCyABIAEoAgRBAEIAQQ0QIDcDCAsgASkDCCECIAFBEGokACACC6UCAQJ/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNwMIIAMoAhgoAgAhASADKAIUIQQgAykDCCECIwBBIGsiACQAIAAgATYCFCAAIAQ2AhAgACACNwMIAkACQCAAKAIUKAIkQQFGBEAgACkDCEL///////////8AWA0BCyAAKAIUQQxqQRJBABAUIABCfzcDGAwBCyAAIAAoAhQgACgCECAAKQMIQQsQIDcDGAsgACkDGCECIABBIGokACADIAI3AwACQCACQgBTBEAgAygCGEEIaiADKAIYKAIAEBcgA0F/NgIcDAELIAMpAwAgAykDCFIEQCADKAIYQQhqQQZBGxAUIANBfzYCHAwBCyADQQA2AhwLIAMoAhwhACADQSBqJAAgAAsxAQF/IwBBEGsiASQAIAEgADYCDCABKAIMBEAgASgCDBBSIAEoAgwQFQsgAUEQaiQACy8BAX8jAEEQayIBJAAgASAANgIMIAEoAgwoAggQFSABKAIMQQA2AgggAUEQaiQAC80BAQF/IwBBEGsiAiQAIAIgADYCCCACIAE2AgQCQCACKAIILQAoQQFxBEAgAkF/NgIMDAELIAIoAgRFBEAgAigCCEEMakESQQAQFCACQX82AgwMAQsgAigCBBA7IAIoAggoAgAEQCACKAIIKAIAIAIoAgQQOUEASARAIAIoAghBDGogAigCCCgCABAXIAJBfzYCDAwCCwsgAigCCCACKAIEQjhBAxAgQgBTBEAgAkF/NgIMDAELIAJBADYCDAsgAigCDCEAIAJBEGokACAAC98EAQF/IwBBIGsiAiAANgIYIAIgATYCFAJAIAIoAhhFBEAgAkEBNgIcDAELIAIgAigCGCgCADYCDAJAIAIoAhgoAggEQCACIAIoAhgoAgg2AhAMAQsgAkEBNgIQIAJBADYCCANAAkAgAigCCCACKAIYLwEETw0AAkAgAigCDCACKAIIai0AAEEfSwRAIAIoAgwgAigCCGotAABBgAFJDQELIAIoAgwgAigCCGotAABBDUYNACACKAIMIAIoAghqLQAAQQpGDQAgAigCDCACKAIIai0AAEEJRgRADAELIAJBAzYCEAJAIAIoAgwgAigCCGotAABB4AFxQcABRgRAIAJBATYCAAwBCwJAIAIoAgwgAigCCGotAABB8AFxQeABRgRAIAJBAjYCAAwBCwJAIAIoAgwgAigCCGotAABB+AFxQfABRgRAIAJBAzYCAAwBCyACQQQ2AhAMBAsLCyACKAIYLwEEIAIoAgggAigCAGpNBEAgAkEENgIQDAILIAJBATYCBANAIAIoAgQgAigCAE0EQCACKAIMIAIoAgggAigCBGpqLQAAQcABcUGAAUcEQCACQQQ2AhAMBgUgAiACKAIEQQFqNgIEDAILAAsLIAIgAigCACACKAIIajYCCAsgAiACKAIIQQFqNgIIDAELCwsgAigCGCACKAIQNgIIIAIoAhQEQAJAIAIoAhRBAkcNACACKAIQQQNHDQAgAkECNgIQIAIoAhhBAjYCCAsCQCACKAIUIAIoAhBGDQAgAigCEEEBRg0AIAJBBTYCHAwCCwsgAiACKAIQNgIcCyACKAIcC2oBAX8jAEEQayIBIAA2AgwgASgCDEIANwMAIAEoAgxBADYCCCABKAIMQn83AxAgASgCDEEANgIsIAEoAgxBfzYCKCABKAIMQgA3AxggASgCDEIANwMgIAEoAgxBADsBMCABKAIMQQA7ATILjQUBA38jAEEQayIBJAAgASAANgIMIAEoAgwEQCABKAIMKAIABEAgASgCDCgCABAvGiABKAIMKAIAEBsLIAEoAgwoAhwQFSABKAIMKAIgECQgASgCDCgCJBAkIAEoAgwoAlAhAiMAQRBrIgAkACAAIAI2AgwgACgCDARAIAAoAgwoAhAEQCAAQQA2AggDQCAAKAIIIAAoAgwoAgBJBEAgACgCDCgCECAAKAIIQQJ0aigCAARAIAAoAgwoAhAgACgCCEECdGooAgAhAyMAQRBrIgIkACACIAM2AgwDQCACKAIMBEAgAiACKAIMKAIYNgIIIAIoAgwQFSACIAIoAgg2AgwMAQsLIAJBEGokAAsgACAAKAIIQQFqNgIIDAELCyAAKAIMKAIQEBULIAAoAgwQFQsgAEEQaiQAIAEoAgwoAkAEQCABQgA3AwADQCABKQMAIAEoAgwpAzBUBEAgASgCDCgCQCABKQMAp0EEdGoQdyABIAEpAwBCAXw3AwAMAQsLIAEoAgwoAkAQFQsgAUIANwMAA0AgASkDACABKAIMKAJErVQEQCABKAIMKAJMIAEpAwCnQQJ0aigCACECIwBBEGsiACQAIAAgAjYCDCAAKAIMQQE6ACgCfyMAQRBrIgIgACgCDEEMajYCDCACKAIMKAIARQsEQCAAKAIMQQxqQQhBABAUCyAAQRBqJAAgASABKQMAQgF8NwMADAELCyABKAIMKAJMEBUgASgCDCgCVCECIwBBEGsiACQAIAAgAjYCDCAAKAIMBEAgACgCDCgCCARAIAAoAgwoAgwgACgCDCgCCBECAAsgACgCDBAVCyAAQRBqJAAgASgCDEEIahA4IAEoAgwQFQsgAUEQaiQAC48OAQF/IwBBEGsiAyQAIAMgADYCDCADIAE2AgggAyACNgIEIAMoAgghASADKAIEIQIjAEEgayIAIAMoAgw2AhggACABNgIUIAAgAjYCECAAIAAoAhhBEHY2AgwgACAAKAIYQf//A3E2AhgCQCAAKAIQQQFGBEAgACAAKAIULQAAIAAoAhhqNgIYIAAoAhhB8f8DTwRAIAAgACgCGEHx/wNrNgIYCyAAIAAoAhggACgCDGo2AgwgACgCDEHx/wNPBEAgACAAKAIMQfH/A2s2AgwLIAAgACgCGCAAKAIMQRB0cjYCHAwBCyAAKAIURQRAIABBATYCHAwBCyAAKAIQQRBJBEADQCAAIAAoAhAiAUEBazYCECABBEAgACAAKAIUIgFBAWo2AhQgACABLQAAIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDAwBCwsgACgCGEHx/wNPBEAgACAAKAIYQfH/A2s2AhgLIAAgACgCDEHx/wNwNgIMIAAgACgCGCAAKAIMQRB0cjYCHAwBCwNAIAAoAhBBsCtPBEAgACAAKAIQQbArazYCECAAQdsCNgIIA0AgACAAKAIULQAAIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAEgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyAB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AG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcAUEsGBgBQSwUGAFBLAwQAUEsBAgAAAAAAAFIFAADZBwAArAgAAJEIAACCBQAApAUAAI0FAADFBQAAbwgAADQHAADpBAAAJAcAAAMHAACvBQAA4QYAAMsIAAA3CAAAQQcAAFoEAAC5BgAAcwUAAEEEAABXBwAAWAgAABcIAACnBgAA4ggAAPcIAAD/BwAAywYAAGgFAADBBwAAIABBmBQLEQEAAAABAAAAAQAAAAEAAAABAEG8FAsJAQAAAAEAAAACAEHoFAsBAQBBiBULAQEAQaIVC6REOiY7JmUmZiZjJmAmIiDYJcsl2SVCJkAmaiZrJjwmuiXEJZUhPCC2AKcArCWoIZEhkyGSIZAhHyKUIbIlvCUgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZABlAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHUAdgB3AHgAeQB6AHsAfAB9AH4AAiPHAPwA6QDiAOQA4ADlAOcA6gDrAOgA7wDuAOwAxADFAMkA5gDGAPQA9gDyAPsA+QD/ANYA3ACiAKMApQCnIJIB4QDtAPMA+gDxANEAqgC6AL8AECOsAL0AvAChAKsAuwCRJZIlkyUCJSQlYSViJVYlVSVjJVElVyVdJVwlWyUQJRQlNCUsJRwlACU8JV4lXyVaJVQlaSVmJWAlUCVsJWclaCVkJWUlWSVYJVIlUyVrJWolGCUMJYglhCWMJZAlgCWxA98AkwPAA6MDwwO1AMQDpgOYA6kDtAMeIsYDtQMpImEisQBlImQiICMhI/cASCKwABkitwAaIn8gsgCgJaAAAAAAAJYwB3csYQ7uulEJmRnEbQeP9GpwNaVj6aOVZJ4yiNsOpLjceR7p1eCI2dKXK0y2Cb18sX4HLbjnkR2/kGQQtx3yILBqSHG5895BvoR91Noa6+TdbVG11PTHhdODVphsE8Coa2R6+WL97Mllik9cARTZbAZjYz0P+vUNCI3IIG47XhBpTORBYNVycWei0eQDPEfUBEv9hQ3Sa7UKpfqotTVsmLJC1sm720D5vKzjbNgydVzfRc8N1txZPdGrrDDZJjoA3lGAUdfIFmHQv7X0tCEjxLNWmZW6zw+lvbieuAIoCIgFX7LZDMYk6Quxh3xvLxFMaFirHWHBPS1mtpBB3HYGcdsBvCDSmCoQ1e+JhbFxH7W2BqXkv58z1LjooskHeDT5AA+OqAmWGJgO4bsNan8tPW0Il2xkkQFcY+b0UWtrYmFsHNgwZYVOAGLy7ZUGbHulARvB9AiCV8QP9cbZsGVQ6bcS6ri+i3yIufzfHd1iSS3aFfN804xlTNT7WGGyTc5RtTp0ALyj4jC71EGl30rXldg9bcTRpPv01tNq6WlD/NluNEaIZ63QuGDacy0EROUdAzNfTAqqyXwN3TxxBVCqQQInEBALvoYgDMkltWhXs4VvIAnUZrmf5GHODvneXpjJ2SkimNCwtKjXxxc9s1mBDbQuO1y9t61susAgg7jttrO/mgzitgOa0rF0OUfV6q930p0VJtsEgxbccxILY+OEO2SUPmptDahaanoLzw7knf8JkyeuAAqxngd9RJMP8NKjCIdo8gEe/sIGaV1XYvfLZ2WAcTZsGecGa252G9T+4CvTiVp62hDMSt1nb9+5+fnvvo5DvrcX1Y6wYOij1tZ+k9GhxMLYOFLy30/xZ7vRZ1e8pt0GtT9LNrJI2isN2EwbCq/2SgM2YHoEQcPvYN9V32eo745uMXm+aUaMs2HLGoNmvKDSbyU24mhSlXcMzANHC7u5FgIiLyYFVb47usUoC72yklq0KwRqs1yn/9fCMc/QtYue2Swdrt5bsMJkmybyY+yco2p1CpNtAqkGCZw/Ng7rhWcHchNXAAWCSr+VFHq44q4rsXs4G7YMm47Skg2+1eW379x8Id/bC9TS04ZC4tTx+LPdaG6D2h/NFr6BWya59uF3sG93R7cY5loIiHBqD//KOwZmXAsBEf+eZY9prmL40/9rYUXPbBZ44gqg7tIN11SDBE7CswM5YSZnp/cWYNBNR2lJ23duPkpq0a7cWtbZZgvfQPA72DdTrrypxZ673n/Pskfp/7UwHPK9vYrCusowk7NTpqO0JAU20LqTBtfNKVfeVL9n2SMuemazuEphxAIbaF2UK28qN74LtKGODMMb3wVaje8CLQAAAABBMRsZgmI2MsNTLSsExWxkRfR3fYanWlbHlkFPCIrZyEm7wtGK6O/6y9n04wxPtaxNfq61ji2Dns8cmIdREsJKECPZU9Nw9HiSQe9hVdeuLhTmtTfXtZgcloSDBVmYG4IYqQCb2/otsJrLNqldXXfmHGxs/98/QdSeDlrNoiSEleMVn4wgRrKnYXepvqbh6PHn0PPoJIPew2Wyxdqqrl1d659GRCjMa29p/XB2rmsxOe9aKiAsCQcLbTgcEvM2Rt+yB13GcVRw7TBla/T38yq7tsIxonWRHIk0oAeQ+7yfF7qNhA553qklOO+yPP9583O+SOhqfRvFQTwq3lgFT3nwRH5i6YctT8LGHFTbAYoVlEC7Do2D6COmwtk4vw3FoDhM9Lshj6eWCs6WjRMJAMxcSDHXRYti+m7KU+F3VF27uhVsoKPWP42Ilw6WkVCY194RqczH0vrh7JPL+vVc12JyHeZ5a961VECfhE9ZWBIOFhkjFQ/acDgkm0EjPadr/WXmWuZ8JQnLV2Q40E6jrpEB4p+KGCHMpzNg/bwqr+Ekre7QP7QtgxKfbLIJhqskSMnqFVPQKUZ++2h3ZeL2eT8vt0gkNnQbCR01KhIE8rxTS7ONSFJw3mV5Me9+YP7z5ue/wv3+fJHQ1T2gy8z6NoqDuweRmnhUvLE5ZaeoS5iDOwqpmCLJ+rUJiMuuEE9d718ObPRGzT/ZbYwOwnRDElrzAiNB6sFwbMGAQXfYR9c2lwbmLY7FtQClhIQbvBqKQXFbu1pomOh3Q9nZbFoeTy0VX342DJwtGyfdHAA+EgCYuVMxg6CQYq6L0VO1khbF9N1X9O/ElKfC79WW2fbpvAeuqI0ct2veMZwq7yqF7XlryqxIcNNvG134LipG4eE23magB8V/Y1ToVCJl803l87ICpMKpG2eRhDAmoJ8puK7F5Pmf3v06zPPWe/3oz7xrqYD9WrKZPgmfsn84hKuwJBws8RUHNTJGKh5zdzEHtOFwSPXQa1E2g0Z6d7JdY07X+ssP5uHSzLXM+Y2E1+BKEpavCyONtshwoJ2JQbuERl0jAwdsOBrEPxUxhQ4OKEKYT2cDqVR+wPp5VYHLYkwfxTiBXvQjmJ2nDrPclhWqGwBU5VoxT/yZYmLX2FN5zhdP4UlWfvpQlS3Xe9QczGITio0tUruWNJHoux/Q2aAG7PN+Xq3CZUdukUhsL6BTdeg2EjqpBwkjalQkCCtlPxHkeaeWpUi8j2YbkaQnKoq94LzL8qGN0Oti3v3AI+/m2b3hvBT80KcNP4OKJn6ykT+5JNBw+BXLaTtG5kJ6d/1btWtl3PRafsU3CVPudjhI97GuCbjwnxKhM8w/inL9JJMAAAAAN2rCAW7UhANZvkYC3KgJB+vCywayfI0EhRZPBbhREw6PO9EP1oWXDeHvVQxk+RoJU5PYCAotngo9R1wLcKMmHEfJ5B0ed6IfKR1gHqwLLxubYe0awt+rGPW1aRnI8jUS/5j3E6YmsRGRTHMQFFo8FSMw/hR6jrgWTeR6F+BGTTjXLI85jpLJO7n4Czo87kQ/C4SGPlI6wDxlUAI9WBdeNm99nDc2w9o1AakYNIS/VzGz1ZUw6mvTMt0BETOQ5Wskp4+pJf4x7yfJWy0mTE1iI3snoCIimeYgFfMkISi0eCof3rorRmD8KXEKPij0HHEtw3azLJrI9S6tojcvwI2acPfnWHGuWR5zmTPcchwlk3crT1F2cvEXdEWb1XV43Il+T7ZLfxYIDX0hYs98pHSAeZMeQnjKoAR6/crGe7AuvGyHRH5t3vo4b+mQ+m5shrVrW+x3agJSMWg1OPNpCH+vYj8VbWNmqythUcHpYNTXpmXjvWRkugMiZo1p4Gcgy9dIF6EVSU4fU0t5dZFK/GPeT8sJHE6St1pMpd2YTZiaxEav8AZH9k5ARcEkgkREMs1Bc1gPQCrmSUIdjItDUGjxVGcCM1U+vHVXCda3VozA+FO7qjpS4hR8UNV+vlHoOeJa31MgW4btZlmxh6RYNJHrXQP7KVxaRW9ebS+tX4AbNeG3cffg7s+x4tmlc+Ncszzma9n+5zJnuOUFDXrkOEom7w8g5O5WnqLsYfRg7eTiL+jTiO3pijar671caerwuBP9x9LR/J5sl/6pBlX/LBAa+ht62PtCxJ75da5c+EjpAPN/g8LyJj2E8BFXRvGUQQn0oyvL9fqVjffN/0/2YF142Vc3utgOifzaOeM+27z1cd6Ln7Pf0iH13eVLN9zYDGvX72ap1rbY79SBsi3VBKRi0DPOoNFqcObTXRok0hD+XsUnlJzEfiraxklAGMfMVlfC+zyVw6KC08GV6BHAqK9Ny5/Fj8rGe8nI8RELyXQHRMxDbYbNGtPAzy25As5Alq+Rd/xtkC5CK5IZKOmTnD6mlqtUZJfy6iKVxYDglPjHvJ/PrX6elhM4nKF5+p0kb7WYEwV3mUq7MZt90fOaMDWJjQdfS4xe4Q2OaYvPj+ydgIrb90KLgkkEibUjxoiIZJqDvw5YguawHoDR2tyBVMyThGOmUYU6GBeHDXLVhqDQ4qmXuiCozgRmqvlupKt8eOuuSxIprxKsb60lxq2sGIHxpy/rM6Z2VXWkQT+3pcQp+KDzQzqhqv18o52XvqLQc8S15xkGtL6nQLaJzYK3DNvNsjuxD7NiD0mxVWWLsGgi17tfSBW6BvZTuDGckbm0it68g+AcvdpeWr/tNJi+AAAAAGVnvLiLyAmq7q+1EleXYo8y8N433F9rJbk4153vKLTFik8IfWTgvW8BhwHXuL/WSt3YavIzd9/gVhBjWJ9XGVD6MKXoFJ8Q+nH4rELIwHvfrafHZ0MIcnUmb87NcH+tlRUYES37t6Q/ntAYhyfozxpCj3OirCDGsMlHegg+rzKgW8iOGLVnOwrQAIeyaThQLwxf7Jfi8FmFh5flPdGHhmW04DrdWk+Pzz8oM3eGEOTq43dYUg3Y7UBov1H4ofgr8MSfl0gqMCJaT1ee4vZvSX+TCPXHfadA1RjA/G1O0J81K7cjjcUYlp+gfyonGUf9unwgQQKSj/QQ9+hIqD1YFJtYP6gjtpAdMdP3oYlqz3YUD6jKrOEHf76EYMMG0nCgXrcXHOZZuKn0PN8VTIXnwtHggH5pDi/Le2tId8OiDw3Lx2ixcynHBGFMoLjZ9ZhvRJD/0/x+UGbuGzfaVk0nuQ4oQAW2xu+wpKOIDBwasNuBf9dnOZF40iv0H26TA/cmO2aQmoOIPy+R7ViTKVRgRLQxB/gM36hNHrrP8abs35L+ibguRmcXm1QCcCfsu0jwcd4vTMkwgPnbVedFY5ygP2v5x4PTF2g2wXIPinnLN13krlDhXED/VE4lmOj2c4iLrhbvNxb4QIIEnSc+vCQf6SFBeFWZr9fgi8qwXDM7tlntXtHlVbB+UEfVGez/bCE7YglGh9rn6TLIgo6OcNSe7Six+VGQX1bkgjoxWDqDCY+n5m4zHwjBhg1tpjq1pOFAvcGG/AUvKUkXSk71r/N2IjKWEZ6KeL4rmB3ZlyBLyfR4Lq5IwMAB/dKlZkFqHF6W93k5Kk+Xlp9d8vEj5QUZa01gftf1jtFi5+u23l9SjgnCN+m1etlGAGi8IbzQ6jHfiI9WYzBh+dYiBJ5qmr2mvQfYwQG/Nm60rVMJCBWaTnId/ynOpRGGe7d04ccPzdkQkqi+rCpGERk4I3algHVmxtgQAXpg/q7PcpvJc8oi8aRXR5YY76k5rf3MXhFFBu5NdmOJ8c6NJkTc6EH4ZFF5L/k0HpNB2rEmU7/WmuvpxvmzjKFFC2IO8BkHaUyhvlGbPNs2J4Q1mZKWUP4uLpm5VCb83uieEnFdjHcW4TTOLjapq0mKEUXmPwMggYO7dpHg4xP2XFv9WelJmD5V8SEGgmxEYT7Uqs6Lxs+pN344QX/WXSbDbrOJdnzW7srEb9YdWQqxoeHkHhTzgXmoS9dpyxOyDnerXKHCuTnGfgGA/qmc5ZkVJAs2oDZuURyOpxZmhsJx2j4s3m8sSbnTlPCBBAmV5rixe0kNox4usRtIPtJDLVlu+8P22+mmkWdRH6mwzHrODHSUYblm8QYF3gAAAAB3BzCW7g5hLJkJUboHbcQZcGr0j+ljpTWeZJWjDtuIMnncuKTg1ekel9LZiAm2TCt+sXy957gtB5C/HZEdtxBkarAg8vO5cUiEvkHeGtrUfW3d5Ov01LVRg9OFxxNsmFZka6jA/WL5eoplyewUAVxPYwZs2foPPWONCA31O24gyExpEF7VYEHkomdxcjwD5NFLBNRH0g2F/aUKtWs1taj6QrKYbNu7ydasvPlAMths40XfXHXc1g3Pq9E9WSbZMKxR3gA6yNdRgL/QYRYhtPS1VrPEI8+6lZm4vaUPKAK4nl8FiAjGDNmysQvpJC9vfIdYaEwRwWEdq7ZmLT123EGQAdtxBpjSILzv1RAqcbGFiQa2tR+fv+Sl6LjUM3gHyaIPAPk0lgmojuEOmBh/ag27CG09LZFkbJfmY1wBa2tR9BxsYWKFZTDY8mIATmwGle0bAaV7ggj0wfUPxFdlsNnGErfpUIu+uOr8uYh8Yt0d3xXaLUmM03zz+9RMZU2yYVg6tVHOo7wAdNS7MOJK36VBPdiV16TRxG3T1vT7Q2npajRu2fytZ4hG2mC40EQELXMzAx3lqgpMX90NfMlQBXE8JwJBqr4LEBDJDCCGV2i1JSBvhbO5ZtQJzmHkn17e+Q4p2cmYsNCYIsfXqLRZsz0XLrQNgbe9XDvAumyt7biDIJq/s7YDtuIMdLHSmurVRzmd0nevBNsmFXPcFoPjYwsSlGQ7hA1taj56alqo5A7PC5MJ/50KAK4nfQeesfAPk0SHCKPSHgHyaGkGwv73YlddgGVnyxlsNnFuawbn/tQbdonTK+AQ2npaZ91KzPm532+Ovu/5F7e+Q2CwjtXW1qPoodGTfjjYwsRP3/JS0btn8aa8V2c/tQbdSLI2S9gNK9qvChtMNgNK9kEEemDfYO/DqGffVTFuju9Gab55y2GzjLxmgxolb9KgUmjiNswMd5W7C0cDIgIWuVUFJi/Fuju+sr0LKCu0WpJcs2oEwtf/p7XQzzEs2Z6LW96uHZtkwrDsY/ImdWqjnAJtkwqcCQap6w42P3IHZ4UFAFcTlb9KguK4ehR7sSuuDLYbOJLSjpvl1b4NfNzvtwvb3yGG09LU8dTiQmjds/gf2oNugb4Wzfa5JltvsHfhGLdHd4gIWub/D2pwZgY7yhEBC1yPZZ7/+GKuaWFr/9MWbM9FoArieNcN0u5OBINUOQOzwqdnJmHQYBb3SWlHTT5ud9uu0WpK2dZa3EDfC2Y32DvwqbyuU967nsVHss9/MLX/6b298hzKusKKU7OTMCS0o6a60DYFzdcGk1TeVykj2We/s2Z6LsRhSrhdaBsCKm8rlLQLvjfDDI6hWgXfGy0C740AAAAAGRsxQTI2YoIrLVPDZGzFBH139EVWWqeGT0GWx8jZigjRwrtJ+u/oiuP02custU8Mta5+TZ6DLY6HmBzPSsISUVPZIxB49HDTYe9Bki6u11U3teYUHJi11wWDhJaCG5hZmwCpGLAt+tupNsua5nddXf9sbBzUQT/fzVoOnpWEJKKMnxXjp7JGIL6pd2Hx6OGm6PPQ58PegyTaxbJlXV2uqkRGn+tva8wodnD9aTkxa64gKlrvCwcJLBIcOG3fRjbzxl0Hsu1wVHH0a2Uwuyrz96IxwraJHJF1kAegNBefvPsOhI26JaneeTyy7zhz83n/auhIvkHFG31Y3io88HlPBelifkTCTy2H21QcxpQVigGNDrtApiPog7842cI4oMUNIbv0TAqWp48TjZbOXMwACUXXMUhu+mKLd+FTyrq7XVSjoGwViI0/1pGWDpfe15hQx8ypEezh+tL1+suTcmLXXGt55h1AVLXeWU+EnxYOElgPFSMZJDhw2j0jQZtl/WunfOZa5lfLCSVO0DhkAZGuoxiKn+Izp8whKrz9YK0k4a+0P9DunxKDLYYJsmzJSCSr0FMV6vt+RiniZXdoLz959jYkSLcdCRt0BBIqNUtTvPJSSI2zeWXecGB+7zHn5vP+/v3Cv9XQkXzMy6A9g4o2+pqRB7uxvFR4qKdlOTuDmEsimKkKCbX6yRCuy4hf711PRvRsDm3ZP810wg6M81oSQ+pBIwLBbHDB2HdBgJc210eOLeYGpQC1xbwbhIRxQYoaaFq7W0N36JhabNnZFS1PHgw2fl8nGy2cPgAc3bmYABKggzFTi65ikJK1U9Hd9MUWxO/0V+/Cp5T22ZbVrge86bccjaicMd5rhSrvKspree3TcEis+F0bb+FGKi5m3jbhf8UHoFToVGNN82UiArLz5RupwqQwhJFnKZ+gJuTFrrj93p/51vPMOs/o/XuAqWu8mbJa/bKfCT6rhDh/LBwksDUHFfEeKkYyBzF3c0hw4bRRa9D1ekaDNmNdsnfL+tdO0uHmD/nMtczg14SNr5YSSraNIwudoHDIhLtBiQMjXUYaOGwHMRU/xCgODoVnT5hCflSpA1V5+sBMYsuBgTjFH5gj9F6zDqedqhWW3OVUABv8TzFa12Jimc55U9hJ4U8XUPp+VnvXLZVizBzULY2KEzSWu1Ifu+iRBqDZ0F5+8+xHZcKtbEiRbnVToC86EjboIwkHqQgkVGoRP2Urlqd55I+8SKWkkRtmvYoqJ/LLvODr0I2hwP3eYtnm7yMUvOG9DafQ/CaKgz8/kbJ+cNAkuWnLFfhC5kY7W/13etxla7XFflr07lMJN/dIOHa4Ca6xoRKf8Io/zDOTJP1yAAAAAAHCajcDhNRuAka+WQcJqNwGy8LrBI18sgVPFoUOE1G4D9E7jw2XhdYMVe/hCRr5ZAjYk1MKni0KC1xHPRwmo3Ad5MlHH6J3Hh5gHSkbLwusGu1hmxir38IZabX1EjXyyBP3mP8RsSamEHNMkRU8WhQU/jAjFriOehd65E04TUbgOY8s1zvJko46C/i5P0TuPD6GhAs8wDpSPQJQZTZeF1g3nH1vNdrDNjQYqQExV7+EMJXVszLTa+ozEQHdJGvlkCWpj6cn7zH+Ji1bySNiTUwioCd7IOaZIiEk8xUqeLQoK7reHyn8YEYoPgpxLXEc9CyzdsMu9ciaLzeirXCajcBxWOf3cx5ZrnLcM5l3kyUcdlFPK3QX8XJ11ZtFfonceH9Ltk99DQgWfM9iIXmAdKR4Qh6TegSgynvGyv1svC6wbX5Eh284+t5u+pDpa7WGbGp37FtoMVICafM4NWKvfwhjbRU/YSurZmDpwVFlptfUZGS942YiA7pn4GmNSNfLIEkVoRdLUx9OSpF1eU/eY/xOHAnLTFq3kk2Y3aVGxJqYRwbwr0VATvZEgiTBQc0yREAPWHNCSeYqQ4uMHVTxaFBVMwJnV3W8Pla31glT+MCMUjqqu1B8FOJRvn7VWuI56FsgU99ZZu2GWKSHsV3rkTRcKfsDXm9FWl+tL23hNRuA4Pdxt+Kxz+7jc6XZ5jyzXOf+2WvluGcy5HoNBe8mSjju5CAP7KKeVu1g9GHoL+Lk6e2I0+urNorqaVy9/RO48PzR0sf+l2ye/1UGqfoaECz72Hob+Z7EQvhcrnXzAOlI8sKDf/CEPSbxRlcR9AlBlPXLK6P3jZX69k//zdl4XWDYujdX2vyJDts+4znecfW837Ofi931IdLcN0vl12sM2NapZu/U79i21S2ygdBipATRoM4z0+ZwatIkGl3FXv4QxJyUJ8baKn7HGEBJwldWzMOVPPvB04KiwBHolctNr6jKj8WfyMl7xskLEfHMRAd0zYZtQ8/A0xrOArktka+WQJBt/HeSK0Iuk+koGZamPpyXZFSrlSLq8pTggMWfvMf4nn6tz5w4E5ad+nmhmLVvJJl3BRObMbtKmvPRfY2JNTCMS18Hjg3hXo/Pi2mKgJ3si0L324kESYKIxiO1g5pkiIJYDr+AHrDmgdza0YSTzFSFUaZjhxcYOobVcg2p4tCgqCC6l6pmBM6rpG75rut4fK8pEkutb6wSrK3GJafxgRimM+svpHVVdqW3P0Gg+CnEoTpD86N8/aqivpedtcRz0LQGGee2QKe+t4LNibLN2wyzD7E7sUkPYrCLZVW71yJouhVIX7hT9ga5kZwxvN6KtL0c4IO/Wl7avpg07QAAAAC4vGdlqgnIixK1r+6PYpdXN97wMiVrX9yd1zi5xbQo730IT4pvveBk1wGHAUrWv7jyatjd4N93M1hjEFZQGVef6KUw+voQnxRCrPhx33vAyGfHp611cghDzc5vJpWtf3AtERgVP6S3+4cY0J4az+gnonOPQrDGIKwIekfJoDKvPhiOyFsKO2e1socA0C9QOGmX7F8MhVnw4j3ll4dlhofR3TrgtM+PT1p3Myg/6uQQhlJYd+NA7dgN+FG/aPAr+KFIl5/EWiIwKuKeV09/SW/2x/UIk9VAp31t/MAYNZ/QTo0jtyuflhjFJyp/oLr9RxkCQSB8EPSPkqhI6PebFFg9I6g/WDEdkLaJoffTFHbPaqzKqA++fwfhBsNghF6gcNLmHBe39Km4WUwV3zzRwueFaX6A4HvLLw7Dd0hryw0PonOxaMdhBMcp2bigTERvmPX80/+Q7mZQflbaNxsOuSdNtgVAKKSw78YcDIijgduwGjln138r0niRk24f9Dsm9wODmpBmkS8/iCmTWO20RGBUDPgHMR5NqN+m8c+6/pLf7EYuuIlUmxdn7CdwAnHwSLvJTC/e2/mAMGNF51VrP6Cc04PH+cE2aBd5ig9y5F03y1zhUK5OVP9A9uiYJa6LiHMWN+8WBIJA+Lw+J50h6R8kmVV4QYvg168zXLDK7Vm2O1Xl0V5HUH6w/+wZ1WI7IWzah0YJyDLp53COjoIo7Z7UkFH5sYLkVl86WDE6p48Jgx8zbuYNhsEItTqmbb1A4aQF/IbBF0kpL6/1TkoyInbzip4Rlpgrvnggl9kdePTJS8BIri7S/QHAakFmpfeWXhxPKjl5XZ+Wl+Uj8fJNaxkF9dd+YOdi0Y5f3rbrwgmOUnq16TdoAEbZ0LwhvIjfMeowY1aPItb5YZpqngQHvaa9vwHB2K20bjYVCAlTHXJOmqXOKf+3e4YRD8fhdJIQ2c0qrL6oOBkRRoCldiPYxmZ1YHoBEHLPrv7Kc8mbV6TxIu8Ylkf9rTmpRRFezHZN7gbO8Ylj3EQmjWT4Qej5L3lRQZMeNFMmsdrrmta/s/nG6QtFoYwZ8A5ioUxpBzybUb6EJzbblpKZNS4u/lAmVLmZnuje/IxdcRI04RZ3qTYuzhGKSasDP+ZFu4OBIOPgkXZbXPYTSelZ/fFVPphsggYh1D5hRMaLzqp+N6nP1n9BOG7DJl18domzxMru1lkd1m/hobEK8xQe5EuoeYETy2nXq3cOsrnCoVwBfsY5nKn+gCQVmeU2oDYLjhxRboZmFqc+2nHCLG/eLJTTuUkJBIHwsbjmlaMNSXsbsS4eQ9I+SPtuWS3p2/bDUWeRpsywqR90DM56ZrlhlN4FBvEUBAAAtgcAAHoJAACZBQAAWwUAALoFAAAABAAARQUAAM8FAAB6CQBB0dkAC7YQAQIDBAQFBQYGBgYHBwcHCAgICAgICAgJCQkJCQkJCQoKCgoKCgoKCgoKCgoKCgoLCwsLCwsLCwsLCwsLCwsLDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PAAAQERISExMUFBQUFRUVFRYWFhYWFhYWFxcXFxcXFxcYGBgYGBgYGBgYGBgYGBgYGRkZGRkZGRkZGRkZGRkZGRoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxscHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQABAgMEBQYHCAgJCQoKCwsMDAwMDQ0NDQ4ODg4PDw8PEBAQEBAQEBARERERERERERISEhISEhISExMTExMTExMUFBQUFBQUFBQUFBQUFBQUFRUVFRUVFRUVFRUVFRUVFRYWFhYWFhYWFhYWFhYWFhYXFxcXFxcXFxcXFxcXFxcXGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxwQMAAAEDUAAAEBAAAeAQAADwAAAJA0AACQNQAAAAAAAB4AAAAPAAAAAAAAABA2AAAAAAAAEwAAAAcAAAAAAAAADAAIAIwACABMAAgAzAAIACwACACsAAgAbAAIAOwACAAcAAgAnAAIAFwACADcAAgAPAAIALwACAB8AAgA/AAIAAIACACCAAgAQgAIAMIACAAiAAgAogAIAGIACADiAAgAEgAIAJIACABSAAgA0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8="; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } + function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + var binary = tryParseAsDataURI(file); + if (binary) { + return binary; + } + if (readBinary) { + return readBinary(file); + } else { + throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"; + } + } catch (err2) { + abort(err2); + } + } + function instantiateSync(file, info) { + var instance; + var module2; + var binary; + try { + binary = getBinary(file); + module2 = new WebAssembly.Module(binary); + instance = new WebAssembly.Instance(module2, info); + } catch (e) { + var str = e.toString(); + err("failed to compile wasm module: " + str); + if (str.includes("imported Memory") || str.includes("memory import")) { + err( + "Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)." + ); + } + throw e; + } + return [instance, module2]; + } + function createWasm() { + var info = { a: asmLibraryArg }; + function receiveInstance(instance, module2) { + var exports3 = instance.exports; + Module["asm"] = exports3; + wasmMemory = Module["asm"]["u"]; + updateGlobalBufferAndViews(wasmMemory.buffer); + wasmTable = Module["asm"]["pa"]; + addOnInit(Module["asm"]["v"]); + removeRunDependency(); + } + addRunDependency(); + if (Module["instantiateWasm"]) { + try { + var exports2 = Module["instantiateWasm"](info, receiveInstance); + return exports2; + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false; + } + } + var result = instantiateSync(wasmBinaryFile, info); + receiveInstance(result[0]); + return Module["asm"]; + } + var tempDouble; + var tempI64; + function callRuntimeCallbacks(callbacks) { + while (callbacks.length > 0) { + var callback = callbacks.shift(); + if (typeof callback == "function") { + callback(Module); + continue; + } + var func = callback.func; + if (typeof func === "number") { + if (callback.arg === void 0) { + wasmTable.get(func)(); + } else { + wasmTable.get(func)(callback.arg); + } + } else { + func(callback.arg === void 0 ? null : callback.arg); + } + } + } + function _gmtime_r(time, tmPtr) { + var date = new Date(HEAP32[time >> 2] * 1e3); + HEAP32[tmPtr >> 2] = date.getUTCSeconds(); + HEAP32[tmPtr + 4 >> 2] = date.getUTCMinutes(); + HEAP32[tmPtr + 8 >> 2] = date.getUTCHours(); + HEAP32[tmPtr + 12 >> 2] = date.getUTCDate(); + HEAP32[tmPtr + 16 >> 2] = date.getUTCMonth(); + HEAP32[tmPtr + 20 >> 2] = date.getUTCFullYear() - 1900; + HEAP32[tmPtr + 24 >> 2] = date.getUTCDay(); + HEAP32[tmPtr + 36 >> 2] = 0; + HEAP32[tmPtr + 32 >> 2] = 0; + var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); + var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; + HEAP32[tmPtr + 28 >> 2] = yday; + if (!_gmtime_r.GMTString) + _gmtime_r.GMTString = allocateUTF8("GMT"); + HEAP32[tmPtr + 40 >> 2] = _gmtime_r.GMTString; + return tmPtr; + } + function ___gmtime_r(a0, a1) { + return _gmtime_r(a0, a1); + } + var PATH = { + splitPath: function(filename) { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray: function(parts, allowAboveRoot) { + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === ".") { + parts.splice(i, 1); + } else if (last === "..") { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift(".."); + } + } + return parts; + }, + normalize: function(path) { + var isAbsolute = path.charAt(0) === "/", trailingSlash = path.substr(-1) === "/"; + path = PATH.normalizeArray( + path.split("/").filter(function(p) { + return !!p; + }), + !isAbsolute + ).join("/"); + if (!path && !isAbsolute) { + path = "."; + } + if (path && trailingSlash) { + path += "/"; + } + return (isAbsolute ? "/" : "") + path; + }, + dirname: function(path) { + var result = PATH.splitPath(path), root = result[0], dir = result[1]; + if (!root && !dir) { + return "."; + } + if (dir) { + dir = dir.substr(0, dir.length - 1); + } + return root + dir; + }, + basename: function(path) { + if (path === "/") + return "/"; + path = PATH.normalize(path); + path = path.replace(/\/$/, ""); + var lastSlash = path.lastIndexOf("/"); + if (lastSlash === -1) + return path; + return path.substr(lastSlash + 1); + }, + extname: function(path) { + return PATH.splitPath(path)[3]; + }, + join: function() { + var paths = Array.prototype.slice.call(arguments, 0); + return PATH.normalize(paths.join("/")); + }, + join2: function(l, r) { + return PATH.normalize(l + "/" + r); + } + }; + function getRandomDevice() { + { + try { + var crypto_module = require("crypto"); + return function() { + return crypto_module["randomBytes"](1)[0]; + }; + } catch (e) { + } + } + return function() { + abort("randomDevice"); + }; + } + var PATH_FS = { + resolve: function() { + var resolvedPath = "", resolvedAbsolute = false; + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = i >= 0 ? arguments[i] : FS.cwd(); + if (typeof path !== "string") { + throw new TypeError("Arguments to path.resolve must be strings"); + } else if (!path) { + return ""; + } + resolvedPath = path + "/" + resolvedPath; + resolvedAbsolute = path.charAt(0) === "/"; + } + resolvedPath = PATH.normalizeArray( + resolvedPath.split("/").filter(function(p) { + return !!p; + }), + !resolvedAbsolute + ).join("/"); + return (resolvedAbsolute ? "/" : "") + resolvedPath || "."; + }, + relative: function(from, to) { + from = PATH_FS.resolve(from).substr(1); + to = PATH_FS.resolve(to).substr(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== "") + break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== "") + break; + } + if (start > end) + return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split("/")); + var toParts = trim(to.split("/")); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push(".."); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join("/"); + } + }; + var TTY = { + ttys: [], + init: function() { + }, + shutdown: function() { + }, + register: function(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops: { + open: function(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close: function(stream) { + stream.tty.ops.flush(stream.tty); + }, + flush: function(stream) { + stream.tty.ops.flush(stream.tty); + }, + read: function(stream, buffer2, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === void 0 && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === void 0) + break; + bytesRead++; + buffer2[offset + i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + }, + write: function(stream, buffer2, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer2[offset + i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + } + }, + default_tty_ops: { + get_char: function(tty) { + if (!tty.input.length) { + var result = null; + { + var BUFSIZE = 256; + var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE); + var bytesRead = 0; + try { + bytesRead = nodeFS.readSync( + process.stdin.fd, + buf, + 0, + BUFSIZE, + null + ); + } catch (e) { + if (e.toString().includes("EOF")) + bytesRead = 0; + else + throw e; + } + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString("utf-8"); + } else { + result = null; + } + } + if (!result) { + return null; + } + tty.input = intArrayFromString(result, true); + } + return tty.input.shift(); + }, + put_char: function(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) + tty.output.push(val); + } + }, + flush: function(tty) { + if (tty.output && tty.output.length > 0) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + } + }, + default_tty1_ops: { + put_char: function(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) + tty.output.push(val); + } + }, + flush: function(tty) { + if (tty.output && tty.output.length > 0) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + } + } + }; + function mmapAlloc(size) { + var alignedSize = alignMemory(size, 65536); + var ptr = _malloc(alignedSize); + while (size < alignedSize) + HEAP8[ptr + size++] = 0; + return ptr; + } + var MEMFS = { + ops_table: null, + mount: function(mount) { + return MEMFS.createNode(null, "/", 16384 | 511, 0); + }, + createNode: function(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + throw new FS.ErrnoError(63); + } + if (!MEMFS.ops_table) { + MEMFS.ops_table = { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { llseek: MEMFS.stream_ops.llseek } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + allocate: MEMFS.stream_ops.allocate, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + } + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.timestamp = Date.now(); + if (parent) { + parent.contents[name] = node; + parent.timestamp = node.timestamp; + } + return node; + }, + getFileDataAsTypedArray: function(node) { + if (!node.contents) + return new Uint8Array(0); + if (node.contents.subarray) + return node.contents.subarray(0, node.usedBytes); + return new Uint8Array(node.contents); + }, + expandFileStorage: function(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) + return; + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max( + newCapacity, + prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0 + ); + if (prevCapacity != 0) + newCapacity = Math.max(newCapacity, 256); + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); + if (node.usedBytes > 0) + node.contents.set(oldContents.subarray(0, node.usedBytes), 0); + }, + resizeFileStorage: function(node, newSize) { + if (node.usedBytes == newSize) + return; + if (newSize == 0) { + node.contents = null; + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); + if (oldContents) { + node.contents.set( + oldContents.subarray(0, Math.min(newSize, node.usedBytes)) + ); + } + node.usedBytes = newSize; + } + }, + node_ops: { + getattr: function(node) { + var attr = {}; + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.timestamp); + attr.mtime = new Date(node.timestamp); + attr.ctime = new Date(node.timestamp); + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr: function(node, attr) { + if (attr.mode !== void 0) { + node.mode = attr.mode; + } + if (attr.timestamp !== void 0) { + node.timestamp = attr.timestamp; + } + if (attr.size !== void 0) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup: function(parent, name) { + throw FS.genericErrors[44]; + }, + mknod: function(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename: function(old_node, new_dir, new_name) { + if (FS.isDir(old_node.mode)) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + } + if (new_node) { + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + } + delete old_node.parent.contents[old_node.name]; + old_node.parent.timestamp = Date.now(); + old_node.name = new_name; + new_dir.contents[new_name] = old_node; + new_dir.timestamp = old_node.parent.timestamp; + old_node.parent = new_dir; + }, + unlink: function(parent, name) { + delete parent.contents[name]; + parent.timestamp = Date.now(); + }, + rmdir: function(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.timestamp = Date.now(); + }, + readdir: function(node) { + var entries = [".", ".."]; + for (var key2 in node.contents) { + if (!node.contents.hasOwnProperty(key2)) { + continue; + } + entries.push(key2); + } + return entries; + }, + symlink: function(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink: function(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + } + }, + stream_ops: { + read: function(stream, buffer2, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) + return 0; + var size = Math.min(stream.node.usedBytes - position, length); + if (size > 8 && contents.subarray) { + buffer2.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) + buffer2[offset + i] = contents[position + i]; + } + return size; + }, + write: function(stream, buffer2, offset, length, position, canOwn) { + if (buffer2.buffer === HEAP8.buffer) { + canOwn = false; + } + if (!length) + return 0; + var node = stream.node; + node.timestamp = Date.now(); + if (buffer2.subarray && (!node.contents || node.contents.subarray)) { + if (canOwn) { + node.contents = buffer2.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { + node.contents = buffer2.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { + node.contents.set( + buffer2.subarray(offset, offset + length), + position + ); + return length; + } + } + MEMFS.expandFileStorage(node, position + length); + if (node.contents.subarray && buffer2.subarray) { + node.contents.set( + buffer2.subarray(offset, offset + length), + position + ); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer2[offset + i]; + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek: function(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + allocate: function(stream, offset, length) { + MEMFS.expandFileStorage(stream.node, offset + length); + stream.node.usedBytes = Math.max( + stream.node.usedBytes, + offset + length + ); + }, + mmap: function(stream, address, length, position, prot, flags) { + if (address !== 0) { + throw new FS.ErrnoError(28); + } + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + if (!(flags & 2) && contents.buffer === buffer) { + allocated = false; + ptr = contents.byteOffset; + } else { + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call( + contents, + position, + position + length + ); + } + } + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + HEAP8.set(contents, ptr); + } + return { ptr, allocated }; + }, + msync: function(stream, buffer2, offset, length, mmapFlags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (mmapFlags & 2) { + return 0; + } + MEMFS.stream_ops.write( + stream, + buffer2, + 0, + length, + offset, + false + ); + return 0; + } + } + }; + var ERRNO_CODES = { + EPERM: 63, + ENOENT: 44, + ESRCH: 71, + EINTR: 27, + EIO: 29, + ENXIO: 60, + E2BIG: 1, + ENOEXEC: 45, + EBADF: 8, + ECHILD: 12, + EAGAIN: 6, + EWOULDBLOCK: 6, + ENOMEM: 48, + EACCES: 2, + EFAULT: 21, + ENOTBLK: 105, + EBUSY: 10, + EEXIST: 20, + EXDEV: 75, + ENODEV: 43, + ENOTDIR: 54, + EISDIR: 31, + EINVAL: 28, + ENFILE: 41, + EMFILE: 33, + ENOTTY: 59, + ETXTBSY: 74, + EFBIG: 22, + ENOSPC: 51, + ESPIPE: 70, + EROFS: 69, + EMLINK: 34, + EPIPE: 64, + EDOM: 18, + ERANGE: 68, + ENOMSG: 49, + EIDRM: 24, + ECHRNG: 106, + EL2NSYNC: 156, + EL3HLT: 107, + EL3RST: 108, + ELNRNG: 109, + EUNATCH: 110, + ENOCSI: 111, + EL2HLT: 112, + EDEADLK: 16, + ENOLCK: 46, + EBADE: 113, + EBADR: 114, + EXFULL: 115, + ENOANO: 104, + EBADRQC: 103, + EBADSLT: 102, + EDEADLOCK: 16, + EBFONT: 101, + ENOSTR: 100, + ENODATA: 116, + ETIME: 117, + ENOSR: 118, + ENONET: 119, + ENOPKG: 120, + EREMOTE: 121, + ENOLINK: 47, + EADV: 122, + ESRMNT: 123, + ECOMM: 124, + EPROTO: 65, + EMULTIHOP: 36, + EDOTDOT: 125, + EBADMSG: 9, + ENOTUNIQ: 126, + EBADFD: 127, + EREMCHG: 128, + ELIBACC: 129, + ELIBBAD: 130, + ELIBSCN: 131, + ELIBMAX: 132, + ELIBEXEC: 133, + ENOSYS: 52, + ENOTEMPTY: 55, + ENAMETOOLONG: 37, + ELOOP: 32, + EOPNOTSUPP: 138, + EPFNOSUPPORT: 139, + ECONNRESET: 15, + ENOBUFS: 42, + EAFNOSUPPORT: 5, + EPROTOTYPE: 67, + ENOTSOCK: 57, + ENOPROTOOPT: 50, + ESHUTDOWN: 140, + ECONNREFUSED: 14, + EADDRINUSE: 3, + ECONNABORTED: 13, + ENETUNREACH: 40, + ENETDOWN: 38, + ETIMEDOUT: 73, + EHOSTDOWN: 142, + EHOSTUNREACH: 23, + EINPROGRESS: 26, + EALREADY: 7, + EDESTADDRREQ: 17, + EMSGSIZE: 35, + EPROTONOSUPPORT: 66, + ESOCKTNOSUPPORT: 137, + EADDRNOTAVAIL: 4, + ENETRESET: 39, + EISCONN: 30, + ENOTCONN: 53, + ETOOMANYREFS: 141, + EUSERS: 136, + EDQUOT: 19, + ESTALE: 72, + ENOTSUP: 138, + ENOMEDIUM: 148, + EILSEQ: 25, + EOVERFLOW: 61, + ECANCELED: 11, + ENOTRECOVERABLE: 56, + EOWNERDEAD: 62, + ESTRPIPE: 135 + }; + var NODEFS = { + isWindows: false, + staticInit: function() { + NODEFS.isWindows = !!process.platform.match(/^win/); + var flags = { fs: fs.constants }; + if (flags["fs"]) { + flags = flags["fs"]; + } + NODEFS.flagsForNodeMap = { + 1024: flags["O_APPEND"], + 64: flags["O_CREAT"], + 128: flags["O_EXCL"], + 256: flags["O_NOCTTY"], + 0: flags["O_RDONLY"], + 2: flags["O_RDWR"], + 4096: flags["O_SYNC"], + 512: flags["O_TRUNC"], + 1: flags["O_WRONLY"] + }; + }, + bufferFrom: function(arrayBuffer) { + return Buffer["alloc"] ? Buffer.from(arrayBuffer) : new Buffer(arrayBuffer); + }, + convertNodeCode: function(e) { + var code = e.code; + return ERRNO_CODES[code]; + }, + mount: function(mount) { + return NODEFS.createNode(null, "/", NODEFS.getMode(mount.opts.root), 0); + }, + createNode: function(parent, name, mode, dev) { + if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) { + throw new FS.ErrnoError(28); + } + var node = FS.createNode(parent, name, mode); + node.node_ops = NODEFS.node_ops; + node.stream_ops = NODEFS.stream_ops; + return node; + }, + getMode: function(path) { + var stat; + try { + stat = fs.lstatSync(path); + if (NODEFS.isWindows) { + stat.mode = stat.mode | (stat.mode & 292) >> 2; + } + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + return stat.mode; + }, + realPath: function(node) { + var parts = []; + while (node.parent !== node) { + parts.push(node.name); + node = node.parent; + } + parts.push(node.mount.opts.root); + parts.reverse(); + return PATH.join.apply(null, parts); + }, + flagsForNode: function(flags) { + flags &= ~2097152; + flags &= ~2048; + flags &= ~32768; + flags &= ~524288; + var newFlags = 0; + for (var k in NODEFS.flagsForNodeMap) { + if (flags & k) { + newFlags |= NODEFS.flagsForNodeMap[k]; + flags ^= k; + } + } + if (!flags) { + return newFlags; + } else { + throw new FS.ErrnoError(28); + } + }, + node_ops: { + getattr: function(node) { + var path = NODEFS.realPath(node); + var stat; + try { + stat = fs.lstatSync(path); + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + if (NODEFS.isWindows && !stat.blksize) { + stat.blksize = 4096; + } + if (NODEFS.isWindows && !stat.blocks) { + stat.blocks = (stat.size + stat.blksize - 1) / stat.blksize | 0; + } + return { + dev: stat.dev, + ino: stat.ino, + mode: stat.mode, + nlink: stat.nlink, + uid: stat.uid, + gid: stat.gid, + rdev: stat.rdev, + size: stat.size, + atime: stat.atime, + mtime: stat.mtime, + ctime: stat.ctime, + blksize: stat.blksize, + blocks: stat.blocks + }; + }, + setattr: function(node, attr) { + var path = NODEFS.realPath(node); + try { + if (attr.mode !== void 0) { + fs.chmodSync(path, attr.mode); + node.mode = attr.mode; + } + if (attr.timestamp !== void 0) { + var date = new Date(attr.timestamp); + fs.utimesSync(path, date, date); + } + if (attr.size !== void 0) { + fs.truncateSync(path, attr.size); + } + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + }, + lookup: function(parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + var mode = NODEFS.getMode(path); + return NODEFS.createNode(parent, name, mode); + }, + mknod: function(parent, name, mode, dev) { + var node = NODEFS.createNode(parent, name, mode, dev); + var path = NODEFS.realPath(node); + try { + if (FS.isDir(node.mode)) { + fs.mkdirSync(path, node.mode); + } else { + fs.writeFileSync(path, "", { mode: node.mode }); + } + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + return node; + }, + rename: function(oldNode, newDir, newName) { + var oldPath = NODEFS.realPath(oldNode); + var newPath = PATH.join2(NODEFS.realPath(newDir), newName); + try { + fs.renameSync(oldPath, newPath); + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + oldNode.name = newName; + }, + unlink: function(parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + try { + fs.unlinkSync(path); + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + }, + rmdir: function(parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + try { + fs.rmdirSync(path); + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + }, + readdir: function(node) { + var path = NODEFS.realPath(node); + try { + return fs.readdirSync(path); + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + }, + symlink: function(parent, newName, oldPath) { + var newPath = PATH.join2(NODEFS.realPath(parent), newName); + try { + fs.symlinkSync(oldPath, newPath); + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + }, + readlink: function(node) { + var path = NODEFS.realPath(node); + try { + path = fs.readlinkSync(path); + path = NODEJS_PATH.relative( + NODEJS_PATH.resolve(node.mount.opts.root), + path + ); + return path; + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + } + }, + stream_ops: { + open: function(stream) { + var path = NODEFS.realPath(stream.node); + try { + if (FS.isFile(stream.node.mode)) { + stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags)); + } + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + }, + close: function(stream) { + try { + if (FS.isFile(stream.node.mode) && stream.nfd) { + fs.closeSync(stream.nfd); + } + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + }, + read: function(stream, buffer2, offset, length, position) { + if (length === 0) + return 0; + try { + return fs.readSync( + stream.nfd, + NODEFS.bufferFrom(buffer2.buffer), + offset, + length, + position + ); + } catch (e) { + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + }, + write: function(stream, buffer2, offset, length, position) { + try { + return fs.writeSync( + stream.nfd, + NODEFS.bufferFrom(buffer2.buffer), + offset, + length, + position + ); + } catch (e) { + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + }, + llseek: function(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + try { + var stat = fs.fstatSync(stream.nfd); + position += stat.size; + } catch (e) { + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap: function(stream, address, length, position, prot, flags) { + if (address !== 0) { + throw new FS.ErrnoError(28); + } + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr = mmapAlloc(length); + NODEFS.stream_ops.read(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }, + msync: function(stream, buffer2, offset, length, mmapFlags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (mmapFlags & 2) { + return 0; + } + NODEFS.stream_ops.write( + stream, + buffer2, + 0, + length, + offset, + false + ); + return 0; + } + } + }; + var NODERAWFS = { + lookupPath: function(path) { + return { path, node: { mode: NODEFS.getMode(path) } }; + }, + createStandardStreams: function() { + FS.streams[0] = { + fd: 0, + nfd: 0, + position: 0, + path: "", + flags: 0, + tty: true, + seekable: false + }; + for (var i = 1; i < 3; i++) { + FS.streams[i] = { + fd: i, + nfd: i, + position: 0, + path: "", + flags: 577, + tty: true, + seekable: false + }; + } + }, + cwd: function() { + return process.cwd(); + }, + chdir: function() { + process.chdir.apply(void 0, arguments); + }, + mknod: function(path, mode) { + if (FS.isDir(path)) { + fs.mkdirSync(path, mode); + } else { + fs.writeFileSync(path, "", { mode }); + } + }, + mkdir: function() { + fs.mkdirSync.apply(void 0, arguments); + }, + symlink: function() { + fs.symlinkSync.apply(void 0, arguments); + }, + rename: function() { + fs.renameSync.apply(void 0, arguments); + }, + rmdir: function() { + fs.rmdirSync.apply(void 0, arguments); + }, + readdir: function() { + fs.readdirSync.apply(void 0, arguments); + }, + unlink: function() { + fs.unlinkSync.apply(void 0, arguments); + }, + readlink: function() { + return fs.readlinkSync.apply(void 0, arguments); + }, + stat: function() { + return fs.statSync.apply(void 0, arguments); + }, + lstat: function() { + return fs.lstatSync.apply(void 0, arguments); + }, + chmod: function() { + fs.chmodSync.apply(void 0, arguments); + }, + fchmod: function() { + fs.fchmodSync.apply(void 0, arguments); + }, + chown: function() { + fs.chownSync.apply(void 0, arguments); + }, + fchown: function() { + fs.fchownSync.apply(void 0, arguments); + }, + truncate: function() { + fs.truncateSync.apply(void 0, arguments); + }, + ftruncate: function(fd, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + fs.ftruncateSync.apply(void 0, arguments); + }, + utime: function() { + fs.utimesSync.apply(void 0, arguments); + }, + open: function(path, flags, mode, suggestFD) { + if (typeof flags === "string") { + flags = VFS.modeStringToFlags(flags); + } + var nfd = fs.openSync(path, NODEFS.flagsForNode(flags), mode); + var fd = suggestFD != null ? suggestFD : FS.nextfd(nfd); + var stream = { + fd, + nfd, + position: 0, + path, + flags, + seekable: true + }; + FS.streams[fd] = stream; + return stream; + }, + close: function(stream) { + if (!stream.stream_ops) { + fs.closeSync(stream.nfd); + } + FS.closeStream(stream.fd); + }, + llseek: function(stream, offset, whence) { + if (stream.stream_ops) { + return VFS.llseek(stream, offset, whence); + } + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + position += fs.fstatSync(stream.nfd).size; + } else if (whence !== 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + if (position < 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + stream.position = position; + return position; + }, + read: function(stream, buffer2, offset, length, position) { + if (stream.stream_ops) { + return VFS.read(stream, buffer2, offset, length, position); + } + var seeking = typeof position !== "undefined"; + if (!seeking && stream.seekable) + position = stream.position; + var bytesRead = fs.readSync( + stream.nfd, + NODEFS.bufferFrom(buffer2.buffer), + offset, + length, + position + ); + if (!seeking) + stream.position += bytesRead; + return bytesRead; + }, + write: function(stream, buffer2, offset, length, position) { + if (stream.stream_ops) { + return VFS.write(stream, buffer2, offset, length, position); + } + if (stream.flags & +"1024") { + FS.llseek(stream, 0, +"2"); + } + var seeking = typeof position !== "undefined"; + if (!seeking && stream.seekable) + position = stream.position; + var bytesWritten = fs.writeSync( + stream.nfd, + NODEFS.bufferFrom(buffer2.buffer), + offset, + length, + position + ); + if (!seeking) + stream.position += bytesWritten; + return bytesWritten; + }, + allocate: function() { + throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); + }, + mmap: function(stream, address, length, position, prot, flags) { + if (stream.stream_ops) { + return VFS.mmap(stream, address, length, position, prot, flags); + } + if (address !== 0) { + throw new FS.ErrnoError(28); + } + var ptr = mmapAlloc(length); + FS.read(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }, + msync: function(stream, buffer2, offset, length, mmapFlags) { + if (stream.stream_ops) { + return VFS.msync(stream, buffer2, offset, length, mmapFlags); + } + if (mmapFlags & 2) { + return 0; + } + FS.write(stream, buffer2, 0, length, offset); + return 0; + }, + munmap: function() { + return 0; + }, + ioctl: function() { + throw new FS.ErrnoError(ERRNO_CODES.ENOTTY); + } + }; + var FS = { + root: null, + mounts: [], + devices: {}, + streams: [], + nextInode: 1, + nameTable: null, + currentPath: "/", + initialized: false, + ignorePermissions: true, + trackingDelegate: {}, + tracking: { openFlags: { READ: 1, WRITE: 2 } }, + ErrnoError: null, + genericErrors: {}, + filesystems: null, + syncFSRequests: 0, + lookupPath: function(path, opts) { + path = PATH_FS.resolve(FS.cwd(), path); + opts = opts || {}; + if (!path) + return { path: "", node: null }; + var defaults = { follow_mount: true, recurse_count: 0 }; + for (var key2 in defaults) { + if (opts[key2] === void 0) { + opts[key2] = defaults[key2]; + } + } + if (opts.recurse_count > 8) { + throw new FS.ErrnoError(32); + } + var parts = PATH.normalizeArray( + path.split("/").filter(function(p) { + return !!p; + }), + false + ); + var current = FS.root; + var current_path = "/"; + for (var i = 0; i < parts.length; i++) { + var islast = i === parts.length - 1; + if (islast && opts.parent) { + break; + } + current = FS.lookupNode(current, parts[i]); + current_path = PATH.join2(current_path, parts[i]); + if (FS.isMountpoint(current)) { + if (!islast || islast && opts.follow_mount) { + current = current.mounted.root; + } + } + if (!islast || opts.follow) { + var count = 0; + while (FS.isLink(current.mode)) { + var link = FS.readlink(current_path); + current_path = PATH_FS.resolve(PATH.dirname(current_path), link); + var lookup = FS.lookupPath(current_path, { + recurse_count: opts.recurse_count + }); + current = lookup.node; + if (count++ > 40) { + throw new FS.ErrnoError(32); + } + } + } + } + return { path: current_path, node: current }; + }, + getPath: function(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) + return mount; + return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path; + } + path = path ? node.name + "/" + path : node.name; + node = node.parent; + } + }, + hashName: function(parentid, name) { + var hash = 0; + for (var i = 0; i < name.length; i++) { + hash = (hash << 5) - hash + name.charCodeAt(i) | 0; + } + return (parentid + hash >>> 0) % FS.nameTable.length; + }, + hashAddNode: function(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode: function(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode: function(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode, parent); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + return FS.lookup(parent, name); + }, + createNode: function(parent, name, mode, rdev) { + var node = new FS.FSNode(parent, name, mode, rdev); + FS.hashAddNode(node); + return node; + }, + destroyNode: function(node) { + FS.hashRemoveNode(node); + }, + isRoot: function(node) { + return node === node.parent; + }, + isMountpoint: function(node) { + return !!node.mounted; + }, + isFile: function(mode) { + return (mode & 61440) === 32768; + }, + isDir: function(mode) { + return (mode & 61440) === 16384; + }, + isLink: function(mode) { + return (mode & 61440) === 40960; + }, + isChrdev: function(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev: function(mode) { + return (mode & 61440) === 24576; + }, + isFIFO: function(mode) { + return (mode & 61440) === 4096; + }, + isSocket: function(mode) { + return (mode & 49152) === 49152; + }, + flagModes: { r: 0, "r+": 2, w: 577, "w+": 578, a: 1089, "a+": 1090 }, + modeStringToFlags: function(str) { + var flags = FS.flagModes[str]; + if (typeof flags === "undefined") { + throw new Error("Unknown file open mode: " + str); + } + return flags; + }, + flagsToPermissionString: function(flag) { + var perms = ["r", "w", "rw"][flag & 3]; + if (flag & 512) { + perms += "w"; + } + return perms; + }, + nodePermissions: function(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + if (perms.includes("r") && !(node.mode & 292)) { + return 2; + } else if (perms.includes("w") && !(node.mode & 146)) { + return 2; + } else if (perms.includes("x") && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup: function(dir) { + var errCode = FS.nodePermissions(dir, "x"); + if (errCode) + return errCode; + if (!dir.node_ops.lookup) + return 2; + return 0; + }, + mayCreate: function(dir, name) { + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, "wx"); + }, + mayDelete: function(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, "wx"); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen: function(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) { + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + MAX_OPEN_FDS: 4096, + nextfd: function(fd_start, fd_end) { + fd_start = fd_start || 0; + fd_end = fd_end || FS.MAX_OPEN_FDS; + for (var fd = fd_start; fd <= fd_end; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStream: function(fd) { + return FS.streams[fd]; + }, + createStream: function(stream, fd_start, fd_end) { + if (!FS.FSStream) { + FS.FSStream = function() { + }; + FS.FSStream.prototype = { + object: { + get: function() { + return this.node; + }, + set: function(val) { + this.node = val; + } + }, + isRead: { + get: function() { + return (this.flags & 2097155) !== 1; + } + }, + isWrite: { + get: function() { + return (this.flags & 2097155) !== 0; + } + }, + isAppend: { + get: function() { + return this.flags & 1024; + } + } + }; + } + var newStream = new FS.FSStream(); + for (var p in stream) { + newStream[p] = stream[p]; + } + stream = newStream; + var fd = FS.nextfd(fd_start, fd_end); + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream: function(fd) { + FS.streams[fd] = null; + }, + chrdev_stream_ops: { + open: function(stream) { + var device = FS.getDevice(stream.node.rdev); + stream.stream_ops = device.stream_ops; + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + }, + llseek: function() { + throw new FS.ErrnoError(70); + } + }, + major: function(dev) { + return dev >> 8; + }, + minor: function(dev) { + return dev & 255; + }, + makedev: function(ma, mi) { + return ma << 8 | mi; + }, + registerDevice: function(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice: function(dev) { + return FS.devices[dev]; + }, + getMounts: function(mount) { + var mounts = []; + var check = [mount]; + while (check.length) { + var m = check.pop(); + mounts.push(m); + check.push.apply(check, m.mounts); + } + return mounts; + }, + syncfs: function(populate, callback) { + if (typeof populate === "function") { + callback = populate; + populate = false; + } + FS.syncFSRequests++; + if (FS.syncFSRequests > 1) { + err( + "warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work" + ); + } + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + function doCallback(errCode) { + FS.syncFSRequests--; + return callback(errCode); + } + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + } + mounts.forEach(function(mount) { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount: function(type, opts, mountpoint) { + var root = mountpoint === "/"; + var pseudo = !mountpoint; + var node; + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + mountpoint = lookup.path; + node = lookup.node; + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + if (root) { + FS.root = mountRoot; + } else if (node) { + node.mounted = mount; + if (node.mount) { + node.mount.mounts.push(mount); + } + } + return mountRoot; + }, + unmount: function(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + Object.keys(FS.nameTable).forEach(function(hash) { + var current = FS.nameTable[hash]; + while (current) { + var next = current.name_next; + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + current = next; + } + }); + node.mounted = null; + var idx = node.mount.mounts.indexOf(mount); + node.mount.mounts.splice(idx, 1); + }, + lookup: function(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod: function(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name || name === "." || name === "..") { + throw new FS.ErrnoError(28); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + create: function(path, mode) { + mode = mode !== void 0 ? mode : 438; + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir: function(path, mode) { + mode = mode !== void 0 ? mode : 511; + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree: function(path, mode) { + var dirs = path.split("/"); + var d = ""; + for (var i = 0; i < dirs.length; ++i) { + if (!dirs[i]) + continue; + d += "/" + dirs[i]; + try { + FS.mkdir(d, mode); + } catch (e) { + if (e.errno != 20) + throw e; + } + } + }, + mkdev: function(path, mode, dev) { + if (typeof dev === "undefined") { + dev = mode; + mode = 438; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink: function(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename: function(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + var lookup, old_dir, new_dir; + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + if (!old_dir || !new_dir) + throw new FS.ErrnoError(44); + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + var old_node = FS.lookupNode(old_dir, old_name); + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== ".") { + throw new FS.ErrnoError(28); + } + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== ".") { + throw new FS.ErrnoError(55); + } + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + } + if (old_node === new_node) { + return; + } + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) { + throw new FS.ErrnoError(10); + } + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, "w"); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + try { + if (FS.trackingDelegate["willMovePath"]) { + FS.trackingDelegate["willMovePath"](old_path, new_path); + } + } catch (e) { + err( + "FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message + ); + } + FS.hashRemoveNode(old_node); + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + } catch (e) { + throw e; + } finally { + FS.hashAddNode(old_node); + } + try { + if (FS.trackingDelegate["onMovePath"]) + FS.trackingDelegate["onMovePath"](old_path, new_path); + } catch (e) { + err( + "FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message + ); + } + }, + rmdir: function(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + try { + if (FS.trackingDelegate["willDeletePath"]) { + FS.trackingDelegate["willDeletePath"](path); + } + } catch (e) { + err( + "FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message + ); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + try { + if (FS.trackingDelegate["onDeletePath"]) + FS.trackingDelegate["onDeletePath"](path); + } catch (e) { + err( + "FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message + ); + } + }, + readdir: function(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + if (!node.node_ops.readdir) { + throw new FS.ErrnoError(54); + } + return node.node_ops.readdir(node); + }, + unlink: function(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + try { + if (FS.trackingDelegate["willDeletePath"]) { + FS.trackingDelegate["willDeletePath"](path); + } + } catch (e) { + err( + "FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message + ); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + try { + if (FS.trackingDelegate["onDeletePath"]) + FS.trackingDelegate["onDeletePath"](path); + } catch (e) { + err( + "FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message + ); + } + }, + readlink: function(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return PATH_FS.resolve( + FS.getPath(link.parent), + link.node_ops.readlink(link) + ); + }, + stat: function(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + if (!node) { + throw new FS.ErrnoError(44); + } + if (!node.node_ops.getattr) { + throw new FS.ErrnoError(63); + } + return node.node_ops.getattr(node); + }, + lstat: function(path) { + return FS.stat(path, true); + }, + chmod: function(path, mode, dontFollow) { + var node; + if (typeof path === "string") { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + node.node_ops.setattr(node, { + mode: mode & 4095 | node.mode & ~4095, + timestamp: Date.now() + }); + }, + lchmod: function(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod: function(fd, mode) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + FS.chmod(stream.node, mode); + }, + chown: function(path, uid, gid, dontFollow) { + var node; + if (typeof path === "string") { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + node.node_ops.setattr(node, { timestamp: Date.now() }); + }, + lchown: function(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown: function(fd, uid, gid) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + FS.chown(stream.node, uid, gid); + }, + truncate: function(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path === "string") { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, "w"); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + node.node_ops.setattr(node, { size: len, timestamp: Date.now() }); + }, + ftruncate: function(fd, len) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.truncate(stream.node, len); + }, + utime: function(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + node.node_ops.setattr(node, { timestamp: Math.max(atime, mtime) }); + }, + open: function(path, flags, mode, fd_start, fd_end) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags; + mode = typeof mode === "undefined" ? 438 : mode; + if (flags & 64) { + mode = mode & 4095 | 32768; + } else { + mode = 0; + } + var node; + if (typeof path === "object") { + node = path; + } else { + path = PATH.normalize(path); + try { + var lookup = FS.lookupPath(path, { follow: !(flags & 131072) }); + node = lookup.node; + } catch (e) { + } + } + var created = false; + if (flags & 64) { + if (node) { + if (flags & 128) { + throw new FS.ErrnoError(20); + } + } else { + node = FS.mknod(path, mode, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + if (flags & 65536 && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + if (flags & 512) { + FS.truncate(node, 0); + } + flags &= ~(128 | 512 | 131072); + var stream = FS.createStream( + { + node, + path: FS.getPath(node), + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + ungotten: [], + error: false + }, + fd_start, + fd_end + ); + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (Module["logReadFiles"] && !(flags & 1)) { + if (!FS.readFiles) + FS.readFiles = {}; + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + err("FS.trackingDelegate error on read file: " + path); + } + } + try { + if (FS.trackingDelegate["onOpenFile"]) { + var trackingFlags = 0; + if ((flags & 2097155) !== 1) { + trackingFlags |= FS.tracking.openFlags.READ; + } + if ((flags & 2097155) !== 0) { + trackingFlags |= FS.tracking.openFlags.WRITE; + } + FS.trackingDelegate["onOpenFile"](path, trackingFlags); + } + } catch (e) { + err( + "FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message + ); + } + return stream; + }, + close: function(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) + stream.getdents = null; + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed: function(stream) { + return stream.fd === null; + }, + llseek: function(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read: function(stream, buffer2, offset, length, position) { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position !== "undefined"; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read( + stream, + buffer2, + offset, + length, + position + ); + if (!seeking) + stream.position += bytesRead; + return bytesRead; + }, + write: function(stream, buffer2, offset, length, position, canOwn) { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + FS.llseek(stream, 0, 2); + } + var seeking = typeof position !== "undefined"; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write( + stream, + buffer2, + offset, + length, + position, + canOwn + ); + if (!seeking) + stream.position += bytesWritten; + try { + if (stream.path && FS.trackingDelegate["onWriteToFile"]) + FS.trackingDelegate["onWriteToFile"](stream.path); + } catch (e) { + err( + "FS.trackingDelegate['onWriteToFile']('" + stream.path + "') threw an exception: " + e.message + ); + } + return bytesWritten; + }, + allocate: function(stream, offset, length) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (offset < 0 || length <= 0) { + throw new FS.ErrnoError(28); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (!stream.stream_ops.allocate) { + throw new FS.ErrnoError(138); + } + stream.stream_ops.allocate(stream, offset, length); + }, + mmap: function(stream, address, length, position, prot, flags) { + if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + return stream.stream_ops.mmap( + stream, + address, + length, + position, + prot, + flags + ); + }, + msync: function(stream, buffer2, offset, length, mmapFlags) { + if (!stream || !stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync( + stream, + buffer2, + offset, + length, + mmapFlags + ); + }, + munmap: function(stream) { + return 0; + }, + ioctl: function(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile: function(path, opts) { + opts = opts || {}; + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || "binary"; + if (opts.encoding !== "utf8" && opts.encoding !== "binary") { + throw new Error('Invalid encoding type "' + opts.encoding + '"'); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === "utf8") { + ret = UTF8ArrayToString(buf, 0); + } else if (opts.encoding === "binary") { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile: function(path, data, opts) { + opts = opts || {}; + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data === "string") { + var buf = new Uint8Array(lengthBytesUTF8(data) + 1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, void 0, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, void 0, opts.canOwn); + } else { + throw new Error("Unsupported data type"); + } + FS.close(stream); + }, + cwd: function() { + return FS.currentPath; + }, + chdir: function(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, "x"); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories: function() { + FS.mkdir("/tmp"); + FS.mkdir("/home"); + FS.mkdir("/home/web_user"); + }, + createDefaultDevices: function() { + FS.mkdir("/dev"); + FS.registerDevice(FS.makedev(1, 3), { + read: function() { + return 0; + }, + write: function(stream, buffer2, offset, length, pos) { + return length; + } + }); + FS.mkdev("/dev/null", FS.makedev(1, 3)); + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev("/dev/tty", FS.makedev(5, 0)); + FS.mkdev("/dev/tty1", FS.makedev(6, 0)); + var random_device = getRandomDevice(); + FS.createDevice("/dev", "random", random_device); + FS.createDevice("/dev", "urandom", random_device); + FS.mkdir("/dev/shm"); + FS.mkdir("/dev/shm/tmp"); + }, + createSpecialDirectories: function() { + FS.mkdir("/proc"); + var proc_self = FS.mkdir("/proc/self"); + FS.mkdir("/proc/self/fd"); + FS.mount( + { + mount: function() { + var node = FS.createNode(proc_self, "fd", 16384 | 511, 73); + node.node_ops = { + lookup: function(parent, name) { + var fd = +name; + var stream = FS.getStream(fd); + if (!stream) + throw new FS.ErrnoError(8); + var ret = { + parent: null, + mount: { mountpoint: "fake" }, + node_ops: { + readlink: function() { + return stream.path; + } + } + }; + ret.parent = ret; + return ret; + } + }; + return node; + } + }, + {}, + "/proc/self/fd" + ); + }, + createStandardStreams: function() { + if (Module["stdin"]) { + FS.createDevice("/dev", "stdin", Module["stdin"]); + } else { + FS.symlink("/dev/tty", "/dev/stdin"); + } + if (Module["stdout"]) { + FS.createDevice("/dev", "stdout", null, Module["stdout"]); + } else { + FS.symlink("/dev/tty", "/dev/stdout"); + } + if (Module["stderr"]) { + FS.createDevice("/dev", "stderr", null, Module["stderr"]); + } else { + FS.symlink("/dev/tty1", "/dev/stderr"); + } + FS.open("/dev/stdin", 0); + FS.open("/dev/stdout", 1); + FS.open("/dev/stderr", 1); + }, + ensureErrnoError: function() { + if (FS.ErrnoError) + return; + FS.ErrnoError = function ErrnoError(errno, node) { + this.node = node; + this.setErrno = function(errno2) { + this.errno = errno2; + }; + this.setErrno(errno); + this.message = "FS error"; + }; + FS.ErrnoError.prototype = new Error(); + FS.ErrnoError.prototype.constructor = FS.ErrnoError; + [44].forEach(function(code) { + FS.genericErrors[code] = new FS.ErrnoError(code); + FS.genericErrors[code].stack = ""; + }); + }, + staticInit: function() { + FS.ensureErrnoError(); + FS.nameTable = new Array(4096); + FS.mount(MEMFS, {}, "/"); + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + FS.filesystems = { MEMFS, NODEFS }; + }, + init: function(input, output, error) { + FS.init.initialized = true; + FS.ensureErrnoError(); + Module["stdin"] = input || Module["stdin"]; + Module["stdout"] = output || Module["stdout"]; + Module["stderr"] = error || Module["stderr"]; + FS.createStandardStreams(); + }, + quit: function() { + FS.init.initialized = false; + var fflush = Module["_fflush"]; + if (fflush) + fflush(0); + for (var i = 0; i < FS.streams.length; i++) { + var stream = FS.streams[i]; + if (!stream) { + continue; + } + FS.close(stream); + } + }, + getMode: function(canRead, canWrite) { + var mode = 0; + if (canRead) + mode |= 292 | 73; + if (canWrite) + mode |= 146; + return mode; + }, + findObject: function(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (ret.exists) { + return ret.object; + } else { + return null; + } + }, + analyzePath: function(path, dontResolveLastLink) { + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, + exists: false, + error: 0, + name: null, + path: null, + object: null, + parentExists: false, + parentPath: null, + parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === "/"; + } catch (e) { + ret.error = e.errno; + } + return ret; + }, + createPath: function(parent, path, canRead, canWrite) { + parent = typeof parent === "string" ? parent : FS.getPath(parent); + var parts = path.split("/").reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) + continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + } + parent = current; + } + return current; + }, + createFile: function(parent, name, properties, canRead, canWrite) { + var path = PATH.join2( + typeof parent === "string" ? parent : FS.getPath(parent), + name + ); + var mode = FS.getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { + var path = name ? PATH.join2( + typeof parent === "string" ? parent : FS.getPath(parent), + name + ) : parent; + var mode = FS.getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data === "string") { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) + arr[i] = data.charCodeAt(i); + data = arr; + } + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + return node; + }, + createDevice: function(parent, name, input, output) { + var path = PATH.join2( + typeof parent === "string" ? parent : FS.getPath(parent), + name + ); + var mode = FS.getMode(!!input, !!output); + if (!FS.createDevice.major) + FS.createDevice.major = 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + FS.registerDevice(dev, { + open: function(stream) { + stream.seekable = false; + }, + close: function(stream) { + if (output && output.buffer && output.buffer.length) { + output(10); + } + }, + read: function(stream, buffer2, offset, length, pos) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === void 0 && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === void 0) + break; + bytesRead++; + buffer2[offset + i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + }, + write: function(stream, buffer2, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer2[offset + i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile: function(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) + return true; + if (read_) { + try { + obj.contents = intArrayFromString(read_(obj.url), true); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } else { + throw new Error("Cannot load without read() or XMLHttpRequest."); + } + }, + createLazyFile: function(parent, name, url, canRead, canWrite) { + var properties; { + var properties = { isDevice: false, url }; + } + var node = FS.createFile(parent, name, properties, canRead, canWrite); + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + Object.defineProperties(node, { + usedBytes: { + get: function() { + return this.contents.length; + } + } + }); + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach(function(key2) { + var fn = node.stream_ops[key2]; + stream_ops[key2] = function forceLoadLazyFile() { + FS.forceLoadFile(node); + return fn.apply(null, arguments); + }; + }); + stream_ops.read = function stream_ops_read(stream, buffer2, offset, length, position) { + FS.forceLoadFile(node); + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + if (contents.slice) { + for (var i = 0; i < size; i++) { + buffer2[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { + buffer2[offset + i] = contents.get(position + i); + } + } + return size; + }; + node.stream_ops = stream_ops; + return node; + }, + createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { + Browser.init(); + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + function processData(byteArray) { + function finish(byteArray2) { + if (preFinish) + preFinish(); + if (!dontCreateFile) { + FS.createDataFile( + parent, + name, + byteArray2, + canRead, + canWrite, + canOwn + ); + } + if (onload) + onload(); + removeRunDependency(); + } + var handled = false; + Module["preloadPlugins"].forEach(function(plugin) { + if (handled) + return; + if (plugin["canHandle"](fullname)) { + plugin["handle"](byteArray, fullname, finish, function() { + if (onerror) + onerror(); + removeRunDependency(); + }); + handled = true; + } + }); + if (!handled) + finish(byteArray); + } + addRunDependency(); + if (typeof url == "string") { + Browser.asyncLoad( + url, + function(byteArray) { + processData(byteArray); + }, + onerror + ); + } else { + processData(url); + } + }, + indexedDB: function() { + return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; + }, + DB_NAME: function() { + return "EM_FS_" + window.location.pathname; + }, + DB_VERSION: 20, + DB_STORE_NAME: "FILE_DATA", + saveFilesToDB: function(paths, onload, onerror) { + onload = onload || function() { + }; + onerror = onerror || function() { + }; + var indexedDB = FS.indexedDB(); + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); + } catch (e) { + return onerror(e); + } + openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { + out("creating db"); + var db = openRequest.result; + db.createObjectStore(FS.DB_STORE_NAME); + }; + openRequest.onsuccess = function openRequest_onsuccess() { + var db = openRequest.result; + var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite"); + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0, fail = 0, total = paths.length; + function finish() { + if (fail == 0) + onload(); + else + onerror(); + } + paths.forEach(function(path) { + var putRequest = files.put( + FS.analyzePath(path).object.contents, + path + ); + putRequest.onsuccess = function putRequest_onsuccess() { + ok++; + if (ok + fail == total) + finish(); + }; + putRequest.onerror = function putRequest_onerror() { + fail++; + if (ok + fail == total) + finish(); + }; + }); + transaction.onerror = onerror; + }; + openRequest.onerror = onerror; + }, + loadFilesFromDB: function(paths, onload, onerror) { + onload = onload || function() { + }; + onerror = onerror || function() { + }; + var indexedDB = FS.indexedDB(); + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); + } catch (e) { + return onerror(e); + } + openRequest.onupgradeneeded = onerror; + openRequest.onsuccess = function openRequest_onsuccess() { + var db = openRequest.result; + try { + var transaction = db.transaction([FS.DB_STORE_NAME], "readonly"); + } catch (e) { + onerror(e); + return; + } + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0, fail = 0, total = paths.length; + function finish() { + if (fail == 0) + onload(); + else + onerror(); + } + paths.forEach(function(path) { + var getRequest = files.get(path); + getRequest.onsuccess = function getRequest_onsuccess() { + if (FS.analyzePath(path).exists) { + FS.unlink(path); + } + FS.createDataFile( + PATH.dirname(path), + PATH.basename(path), + getRequest.result, + true, + true, + true + ); + ok++; + if (ok + fail == total) + finish(); + }; + getRequest.onerror = function getRequest_onerror() { + fail++; + if (ok + fail == total) + finish(); + }; + }); + transaction.onerror = onerror; + }; + openRequest.onerror = onerror; + } + }; + var SYSCALLS = { + mappings: {}, + DEFAULT_POLLMASK: 5, + umask: 511, + calculateAt: function(dirfd, path, allowEmpty) { + if (path[0] === "/") { + return path; + } + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = FS.getStream(dirfd); + if (!dirstream) + throw new FS.ErrnoError(8); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44); + } + return dir; + } + return PATH.join2(dir, path); + }, + doStat: function(func, path, buf) { + try { + var stat = func(path); + } catch (e) { + if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { + return -54; + } + throw e; + } + HEAP32[buf >> 2] = stat.dev; + HEAP32[buf + 4 >> 2] = 0; + HEAP32[buf + 8 >> 2] = stat.ino; + HEAP32[buf + 12 >> 2] = stat.mode; + HEAP32[buf + 16 >> 2] = stat.nlink; + HEAP32[buf + 20 >> 2] = stat.uid; + HEAP32[buf + 24 >> 2] = stat.gid; + HEAP32[buf + 28 >> 2] = stat.rdev; + HEAP32[buf + 32 >> 2] = 0; + tempI64 = [ + stat.size >>> 0, + (tempDouble = stat.size, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296 + ) >>> 0 : 0) + ], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1]; + HEAP32[buf + 48 >> 2] = 4096; + HEAP32[buf + 52 >> 2] = stat.blocks; + HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0; + HEAP32[buf + 60 >> 2] = 0; + HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0; + HEAP32[buf + 68 >> 2] = 0; + HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0; + HEAP32[buf + 76 >> 2] = 0; + tempI64 = [ + stat.ino >>> 0, + (tempDouble = stat.ino, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296 + ) >>> 0 : 0) + ], HEAP32[buf + 80 >> 2] = tempI64[0], HEAP32[buf + 84 >> 2] = tempI64[1]; + return 0; + }, + doMsync: function(addr, stream, len, flags, offset) { + var buffer2 = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer2, offset, len, flags); + }, + doMkdir: function(path, mode) { + path = PATH.normalize(path); + if (path[path.length - 1] === "/") + path = path.substr(0, path.length - 1); + FS.mkdir(path, mode, 0); + return 0; + }, + doMknod: function(path, mode, dev) { + switch (mode & 61440) { + case 32768: + case 8192: + case 24576: + case 4096: + case 49152: + break; + default: + return -28; + } + FS.mknod(path, mode, dev); + return 0; + }, + doReadlink: function(path, buf, bufsize) { + if (bufsize <= 0) + return -28; + var ret = FS.readlink(path); + var len = Math.min(bufsize, lengthBytesUTF8(ret)); + var endChar = HEAP8[buf + len]; + stringToUTF8(ret, buf, bufsize + 1); + HEAP8[buf + len] = endChar; + return len; + }, + doAccess: function(path, amode) { + if (amode & ~7) { + return -28; + } + var node; + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + if (!node) { + return -44; + } + var perms = ""; + if (amode & 4) + perms += "r"; + if (amode & 2) + perms += "w"; + if (amode & 1) + perms += "x"; + if (perms && FS.nodePermissions(node, perms)) { + return -2; + } + return 0; + }, + doDup: function(path, flags, suggestFD) { + var suggest = FS.getStream(suggestFD); + if (suggest) + FS.close(suggest); + return FS.open(path, flags, 0, suggestFD, suggestFD).fd; + }, + doReadv: function(stream, iov, iovcnt, offset) { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[iov + i * 8 >> 2]; + var len = HEAP32[iov + (i * 8 + 4) >> 2]; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) + return -1; + ret += curr; + if (curr < len) + break; + } + return ret; + }, + doWritev: function(stream, iov, iovcnt, offset) { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[iov + i * 8 >> 2]; + var len = HEAP32[iov + (i * 8 + 4) >> 2]; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) + return -1; + ret += curr; + } + return ret; + }, + varargs: void 0, + get: function() { + SYSCALLS.varargs += 4; + var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; + return ret; + }, + getStr: function(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + getStreamFromFD: function(fd) { + var stream = FS.getStream(fd); + if (!stream) + throw new FS.ErrnoError(8); + return stream; + }, + get64: function(low, high) { + return low; + } + }; + function ___sys_chmod(path, mode) { + try { + path = SYSCALLS.getStr(path); + FS.chmod(path, mode); + return 0; + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno; + } + } + function setErrNo(value) { + HEAP32[___errno_location() >> 2] = value; + return value; + } + function ___sys_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = SYSCALLS.get(); + if (arg < 0) { + return -28; + } + var newStream; + newStream = FS.open(stream.path, stream.flags, 0, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; + case 3: + return stream.flags; + case 4: { + var arg = SYSCALLS.get(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = SYSCALLS.get(); + var offset = 0; + HEAP16[arg + offset >> 1] = 2; + return 0; + } + case 13: + case 14: + return 0; + case 16: + case 8: + return -28; + case 9: + setErrNo(28); + return -1; + default: { + return -28; + } + } + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno; + } + } + function ___sys_fstat64(fd, buf) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + return SYSCALLS.doStat(FS.stat, stream.path, buf); + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno; + } + } + function ___sys_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: + case 21505: { + if (!stream.tty) + return -59; + return 0; + } + case 21510: + case 21511: + case 21512: + case 21506: + case 21507: + case 21508: { + if (!stream.tty) + return -59; + return 0; + } + case 21519: { + if (!stream.tty) + return -59; + var argp = SYSCALLS.get(); + HEAP32[argp >> 2] = 0; + return 0; + } + case 21520: { + if (!stream.tty) + return -59; + return -28; + } + case 21531: { + var argp = SYSCALLS.get(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + if (!stream.tty) + return -59; + return 0; + } + case 21524: { + if (!stream.tty) + return -59; + return 0; + } + default: + abort("bad ioctl syscall " + op); + } + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno; + } + } + function ___sys_open(path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + var pathname = SYSCALLS.getStr(path); + var mode = varargs ? SYSCALLS.get() : 0; + var stream = FS.open(pathname, flags, mode); + return stream.fd; + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno; + } + } + function ___sys_rename(old_path, new_path) { + try { + old_path = SYSCALLS.getStr(old_path); + new_path = SYSCALLS.getStr(new_path); + FS.rename(old_path, new_path); + return 0; + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno; + } + } + function ___sys_rmdir(path) { + try { + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno; + } + } + function ___sys_stat64(path, buf) { + try { + path = SYSCALLS.getStr(path); + return SYSCALLS.doStat(FS.stat, path, buf); + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno; + } + } + function ___sys_unlink(path) { + try { + path = SYSCALLS.getStr(path); + FS.unlink(path); + return 0; + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno; + } + } + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.copyWithin(dest, src, src + num); + } + function emscripten_realloc_buffer(size) { + try { + wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16); + updateGlobalBufferAndViews(wasmMemory.buffer); + return 1; + } catch (e) { + } + } + function _emscripten_resize_heap(requestedSize) { + var oldSize = HEAPU8.length; + requestedSize = requestedSize >>> 0; + var maxHeapSize = 2147483648; + if (requestedSize > maxHeapSize) { + return false; + } + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); + overGrownHeapSize = Math.min( + overGrownHeapSize, + requestedSize + 100663296 + ); + var newSize = Math.min( + maxHeapSize, + alignUp(Math.max(requestedSize, overGrownHeapSize), 65536) + ); + var replacement = emscripten_realloc_buffer(newSize); + if (replacement) { + return true; + } + } + return false; + } + function _fd_close(fd) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return e.errno; + } + } + function _fd_fdstat_get(fd, pbuf) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4; + HEAP8[pbuf >> 0] = type; + return 0; + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return e.errno; + } + } + function _fd_read(fd, iov, iovcnt, pnum) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var num = SYSCALLS.doReadv(stream, iov, iovcnt); + HEAP32[pnum >> 2] = num; + return 0; + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return e.errno; + } + } + function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var HIGH_OFFSET = 4294967296; + var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0); + var DOUBLE_LIMIT = 9007199254740992; + if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) { + return -61; + } + FS.llseek(stream, offset, whence); + tempI64 = [ + stream.position >>> 0, + (tempDouble = stream.position, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296 + ) >>> 0 : 0) + ], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1]; + if (stream.getdents && offset === 0 && whence === 0) + stream.getdents = null; + return 0; + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return e.errno; + } + } + function _fd_write(fd, iov, iovcnt, pnum) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var num = SYSCALLS.doWritev(stream, iov, iovcnt); + HEAP32[pnum >> 2] = num; + return 0; + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return e.errno; + } + } + function _setTempRet0(val) { + } + function _time(ptr) { + var ret = Date.now() / 1e3 | 0; + if (ptr) { + HEAP32[ptr >> 2] = ret; + } + return ret; + } + function _tzset() { + if (_tzset.called) + return; + _tzset.called = true; + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + HEAP32[__get_timezone() >> 2] = stdTimezoneOffset * 60; + HEAP32[__get_daylight() >> 2] = Number(winterOffset != summerOffset); + function extractZone(date) { + var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); + return match ? match[1] : "GMT"; + } + var winterName = extractZone(winter); + var summerName = extractZone(summer); + var winterNamePtr = allocateUTF8(winterName); + var summerNamePtr = allocateUTF8(summerName); + if (summerOffset < winterOffset) { + HEAP32[__get_tzname() >> 2] = winterNamePtr; + HEAP32[__get_tzname() + 4 >> 2] = summerNamePtr; + } else { + HEAP32[__get_tzname() >> 2] = summerNamePtr; + HEAP32[__get_tzname() + 4 >> 2] = winterNamePtr; + } + } + function _timegm(tmPtr) { + _tzset(); + var time = Date.UTC( + HEAP32[tmPtr + 20 >> 2] + 1900, + HEAP32[tmPtr + 16 >> 2], + HEAP32[tmPtr + 12 >> 2], + HEAP32[tmPtr + 8 >> 2], + HEAP32[tmPtr + 4 >> 2], + HEAP32[tmPtr >> 2], + 0 + ); + var date = new Date(time); + HEAP32[tmPtr + 24 >> 2] = date.getUTCDay(); + var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); + var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; + HEAP32[tmPtr + 28 >> 2] = yday; + return date.getTime() / 1e3 | 0; + } + var FSNode = function(parent, name, mode, rdev) { + if (!parent) { + parent = this; + } + this.parent = parent; + this.mount = parent.mount; + this.mounted = null; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.node_ops = {}; + this.stream_ops = {}; + this.rdev = rdev; + }; + var readMode = 292 | 73; + var writeMode = 146; + Object.defineProperties(FSNode.prototype, { + read: { + get: function() { + return (this.mode & readMode) === readMode; + }, + set: function(val) { + val ? this.mode |= readMode : this.mode &= ~readMode; + } + }, + write: { + get: function() { + return (this.mode & writeMode) === writeMode; + }, + set: function(val) { + val ? this.mode |= writeMode : this.mode &= ~writeMode; + } + }, + isFolder: { + get: function() { + return FS.isDir(this.mode); + } + }, + isDevice: { + get: function() { + return FS.isChrdev(this.mode); + } + } + }); + FS.FSNode = FSNode; + FS.staticInit(); + { + var fs = frozenFs; + var NODEJS_PATH = path__default.default; + NODEFS.staticInit(); + } + { + var _wrapNodeError = function(func) { + return function() { + try { + return func.apply(this, arguments); + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + }; + }; + var VFS = Object.assign({}, FS); + for (var _key in NODERAWFS) + FS[_key] = _wrapNodeError(NODERAWFS[_key]); + } + function intArrayFromString(stringy, dontAddNull, length) { + var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array( + stringy, + u8array, + 0, + u8array.length + ); + if (dontAddNull) + u8array.length = numBytesWritten; + return u8array; + } + function intArrayFromBase64(s) { + { + var buf; + try { + buf = Buffer.from(s, "base64"); + } catch (_) { + buf = new Buffer(s, "base64"); + } + return new Uint8Array( + buf["buffer"], + buf["byteOffset"], + buf["byteLength"] + ); + } + } + function tryParseAsDataURI(filename) { + if (!isDataURI(filename)) { + return; + } + return intArrayFromBase64(filename.slice(dataURIPrefix.length)); + } + var asmLibraryArg = { + s: ___gmtime_r, + p: ___sys_chmod, + e: ___sys_fcntl64, + k: ___sys_fstat64, + o: ___sys_ioctl, + q: ___sys_open, + i: ___sys_rename, + r: ___sys_rmdir, + c: ___sys_stat64, + h: ___sys_unlink, + l: _emscripten_memcpy_big, + m: _emscripten_resize_heap, + f: _fd_close, + j: _fd_fdstat_get, + g: _fd_read, + n: _fd_seek, + d: _fd_write, + a: _setTempRet0, + b: _time, + t: _timegm + }; + var asm = createWasm(); + Module["___wasm_call_ctors"] = asm["v"]; + Module["_zip_ext_count_symlinks"] = asm["w"]; + Module["_zip_file_get_external_attributes"] = asm["x"]; + Module["_zipstruct_stat"] = asm["y"]; + Module["_zipstruct_statS"] = asm["z"]; + Module["_zipstruct_stat_name"] = asm["A"]; + Module["_zipstruct_stat_index"] = asm["B"]; + Module["_zipstruct_stat_size"] = asm["C"]; + Module["_zipstruct_stat_mtime"] = asm["D"]; + Module["_zipstruct_stat_crc"] = asm["E"]; + Module["_zipstruct_error"] = asm["F"]; + Module["_zipstruct_errorS"] = asm["G"]; + Module["_zipstruct_error_code_zip"] = asm["H"]; + Module["_zipstruct_stat_comp_size"] = asm["I"]; + Module["_zipstruct_stat_comp_method"] = asm["J"]; + Module["_zip_close"] = asm["K"]; + Module["_zip_delete"] = asm["L"]; + Module["_zip_dir_add"] = asm["M"]; + Module["_zip_discard"] = asm["N"]; + Module["_zip_error_init_with_code"] = asm["O"]; + Module["_zip_get_error"] = asm["P"]; + Module["_zip_file_get_error"] = asm["Q"]; + Module["_zip_error_strerror"] = asm["R"]; + Module["_zip_fclose"] = asm["S"]; + Module["_zip_file_add"] = asm["T"]; + Module["_free"] = asm["U"]; + var _malloc = Module["_malloc"] = asm["V"]; + var ___errno_location = Module["___errno_location"] = asm["W"]; + Module["_zip_source_error"] = asm["X"]; + Module["_zip_source_seek"] = asm["Y"]; + Module["_zip_file_set_external_attributes"] = asm["Z"]; + Module["_zip_file_set_mtime"] = asm["_"]; + Module["_zip_fopen"] = asm["$"]; + Module["_zip_fopen_index"] = asm["aa"]; + Module["_zip_fread"] = asm["ba"]; + Module["_zip_get_name"] = asm["ca"]; + Module["_zip_get_num_entries"] = asm["da"]; + Module["_zip_source_read"] = asm["ea"]; + Module["_zip_name_locate"] = asm["fa"]; + Module["_zip_open"] = asm["ga"]; + Module["_zip_open_from_source"] = asm["ha"]; + Module["_zip_set_file_compression"] = asm["ia"]; + Module["_zip_source_buffer"] = asm["ja"]; + Module["_zip_source_buffer_create"] = asm["ka"]; + Module["_zip_source_close"] = asm["la"]; + Module["_zip_source_free"] = asm["ma"]; + Module["_zip_source_keep"] = asm["na"]; + Module["_zip_source_open"] = asm["oa"]; + Module["_zip_source_set_mtime"] = asm["qa"]; + Module["_zip_source_tell"] = asm["ra"]; + Module["_zip_stat"] = asm["sa"]; + Module["_zip_stat_index"] = asm["ta"]; + var __get_tzname = Module["__get_tzname"] = asm["ua"]; + var __get_daylight = Module["__get_daylight"] = asm["va"]; + var __get_timezone = Module["__get_timezone"] = asm["wa"]; + var stackSave = Module["stackSave"] = asm["xa"]; + var stackRestore = Module["stackRestore"] = asm["ya"]; + var stackAlloc = Module["stackAlloc"] = asm["za"]; + Module["cwrap"] = cwrap; + Module["getValue"] = getValue; + var calledRun; + dependenciesFulfilled = function runCaller() { + if (!calledRun) + run(); + if (!calledRun) + dependenciesFulfilled = runCaller; + }; + function run(args) { + if (runDependencies > 0) { + return; + } + preRun(); + if (runDependencies > 0) { + return; + } + function doRun() { + if (calledRun) + return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) + return; + initRuntime(); + readyPromiseResolve(Module); + if (Module["onRuntimeInitialized"]) + Module["onRuntimeInitialized"](); + postRun(); + } + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function() { + setTimeout(function() { + Module["setStatus"](""); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } + } + Module["run"] = run; + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") + Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()(); + } + } + run(); + return createModule2; + }; +}(); +module.exports = createModule; +}(libzipSync)); + +const createModule = libzipSync.exports; + +const number64 = [ + `number`, + `number` +]; +var Errors = /* @__PURE__ */ ((Errors2) => { + Errors2[Errors2["ZIP_ER_OK"] = 0] = "ZIP_ER_OK"; + Errors2[Errors2["ZIP_ER_MULTIDISK"] = 1] = "ZIP_ER_MULTIDISK"; + Errors2[Errors2["ZIP_ER_RENAME"] = 2] = "ZIP_ER_RENAME"; + Errors2[Errors2["ZIP_ER_CLOSE"] = 3] = "ZIP_ER_CLOSE"; + Errors2[Errors2["ZIP_ER_SEEK"] = 4] = "ZIP_ER_SEEK"; + Errors2[Errors2["ZIP_ER_READ"] = 5] = "ZIP_ER_READ"; + Errors2[Errors2["ZIP_ER_WRITE"] = 6] = "ZIP_ER_WRITE"; + Errors2[Errors2["ZIP_ER_CRC"] = 7] = "ZIP_ER_CRC"; + Errors2[Errors2["ZIP_ER_ZIPCLOSED"] = 8] = "ZIP_ER_ZIPCLOSED"; + Errors2[Errors2["ZIP_ER_NOENT"] = 9] = "ZIP_ER_NOENT"; + Errors2[Errors2["ZIP_ER_EXISTS"] = 10] = "ZIP_ER_EXISTS"; + Errors2[Errors2["ZIP_ER_OPEN"] = 11] = "ZIP_ER_OPEN"; + Errors2[Errors2["ZIP_ER_TMPOPEN"] = 12] = "ZIP_ER_TMPOPEN"; + Errors2[Errors2["ZIP_ER_ZLIB"] = 13] = "ZIP_ER_ZLIB"; + Errors2[Errors2["ZIP_ER_MEMORY"] = 14] = "ZIP_ER_MEMORY"; + Errors2[Errors2["ZIP_ER_CHANGED"] = 15] = "ZIP_ER_CHANGED"; + Errors2[Errors2["ZIP_ER_COMPNOTSUPP"] = 16] = "ZIP_ER_COMPNOTSUPP"; + Errors2[Errors2["ZIP_ER_EOF"] = 17] = "ZIP_ER_EOF"; + Errors2[Errors2["ZIP_ER_INVAL"] = 18] = "ZIP_ER_INVAL"; + Errors2[Errors2["ZIP_ER_NOZIP"] = 19] = "ZIP_ER_NOZIP"; + Errors2[Errors2["ZIP_ER_INTERNAL"] = 20] = "ZIP_ER_INTERNAL"; + Errors2[Errors2["ZIP_ER_INCONS"] = 21] = "ZIP_ER_INCONS"; + Errors2[Errors2["ZIP_ER_REMOVE"] = 22] = "ZIP_ER_REMOVE"; + Errors2[Errors2["ZIP_ER_DELETED"] = 23] = "ZIP_ER_DELETED"; + Errors2[Errors2["ZIP_ER_ENCRNOTSUPP"] = 24] = "ZIP_ER_ENCRNOTSUPP"; + Errors2[Errors2["ZIP_ER_RDONLY"] = 25] = "ZIP_ER_RDONLY"; + Errors2[Errors2["ZIP_ER_NOPASSWD"] = 26] = "ZIP_ER_NOPASSWD"; + Errors2[Errors2["ZIP_ER_WRONGPASSWD"] = 27] = "ZIP_ER_WRONGPASSWD"; + Errors2[Errors2["ZIP_ER_OPNOTSUPP"] = 28] = "ZIP_ER_OPNOTSUPP"; + Errors2[Errors2["ZIP_ER_INUSE"] = 29] = "ZIP_ER_INUSE"; + Errors2[Errors2["ZIP_ER_TELL"] = 30] = "ZIP_ER_TELL"; + Errors2[Errors2["ZIP_ER_COMPRESSED_DATA"] = 31] = "ZIP_ER_COMPRESSED_DATA"; + return Errors2; +})(Errors || {}); +const makeInterface = (libzip) => ({ + get HEAP8() { + return libzip.HEAP8; + }, + get HEAPU8() { + return libzip.HEAPU8; + }, + errors: Errors, + SEEK_SET: 0, + SEEK_CUR: 1, + SEEK_END: 2, + ZIP_CHECKCONS: 4, + ZIP_CREATE: 1, + ZIP_EXCL: 2, + ZIP_TRUNCATE: 8, + ZIP_RDONLY: 16, + ZIP_FL_OVERWRITE: 8192, + ZIP_FL_COMPRESSED: 4, + ZIP_OPSYS_DOS: 0, + ZIP_OPSYS_AMIGA: 1, + ZIP_OPSYS_OPENVMS: 2, + ZIP_OPSYS_UNIX: 3, + ZIP_OPSYS_VM_CMS: 4, + ZIP_OPSYS_ATARI_ST: 5, + ZIP_OPSYS_OS_2: 6, + ZIP_OPSYS_MACINTOSH: 7, + ZIP_OPSYS_Z_SYSTEM: 8, + ZIP_OPSYS_CPM: 9, + ZIP_OPSYS_WINDOWS_NTFS: 10, + ZIP_OPSYS_MVS: 11, + ZIP_OPSYS_VSE: 12, + ZIP_OPSYS_ACORN_RISC: 13, + ZIP_OPSYS_VFAT: 14, + ZIP_OPSYS_ALTERNATE_MVS: 15, + ZIP_OPSYS_BEOS: 16, + ZIP_OPSYS_TANDEM: 17, + ZIP_OPSYS_OS_400: 18, + ZIP_OPSYS_OS_X: 19, + ZIP_CM_DEFAULT: -1, + ZIP_CM_STORE: 0, + ZIP_CM_DEFLATE: 8, + uint08S: libzip._malloc(1), + uint16S: libzip._malloc(2), + uint32S: libzip._malloc(4), + uint64S: libzip._malloc(8), + malloc: libzip._malloc, + free: libzip._free, + getValue: libzip.getValue, + open: libzip.cwrap(`zip_open`, `number`, [`string`, `number`, `number`]), + openFromSource: libzip.cwrap(`zip_open_from_source`, `number`, [`number`, `number`, `number`]), + close: libzip.cwrap(`zip_close`, `number`, [`number`]), + discard: libzip.cwrap(`zip_discard`, null, [`number`]), + getError: libzip.cwrap(`zip_get_error`, `number`, [`number`]), + getName: libzip.cwrap(`zip_get_name`, `string`, [`number`, `number`, `number`]), + getNumEntries: libzip.cwrap(`zip_get_num_entries`, `number`, [`number`, `number`]), + delete: libzip.cwrap(`zip_delete`, `number`, [`number`, `number`]), + stat: libzip.cwrap(`zip_stat`, `number`, [`number`, `string`, `number`, `number`]), + statIndex: libzip.cwrap(`zip_stat_index`, `number`, [`number`, ...number64, `number`, `number`]), + fopen: libzip.cwrap(`zip_fopen`, `number`, [`number`, `string`, `number`]), + fopenIndex: libzip.cwrap(`zip_fopen_index`, `number`, [`number`, ...number64, `number`]), + fread: libzip.cwrap(`zip_fread`, `number`, [`number`, `number`, `number`, `number`]), + fclose: libzip.cwrap(`zip_fclose`, `number`, [`number`]), + dir: { + add: libzip.cwrap(`zip_dir_add`, `number`, [`number`, `string`]) + }, + file: { + add: libzip.cwrap(`zip_file_add`, `number`, [`number`, `string`, `number`, `number`]), + getError: libzip.cwrap(`zip_file_get_error`, `number`, [`number`]), + getExternalAttributes: libzip.cwrap(`zip_file_get_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), + setExternalAttributes: libzip.cwrap(`zip_file_set_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), + setMtime: libzip.cwrap(`zip_file_set_mtime`, `number`, [`number`, ...number64, `number`, `number`]), + setCompression: libzip.cwrap(`zip_set_file_compression`, `number`, [`number`, ...number64, `number`, `number`]) + }, + ext: { + countSymlinks: libzip.cwrap(`zip_ext_count_symlinks`, `number`, [`number`]) + }, + error: { + initWithCode: libzip.cwrap(`zip_error_init_with_code`, null, [`number`, `number`]), + strerror: libzip.cwrap(`zip_error_strerror`, `string`, [`number`]) + }, + name: { + locate: libzip.cwrap(`zip_name_locate`, `number`, [`number`, `string`, `number`]) + }, + source: { + fromUnattachedBuffer: libzip.cwrap(`zip_source_buffer_create`, `number`, [`number`, ...number64, `number`, `number`]), + fromBuffer: libzip.cwrap(`zip_source_buffer`, `number`, [`number`, `number`, ...number64, `number`]), + free: libzip.cwrap(`zip_source_free`, null, [`number`]), + keep: libzip.cwrap(`zip_source_keep`, null, [`number`]), + open: libzip.cwrap(`zip_source_open`, `number`, [`number`]), + close: libzip.cwrap(`zip_source_close`, `number`, [`number`]), + seek: libzip.cwrap(`zip_source_seek`, `number`, [`number`, ...number64, `number`]), + tell: libzip.cwrap(`zip_source_tell`, `number`, [`number`]), + read: libzip.cwrap(`zip_source_read`, `number`, [`number`, `number`, `number`]), + error: libzip.cwrap(`zip_source_error`, `number`, [`number`]), + setMtime: libzip.cwrap(`zip_source_set_mtime`, `number`, [`number`, `number`]) + }, + struct: { + stat: libzip.cwrap(`zipstruct_stat`, `number`, []), + statS: libzip.cwrap(`zipstruct_statS`, `number`, []), + statName: libzip.cwrap(`zipstruct_stat_name`, `string`, [`number`]), + statIndex: libzip.cwrap(`zipstruct_stat_index`, `number`, [`number`]), + statSize: libzip.cwrap(`zipstruct_stat_size`, `number`, [`number`]), + statCompSize: libzip.cwrap(`zipstruct_stat_comp_size`, `number`, [`number`]), + statCompMethod: libzip.cwrap(`zipstruct_stat_comp_method`, `number`, [`number`]), + statMtime: libzip.cwrap(`zipstruct_stat_mtime`, `number`, [`number`]), + statCrc: libzip.cwrap(`zipstruct_stat_crc`, `number`, [`number`]), + error: libzip.cwrap(`zipstruct_error`, `number`, []), + errorS: libzip.cwrap(`zipstruct_errorS`, `number`, []), + errorCodeZip: libzip.cwrap(`zipstruct_error_code_zip`, `number`, [`number`]) + } +}); + +let mod = null; +function getLibzipSync() { + if (mod === null) + mod = makeInterface(createModule()); + return mod; +} + +var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => { + ErrorCode2["API_ERROR"] = `API_ERROR`; + ErrorCode2["BUILTIN_NODE_RESOLUTION_FAILED"] = `BUILTIN_NODE_RESOLUTION_FAILED`; + ErrorCode2["EXPORTS_RESOLUTION_FAILED"] = `EXPORTS_RESOLUTION_FAILED`; + ErrorCode2["MISSING_DEPENDENCY"] = `MISSING_DEPENDENCY`; + ErrorCode2["MISSING_PEER_DEPENDENCY"] = `MISSING_PEER_DEPENDENCY`; + ErrorCode2["QUALIFIED_PATH_RESOLUTION_FAILED"] = `QUALIFIED_PATH_RESOLUTION_FAILED`; + ErrorCode2["INTERNAL"] = `INTERNAL`; + ErrorCode2["UNDECLARED_DEPENDENCY"] = `UNDECLARED_DEPENDENCY`; + ErrorCode2["UNSUPPORTED"] = `UNSUPPORTED`; + return ErrorCode2; +})(ErrorCode || {}); +const MODULE_NOT_FOUND_ERRORS = /* @__PURE__ */ new Set([ + "BUILTIN_NODE_RESOLUTION_FAILED" /* BUILTIN_NODE_RESOLUTION_FAILED */, + "MISSING_DEPENDENCY" /* MISSING_DEPENDENCY */, + "MISSING_PEER_DEPENDENCY" /* MISSING_PEER_DEPENDENCY */, + "QUALIFIED_PATH_RESOLUTION_FAILED" /* QUALIFIED_PATH_RESOLUTION_FAILED */, + "UNDECLARED_DEPENDENCY" /* UNDECLARED_DEPENDENCY */ +]); +function makeError(pnpCode, message, data = {}, code) { + code != null ? code : code = MODULE_NOT_FOUND_ERRORS.has(pnpCode) ? `MODULE_NOT_FOUND` : pnpCode; + const propertySpec = { + configurable: true, + writable: true, + enumerable: false + }; + return Object.defineProperties(new Error(message), { + code: { + ...propertySpec, + value: code + }, + pnpCode: { + ...propertySpec, + value: pnpCode + }, + data: { + ...propertySpec, + value: data + } + }); +} +function getIssuerModule(parent) { + let issuer = parent; + while (issuer && (issuer.id === `[eval]` || issuer.id === `` || !issuer.filename)) + issuer = issuer.parent; + return issuer || null; +} +function getPathForDisplay(p) { + return npath.normalize(npath.fromPortablePath(p)); +} + +const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); +const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13; + +const builtinModules = new Set(require$$0.Module.builtinModules || Object.keys(process.binding(`natives`))); +const isBuiltinModule = (request) => request.startsWith(`node:`) || builtinModules.has(request); +function readPackageScope(checkPath) { + const rootSeparatorIndex = checkPath.indexOf(npath.sep); + let separatorIndex; + do { + separatorIndex = checkPath.lastIndexOf(npath.sep); + checkPath = checkPath.slice(0, separatorIndex); + if (checkPath.endsWith(`${npath.sep}node_modules`)) + return false; + const pjson = readPackage(checkPath + npath.sep); + if (pjson) { + return { + data: pjson, + path: checkPath + }; + } + } while (separatorIndex > rootSeparatorIndex); + return false; +} +function readPackage(requestPath) { + const jsonPath = npath.resolve(requestPath, `package.json`); + if (!fs__default.default.existsSync(jsonPath)) + return null; + return JSON.parse(fs__default.default.readFileSync(jsonPath, `utf8`)); +} +function ERR_REQUIRE_ESM(filename, parentPath = null) { + const basename = parentPath && path__default.default.basename(filename) === path__default.default.basename(parentPath) ? filename : path__default.default.basename(filename); + const msg = `require() of ES Module ${filename}${parentPath ? ` from ${parentPath}` : ``} not supported. +Instead change the require of ${basename} in ${parentPath} to a dynamic import() which is available in all CommonJS modules.`; + const err = new Error(msg); + err.code = `ERR_REQUIRE_ESM`; + return err; +} +function reportRequiredFilesToWatchMode(files) { + if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { + files = files.map((filename) => npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename)))); + if (WATCH_MODE_MESSAGE_USES_ARRAYS) { + process.send({ "watch:require": files }); + } else { + for (const filename of files) { + process.send({ "watch:require": filename }); + } + } + } +} + +function applyPatch(pnpapi, opts) { + let enableNativeHooks = true; + process.versions.pnp = String(pnpapi.VERSIONS.std); + const moduleExports = require$$0__default.default; + moduleExports.findPnpApi = (lookupSource) => { + const lookupPath = lookupSource instanceof url.URL ? url.fileURLToPath(lookupSource) : lookupSource; + const apiPath = opts.manager.findApiPathFor(lookupPath); + if (apiPath === null) + return null; + const apiEntry = opts.manager.getApiEntry(apiPath, true); + return apiEntry.instance.findPackageLocator(lookupPath) ? apiEntry.instance : null; + }; + function getRequireStack(parent) { + const requireStack = []; + for (let cursor = parent; cursor; cursor = cursor.parent) + requireStack.push(cursor.filename || cursor.id); + return requireStack; + } + const originalModuleLoad = require$$0.Module._load; + require$$0.Module._load = function(request, parent, isMain) { + if (request === `pnpapi`) { + const parentApiPath = opts.manager.getApiPathFromParent(parent); + if (parentApiPath) { + return opts.manager.getApiEntry(parentApiPath, true).instance; + } + } + return originalModuleLoad.call(require$$0.Module, request, parent, isMain); + }; + function getIssuerSpecsFromPaths(paths) { + return paths.map((path) => ({ + apiPath: opts.manager.findApiPathFor(path), + path, + module: null + })); + } + function getIssuerSpecsFromModule(module) { + var _a; + if (module && module.id !== `` && module.id !== `internal/preload` && !module.parent && !module.filename && module.paths.length > 0) { + return [{ + apiPath: opts.manager.findApiPathFor(module.paths[0]), + path: module.paths[0], + module + }]; + } + const issuer = getIssuerModule(module); + if (issuer !== null) { + const path = npath.dirname(issuer.filename); + const apiPath = opts.manager.getApiPathFromParent(issuer); + return [{ apiPath, path, module }]; + } else { + const path = process.cwd(); + const apiPath = (_a = opts.manager.findApiPathFor(npath.join(path, `[file]`))) != null ? _a : opts.manager.getApiPathFromParent(null); + return [{ apiPath, path, module }]; + } + } + function makeFakeParent(path) { + const fakeParent = new require$$0.Module(``); + const fakeFilePath = npath.join(path, `[file]`); + fakeParent.paths = require$$0.Module._nodeModulePaths(fakeFilePath); + return fakeParent; + } + const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/; + const originalModuleResolveFilename = require$$0.Module._resolveFilename; + require$$0.Module._resolveFilename = function(request, parent, isMain, options) { + if (isBuiltinModule(request)) + return request; + if (!enableNativeHooks) + return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, options); + if (options && options.plugnplay === false) { + const { plugnplay, ...rest } = options; + const forwardedOptions = Object.keys(rest).length > 0 ? rest : void 0; + try { + enableNativeHooks = false; + return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, forwardedOptions); + } finally { + enableNativeHooks = true; + } + } + if (options) { + const optionNames = new Set(Object.keys(options)); + optionNames.delete(`paths`); + optionNames.delete(`plugnplay`); + if (optionNames.size > 0) { + throw makeError( + ErrorCode.UNSUPPORTED, + `Some options passed to require() aren't supported by PnP yet (${Array.from(optionNames).join(`, `)})` + ); + } + } + const issuerSpecs = options && options.paths ? getIssuerSpecsFromPaths(options.paths) : getIssuerSpecsFromModule(parent); + if (request.match(pathRegExp) === null) { + const parentDirectory = (parent == null ? void 0 : parent.filename) != null ? npath.dirname(parent.filename) : null; + const absoluteRequest = npath.isAbsolute(request) ? request : parentDirectory !== null ? npath.resolve(parentDirectory, request) : null; + if (absoluteRequest !== null) { + const apiPath = parent && parentDirectory === npath.dirname(absoluteRequest) ? opts.manager.getApiPathFromParent(parent) : opts.manager.findApiPathFor(absoluteRequest); + if (apiPath !== null) { + issuerSpecs.unshift({ + apiPath, + path: parentDirectory, + module: null + }); + } + } + } + let firstError; + for (const { apiPath, path, module } of issuerSpecs) { + let resolution; + const issuerApi = apiPath !== null ? opts.manager.getApiEntry(apiPath, true).instance : null; + try { + if (issuerApi !== null) { + resolution = issuerApi.resolveRequest(request, path !== null ? `${path}/` : null); + } else { + if (path === null) + throw new Error(`Assertion failed: Expected the path to be set`); + resolution = originalModuleResolveFilename.call(require$$0.Module, request, module || makeFakeParent(path), isMain); + } + } catch (error) { + firstError = firstError || error; + continue; + } + if (resolution !== null) { + return resolution; + } + } + const requireStack = getRequireStack(parent); + Object.defineProperty(firstError, `requireStack`, { + configurable: true, + writable: true, + enumerable: false, + value: requireStack + }); + if (requireStack.length > 0) + firstError.message += ` +Require stack: +- ${requireStack.join(` +- `)}`; + if (typeof firstError.pnpCode === `string`) + Error.captureStackTrace(firstError); + throw firstError; + }; + const originalFindPath = require$$0.Module._findPath; + require$$0.Module._findPath = function(request, paths, isMain) { + if (request === `pnpapi`) + return false; + if (!enableNativeHooks) + return originalFindPath.call(require$$0.Module, request, paths, isMain); + const isAbsolute = npath.isAbsolute(request); + if (isAbsolute) + paths = [``]; + else if (!paths || paths.length === 0) + return false; + for (const path of paths) { + let resolution; + try { + const pnpApiPath = opts.manager.findApiPathFor(isAbsolute ? request : path); + if (pnpApiPath !== null) { + const api = opts.manager.getApiEntry(pnpApiPath, true).instance; + resolution = api.resolveRequest(request, path) || false; + } else { + resolution = originalFindPath.call(require$$0.Module, request, [path], isMain); + } + } catch (error) { + continue; + } + if (resolution) { + return resolution; + } + } + return false; + }; + const originalExtensionJSFunction = require$$0.Module._extensions[`.js`]; + require$$0.Module._extensions[`.js`] = function(module, filename) { + var _a, _b; + if (filename.endsWith(`.js`)) { + const pkg = readPackageScope(filename); + if (pkg && ((_a = pkg.data) == null ? void 0 : _a.type) === `module`) { + const err = ERR_REQUIRE_ESM(filename, (_b = module.parent) == null ? void 0 : _b.filename); + Error.captureStackTrace(err); + throw err; + } + } + originalExtensionJSFunction.call(this, module, filename); + }; + const originalDlopen = process.dlopen; + process.dlopen = function(...args) { + const [module, filename, ...rest] = args; + return originalDlopen.call( + this, + module, + npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename))), + ...rest + ); + }; + const originalEmit = process.emit; + process.emit = function(name, data, ...args) { + if (name === `warning` && typeof data === `object` && data.name === `ExperimentalWarning` && (data.message.includes(`--experimental-loader`) || data.message.includes(`Custom ESM Loaders is an experimental feature`))) + return false; + return originalEmit.apply(process, arguments); + }; + patchFs(fs__default.default, new PosixFS(opts.fakeFs)); +} + +function hydrateRuntimeState(data, { basePath }) { + const portablePath = npath.toPortablePath(basePath); + const absolutePortablePath = ppath.resolve(portablePath); + const ignorePattern = data.ignorePatternData !== null ? new RegExp(data.ignorePatternData) : null; + const packageLocatorsByLocations = /* @__PURE__ */ new Map(); + const packageRegistry = new Map(data.packageRegistryData.map(([packageName, packageStoreData]) => { + return [packageName, new Map(packageStoreData.map(([packageReference, packageInformationData]) => { + var _a; + if (packageName === null !== (packageReference === null)) + throw new Error(`Assertion failed: The name and reference should be null, or neither should`); + const discardFromLookup = (_a = packageInformationData.discardFromLookup) != null ? _a : false; + const packageLocator = { name: packageName, reference: packageReference }; + const entry = packageLocatorsByLocations.get(packageInformationData.packageLocation); + if (!entry) { + packageLocatorsByLocations.set(packageInformationData.packageLocation, { locator: packageLocator, discardFromLookup }); + } else { + entry.discardFromLookup = entry.discardFromLookup && discardFromLookup; + if (!discardFromLookup) { + entry.locator = packageLocator; + } + } + let resolvedPackageLocation = null; + return [packageReference, { + packageDependencies: new Map(packageInformationData.packageDependencies), + packagePeers: new Set(packageInformationData.packagePeers), + linkType: packageInformationData.linkType, + discardFromLookup, + get packageLocation() { + return resolvedPackageLocation || (resolvedPackageLocation = ppath.join(absolutePortablePath, packageInformationData.packageLocation)); + } + }]; + }))]; + })); + const fallbackExclusionList = new Map(data.fallbackExclusionList.map(([packageName, packageReferences]) => { + return [packageName, new Set(packageReferences)]; + })); + const fallbackPool = new Map(data.fallbackPool); + const dependencyTreeRoots = data.dependencyTreeRoots; + const enableTopLevelFallback = data.enableTopLevelFallback; + return { + basePath: portablePath, + dependencyTreeRoots, + enableTopLevelFallback, + fallbackExclusionList, + fallbackPool, + ignorePattern, + packageLocatorsByLocations, + packageRegistry + }; +} + +const ArrayIsArray = Array.isArray; +const JSONStringify = JSON.stringify; +const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; +const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); +const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); +const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); +const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); +const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); +const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); +const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); +const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); +const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); +const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); +const SafeMap = Map; +const JSONParse = JSON.parse; + +function createErrorType(code, messageCreator, errorType) { + return class extends errorType { + constructor(...args) { + super(messageCreator(...args)); + this.code = code; + this.name = `${errorType.name} [${code}]`; + } + }; +} +const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( + `ERR_PACKAGE_IMPORT_NOT_DEFINED`, + (specifier, packagePath, base) => { + return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; + }, + TypeError +); +const ERR_INVALID_MODULE_SPECIFIER = createErrorType( + `ERR_INVALID_MODULE_SPECIFIER`, + (request, reason, base = void 0) => { + return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; + }, + TypeError +); +const ERR_INVALID_PACKAGE_TARGET = createErrorType( + `ERR_INVALID_PACKAGE_TARGET`, + (pkgPath, key, target, isImport = false, base = void 0) => { + const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); + if (key === `.`) { + assert__default.default(isImport === false); + return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + } + return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( + target + )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + }, + Error +); +const ERR_INVALID_PACKAGE_CONFIG = createErrorType( + `ERR_INVALID_PACKAGE_CONFIG`, + (path, base, message) => { + return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; + }, + Error +); +const ERR_PACKAGE_PATH_NOT_EXPORTED = createErrorType( + "ERR_PACKAGE_PATH_NOT_EXPORTED", + (pkgPath, subpath, base = void 0) => { + if (subpath === ".") + return `No "exports" main defined in ${pkgPath}package.json${base ? ` imported from ${base}` : ""}`; + return `Package subpath '${subpath}' is not defined by "exports" in ${pkgPath}package.json${base ? ` imported from ${base}` : ""}`; + }, + Error +); + +function filterOwnProperties(source, keys) { + const filtered = /* @__PURE__ */ Object.create(null); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (ObjectPrototypeHasOwnProperty(source, key)) { + filtered[key] = source[key]; + } + } + return filtered; +} + +const packageJSONCache = new SafeMap(); +function getPackageConfig(path, specifier, base, readFileSyncFn) { + const existing = packageJSONCache.get(path); + if (existing !== void 0) { + return existing; + } + const source = readFileSyncFn(path); + if (source === void 0) { + const packageConfig2 = { + pjsonPath: path, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(path, packageConfig2); + return packageConfig2; + } + let packageJSON; + try { + packageJSON = JSONParse(source); + } catch (error) { + throw new ERR_INVALID_PACKAGE_CONFIG( + path, + (base ? `"${specifier}" from ` : "") + url.fileURLToPath(base || specifier), + error.message + ); + } + let { imports, main, name, type } = filterOwnProperties(packageJSON, [ + "imports", + "main", + "name", + "type" + ]); + const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; + if (typeof imports !== "object" || imports === null) { + imports = void 0; + } + if (typeof main !== "string") { + main = void 0; + } + if (typeof name !== "string") { + name = void 0; + } + if (type !== "module" && type !== "commonjs") { + type = "none"; + } + const packageConfig = { + pjsonPath: path, + exists: true, + main, + name, + type, + exports, + imports + }; + packageJSONCache.set(path, packageConfig); + return packageConfig; +} +function getPackageScopeConfig(resolved, readFileSyncFn) { + let packageJSONUrl = new URL("./package.json", resolved); + while (true) { + const packageJSONPath2 = packageJSONUrl.pathname; + if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { + break; + } + const packageConfig2 = getPackageConfig( + url.fileURLToPath(packageJSONUrl), + resolved, + void 0, + readFileSyncFn + ); + if (packageConfig2.exists) { + return packageConfig2; + } + const lastPackageJSONUrl = packageJSONUrl; + packageJSONUrl = new URL("../package.json", packageJSONUrl); + if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { + break; + } + } + const packageJSONPath = url.fileURLToPath(packageJSONUrl); + const packageConfig = { + pjsonPath: packageJSONPath, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(packageJSONPath, packageConfig); + return packageConfig; +} + +/** + @license + Copyright Node.js contributors. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. +*/ +function throwImportNotDefined(specifier, packageJSONUrl, base) { + throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( + specifier, + packageJSONUrl && url.fileURLToPath(new URL(".", packageJSONUrl)), + url.fileURLToPath(base) + ); +} +function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { + const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${url.fileURLToPath(packageJSONUrl)}`; + throw new ERR_INVALID_MODULE_SPECIFIER( + subpath, + reason, + base && url.fileURLToPath(base) + ); +} +function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { + if (typeof target === "object" && target !== null) { + target = JSONStringify(target, null, ""); + } else { + target = `${target}`; + } + throw new ERR_INVALID_PACKAGE_TARGET( + url.fileURLToPath(new URL(".", packageJSONUrl)), + subpath, + target, + internal, + base && url.fileURLToPath(base) + ); +} +const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; +const patternRegEx = /\*/g; +function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { + if (subpath !== "" && !pattern && target[target.length - 1] !== "/") + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (!StringPrototypeStartsWith(target, "./")) { + if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { + let isURL = false; + try { + new URL(target); + isURL = true; + } catch { + } + if (!isURL) { + const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; + return exportTarget; + } + } + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + } + if (RegExpPrototypeExec( + invalidSegmentRegEx, + StringPrototypeSlice(target, 2) + ) !== null) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + const resolved = new URL(target, packageJSONUrl); + const resolvedPath = resolved.pathname; + const packagePath = new URL(".", packageJSONUrl).pathname; + if (!StringPrototypeStartsWith(resolvedPath, packagePath)) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (subpath === "") + return resolved; + if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { + const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; + throwInvalidSubpath(request, packageJSONUrl, internal, base); + } + if (pattern) { + return new URL( + RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) + ); + } + return new URL(subpath, resolved); +} +function isArrayIndex(key) { + const keyNum = +key; + if (`${keyNum}` !== key) + return false; + return keyNum >= 0 && keyNum < 4294967295; +} +function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { + if (typeof target === "string") { + return resolvePackageTargetString( + target, + subpath, + packageSubpath, + packageJSONUrl, + base, + pattern, + internal); + } else if (ArrayIsArray(target)) { + if (target.length === 0) { + return null; + } + let lastException; + for (let i = 0; i < target.length; i++) { + const targetItem = target[i]; + let resolveResult; + try { + resolveResult = resolvePackageTarget( + packageJSONUrl, + targetItem, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + } catch (e) { + lastException = e; + if (e.code === "ERR_INVALID_PACKAGE_TARGET") { + continue; + } + throw e; + } + if (resolveResult === void 0) { + continue; + } + if (resolveResult === null) { + lastException = null; + continue; + } + return resolveResult; + } + if (lastException === void 0 || lastException === null) + return lastException; + throw lastException; + } else if (typeof target === "object" && target !== null) { + const keys = ObjectGetOwnPropertyNames(target); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (isArrayIndex(key)) { + throw new ERR_INVALID_PACKAGE_CONFIG( + url.fileURLToPath(packageJSONUrl), + base, + '"exports" cannot contain numeric property keys.' + ); + } + } + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (key === "default" || conditions.has(key)) { + const conditionalTarget = target[key]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + conditionalTarget, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + if (resolveResult === void 0) + continue; + return resolveResult; + } + } + return void 0; + } else if (target === null) { + return null; + } + throwInvalidPackageTarget( + packageSubpath, + target, + packageJSONUrl, + internal, + base + ); +} +function patternKeyCompare(a, b) { + const aPatternIndex = StringPrototypeIndexOf(a, "*"); + const bPatternIndex = StringPrototypeIndexOf(b, "*"); + const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; + const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; + if (baseLenA > baseLenB) + return -1; + if (baseLenB > baseLenA) + return 1; + if (aPatternIndex === -1) + return 1; + if (bPatternIndex === -1) + return -1; + if (a.length > b.length) + return -1; + if (b.length > a.length) + return 1; + return 0; +} +function isConditionalExportsMainSugar(exports, packageJSONUrl, base) { + if (typeof exports === "string" || ArrayIsArray(exports)) + return true; + if (typeof exports !== "object" || exports === null) + return false; + const keys = ObjectGetOwnPropertyNames(exports); + let isConditionalSugar = false; + let i = 0; + for (let j = 0; j < keys.length; j++) { + const key = keys[j]; + const curIsConditionalSugar = key === "" || key[0] !== "."; + if (i++ === 0) { + isConditionalSugar = curIsConditionalSugar; + } else if (isConditionalSugar !== curIsConditionalSugar) { + throw new ERR_INVALID_PACKAGE_CONFIG( + url.fileURLToPath(packageJSONUrl), + base, + `"exports" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.` + ); + } + } + return isConditionalSugar; +} +function throwExportsNotFound(subpath, packageJSONUrl, base) { + throw new ERR_PACKAGE_PATH_NOT_EXPORTED( + url.fileURLToPath(new URL(".", packageJSONUrl)), + subpath, + base && url.fileURLToPath(base) + ); +} +const emittedPackageWarnings = /* @__PURE__ */ new Set(); +function emitTrailingSlashPatternDeprecation(match, pjsonUrl, base) { + const pjsonPath = url.fileURLToPath(pjsonUrl); + if (emittedPackageWarnings.has(pjsonPath + "|" + match)) + return; + emittedPackageWarnings.add(pjsonPath + "|" + match); + process.emitWarning( + `Use of deprecated trailing slash pattern mapping "${match}" in the "exports" field module resolution of the package at ${pjsonPath}${base ? ` imported from ${url.fileURLToPath(base)}` : ""}. Mapping specifiers ending in "/" is no longer supported.`, + "DeprecationWarning", + "DEP0155" + ); +} +function packageExportsResolve({ + packageJSONUrl, + packageSubpath, + exports, + base, + conditions +}) { + if (isConditionalExportsMainSugar(exports, packageJSONUrl, base)) + exports = { ".": exports }; + if (ObjectPrototypeHasOwnProperty(exports, packageSubpath) && !StringPrototypeIncludes(packageSubpath, "*") && !StringPrototypeEndsWith(packageSubpath, "/")) { + const target = exports[packageSubpath]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + "", + packageSubpath, + base, + false, + false, + conditions + ); + if (resolveResult == null) { + throwExportsNotFound(packageSubpath, packageJSONUrl, base); + } + return resolveResult; + } + let bestMatch = ""; + let bestMatchSubpath; + const keys = ObjectGetOwnPropertyNames(exports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const patternIndex = StringPrototypeIndexOf(key, "*"); + if (patternIndex !== -1 && StringPrototypeStartsWith( + packageSubpath, + StringPrototypeSlice(key, 0, patternIndex) + )) { + if (StringPrototypeEndsWith(packageSubpath, "/")) + emitTrailingSlashPatternDeprecation( + packageSubpath, + packageJSONUrl, + base + ); + const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); + if (packageSubpath.length >= key.length && StringPrototypeEndsWith(packageSubpath, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { + bestMatch = key; + bestMatchSubpath = StringPrototypeSlice( + packageSubpath, + patternIndex, + packageSubpath.length - patternTrailer.length + ); + } + } + } + if (bestMatch) { + const target = exports[bestMatch]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + bestMatchSubpath, + bestMatch, + base, + true, + false, + conditions + ); + if (resolveResult == null) { + throwExportsNotFound(packageSubpath, packageJSONUrl, base); + } + return resolveResult; + } + throwExportsNotFound(packageSubpath, packageJSONUrl, base); +} +function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { + if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { + const reason = "is not a valid internal imports specifier name"; + throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, url.fileURLToPath(base)); + } + let packageJSONUrl; + const packageConfig = getPackageScopeConfig(base, readFileSyncFn); + if (packageConfig.exists) { + packageJSONUrl = url.pathToFileURL(packageConfig.pjsonPath); + const imports = packageConfig.imports; + if (imports) { + if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { + const resolveResult = resolvePackageTarget( + packageJSONUrl, + imports[name], + "", + name, + base, + false, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } else { + let bestMatch = ""; + let bestMatchSubpath; + const keys = ObjectGetOwnPropertyNames(imports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const patternIndex = StringPrototypeIndexOf(key, "*"); + if (patternIndex !== -1 && StringPrototypeStartsWith( + name, + StringPrototypeSlice(key, 0, patternIndex) + )) { + const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); + if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { + bestMatch = key; + bestMatchSubpath = StringPrototypeSlice( + name, + patternIndex, + name.length - patternTrailer.length + ); + } + } + } + if (bestMatch) { + const target = imports[bestMatch]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + bestMatchSubpath, + bestMatch, + base, + true, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } + } + } + } + throwImportNotDefined(name, packageJSONUrl, base); +} + +const flagSymbol = Symbol('arg flag'); + +class ArgError extends Error { + constructor(msg, code) { + super(msg); + this.name = 'ArgError'; + this.code = code; + + Object.setPrototypeOf(this, ArgError.prototype); + } +} + +function arg( + opts, + { + argv = process.argv.slice(2), + permissive = false, + stopAtPositional = false + } = {} +) { + if (!opts) { + throw new ArgError( + 'argument specification object is required', + 'ARG_CONFIG_NO_SPEC' + ); + } + + const result = { _: [] }; + + const aliases = {}; + const handlers = {}; + + for (const key of Object.keys(opts)) { + if (!key) { + throw new ArgError( + 'argument key cannot be an empty string', + 'ARG_CONFIG_EMPTY_KEY' + ); + } + + if (key[0] !== '-') { + throw new ArgError( + `argument key must start with '-' but found: '${key}'`, + 'ARG_CONFIG_NONOPT_KEY' + ); + } + + if (key.length === 1) { + throw new ArgError( + `argument key must have a name; singular '-' keys are not allowed: ${key}`, + 'ARG_CONFIG_NONAME_KEY' + ); + } + + if (typeof opts[key] === 'string') { + aliases[key] = opts[key]; + continue; + } + + let type = opts[key]; + let isFlag = false; + + if ( + Array.isArray(type) && + type.length === 1 && + typeof type[0] === 'function' + ) { + const [fn] = type; + type = (value, name, prev = []) => { + prev.push(fn(value, name, prev[prev.length - 1])); + return prev; + }; + isFlag = fn === Boolean || fn[flagSymbol] === true; + } else if (typeof type === 'function') { + isFlag = type === Boolean || type[flagSymbol] === true; + } else { + throw new ArgError( + `type missing or not a function or valid array type: ${key}`, + 'ARG_CONFIG_VAD_TYPE' + ); + } + + if (key[1] !== '-' && key.length > 2) { + throw new ArgError( + `short argument keys (with a single hyphen) must have only one character: ${key}`, + 'ARG_CONFIG_SHORTOPT_TOOLONG' + ); + } + + handlers[key] = [type, isFlag]; + } + + for (let i = 0, len = argv.length; i < len; i++) { + const wholeArg = argv[i]; + + if (stopAtPositional && result._.length > 0) { + result._ = result._.concat(argv.slice(i)); + break; + } + + if (wholeArg === '--') { + result._ = result._.concat(argv.slice(i + 1)); + break; + } + + if (wholeArg.length > 1 && wholeArg[0] === '-') { + /* eslint-disable operator-linebreak */ + const separatedArguments = + wholeArg[1] === '-' || wholeArg.length === 2 + ? [wholeArg] + : wholeArg + .slice(1) + .split('') + .map((a) => `-${a}`); + /* eslint-enable operator-linebreak */ + + for (let j = 0; j < separatedArguments.length; j++) { + const arg = separatedArguments[j]; + const [originalArgName, argStr] = + arg[1] === '-' ? arg.split(/=(.*)/, 2) : [arg, undefined]; + + let argName = originalArgName; + while (argName in aliases) { + argName = aliases[argName]; + } + + if (!(argName in handlers)) { + if (permissive) { + result._.push(arg); + continue; + } else { + throw new ArgError( + `unknown or unexpected option: ${originalArgName}`, + 'ARG_UNKNOWN_OPTION' + ); + } + } + + const [type, isFlag] = handlers[argName]; + + if (!isFlag && j + 1 < separatedArguments.length) { + throw new ArgError( + `option requires argument (but was followed by another short argument): ${originalArgName}`, + 'ARG_MISSING_REQUIRED_SHORTARG' + ); + } + + if (isFlag) { + result[argName] = type(true, argName, result[argName]); + } else if (argStr === undefined) { + if ( + argv.length < i + 2 || + (argv[i + 1].length > 1 && + argv[i + 1][0] === '-' && + !( + argv[i + 1].match(/^-?\d*(\.(?=\d))?\d*$/) && + (type === Number || + // eslint-disable-next-line no-undef + (typeof BigInt !== 'undefined' && type === BigInt)) + )) + ) { + const extended = + originalArgName === argName ? '' : ` (alias for ${argName})`; + throw new ArgError( + `option requires argument: ${originalArgName}${extended}`, + 'ARG_MISSING_REQUIRED_LONGARG' + ); + } + + result[argName] = type(argv[i + 1], argName, result[argName]); + ++i; + } else { + result[argName] = type(argStr, argName, result[argName]); + } + } + } else { + result._.push(wholeArg); + } + } + + return result; +} + +arg.flag = (fn) => { + fn[flagSymbol] = true; + return fn; +}; + +// Utility types +arg.COUNT = arg.flag((v, name, existingCount) => (existingCount || 0) + 1); + +// Expose error class +arg.ArgError = ArgError; + +var arg_1 = arg; + +/** + @license + The MIT License (MIT) + + Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +function getOptionValue(opt) { + parseOptions(); + return options[opt]; +} +let options; +function parseOptions() { + if (!options) { + options = { + "--conditions": [], + ...parseArgv(getNodeOptionsEnvArgv()), + ...parseArgv(process.execArgv) + }; + } +} +function parseArgv(argv) { + return arg_1( + { + "--conditions": [String], + "-C": "--conditions" + }, + { + argv, + permissive: true + } + ); +} +function getNodeOptionsEnvArgv() { + const errors = []; + const envArgv = ParseNodeOptionsEnvVar(process.env.NODE_OPTIONS || "", errors); + if (errors.length !== 0) ; + return envArgv; +} +function ParseNodeOptionsEnvVar(node_options, errors) { + const env_argv = []; + let is_in_string = false; + let will_start_new_arg = true; + for (let index = 0; index < node_options.length; ++index) { + let c = node_options[index]; + if (c === "\\" && is_in_string) { + if (index + 1 === node_options.length) { + errors.push("invalid value for NODE_OPTIONS (invalid escape)\n"); + return env_argv; + } else { + c = node_options[++index]; + } + } else if (c === " " && !is_in_string) { + will_start_new_arg = true; + continue; + } else if (c === '"') { + is_in_string = !is_in_string; + continue; + } + if (will_start_new_arg) { + env_argv.push(c); + will_start_new_arg = false; + } else { + env_argv[env_argv.length - 1] += c; + } + } + if (is_in_string) { + errors.push("invalid value for NODE_OPTIONS (unterminated string)\n"); + } + return env_argv; +} + +function makeApi(runtimeState, opts) { + const alwaysWarnOnFallback = Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK) > 0; + const debugLevel = Number(process.env.PNP_DEBUG_LEVEL); + const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; + const isStrictRegExp = /^(\/|\.{1,2}(\/|$))/; + const isDirRegExp = /\/$/; + const isRelativeRegexp = /^\.{0,2}\//; + const topLevelLocator = { name: null, reference: null }; + const fallbackLocators = []; + const emittedWarnings = /* @__PURE__ */ new Set(); + if (runtimeState.enableTopLevelFallback === true) + fallbackLocators.push(topLevelLocator); + if (opts.compatibilityMode !== false) { + for (const name of [`react-scripts`, `gatsby`]) { + const packageStore = runtimeState.packageRegistry.get(name); + if (packageStore) { + for (const reference of packageStore.keys()) { + if (reference === null) { + throw new Error(`Assertion failed: This reference shouldn't be null`); + } else { + fallbackLocators.push({ name, reference }); + } + } + } + } + } + const { + ignorePattern, + packageRegistry, + packageLocatorsByLocations + } = runtimeState; + function makeLogEntry(name, args) { + return { + fn: name, + args, + error: null, + result: null + }; + } + function trace(entry) { + var _a, _b, _c, _d, _e, _f; + const colors = (_c = (_b = (_a = process.stderr) == null ? void 0 : _a.hasColors) == null ? void 0 : _b.call(_a)) != null ? _c : process.stdout.isTTY; + const c = (n, str) => `\x1B[${n}m${str}\x1B[0m`; + const error = entry.error; + if (error) + console.error(c(`31;1`, `\u2716 ${(_d = entry.error) == null ? void 0 : _d.message.replace(/\n.*/s, ``)}`)); + else + console.error(c(`33;1`, `\u203C Resolution`)); + if (entry.args.length > 0) + console.error(); + for (const arg of entry.args) + console.error(` ${c(`37;1`, `In \u2190`)} ${nodeUtils.inspect(arg, { colors, compact: true })}`); + if (entry.result) { + console.error(); + console.error(` ${c(`37;1`, `Out \u2192`)} ${nodeUtils.inspect(entry.result, { colors, compact: true })}`); + } + const stack = (_f = (_e = new Error().stack.match(/(?<=^ +)at.*/gm)) == null ? void 0 : _e.slice(2)) != null ? _f : []; + if (stack.length > 0) { + console.error(); + for (const line of stack) { + console.error(` ${c(`38;5;244`, line)}`); + } + } + console.error(); + } + function maybeLog(name, fn) { + if (opts.allowDebug === false) + return fn; + if (Number.isFinite(debugLevel)) { + if (debugLevel >= 2) { + return (...args) => { + const logEntry = makeLogEntry(name, args); + try { + return logEntry.result = fn(...args); + } catch (error) { + throw logEntry.error = error; + } finally { + trace(logEntry); + } + }; + } else if (debugLevel >= 1) { + return (...args) => { + try { + return fn(...args); + } catch (error) { + const logEntry = makeLogEntry(name, args); + logEntry.error = error; + trace(logEntry); + throw error; + } + }; + } + } + return fn; + } + function getPackageInformationSafe(packageLocator) { + const packageInformation = getPackageInformation(packageLocator); + if (!packageInformation) { + throw makeError( + ErrorCode.INTERNAL, + `Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)` + ); + } + return packageInformation; + } + function isDependencyTreeRoot(packageLocator) { + if (packageLocator.name === null) + return true; + for (const dependencyTreeRoot of runtimeState.dependencyTreeRoots) + if (dependencyTreeRoot.name === packageLocator.name && dependencyTreeRoot.reference === packageLocator.reference) + return true; + return false; + } + const defaultExportsConditions = /* @__PURE__ */ new Set([ + `node`, + `require`, + ...getOptionValue(`--conditions`) + ]); + function applyNodeExportsResolution(unqualifiedPath, conditions = defaultExportsConditions, issuer) { + const locator = findPackageLocator(ppath.join(unqualifiedPath, `internal.js`), { + resolveIgnored: true, + includeDiscardFromLookup: true + }); + if (locator === null) { + throw makeError( + ErrorCode.INTERNAL, + `The locator that owns the "${unqualifiedPath}" path can't be found inside the dependency tree (this is probably an internal error)` + ); + } + const { packageLocation } = getPackageInformationSafe(locator); + const manifestPath = ppath.join(packageLocation, Filename.manifest); + if (!opts.fakeFs.existsSync(manifestPath)) + return null; + const pkgJson = JSON.parse(opts.fakeFs.readFileSync(manifestPath, `utf8`)); + if (pkgJson.exports == null) + return null; + let subpath = ppath.contains(packageLocation, unqualifiedPath); + if (subpath === null) { + throw makeError( + ErrorCode.INTERNAL, + `unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)` + ); + } + if (subpath !== `.` && !isRelativeRegexp.test(subpath)) + subpath = `./${subpath}`; + try { + const resolvedExport = packageExportsResolve({ + packageJSONUrl: url.pathToFileURL(npath.fromPortablePath(manifestPath)), + packageSubpath: subpath, + exports: pkgJson.exports, + base: issuer ? url.pathToFileURL(npath.fromPortablePath(issuer)) : null, + conditions + }); + return npath.toPortablePath(url.fileURLToPath(resolvedExport)); + } catch (error) { + throw makeError( + ErrorCode.EXPORTS_RESOLUTION_FAILED, + error.message, + { unqualifiedPath: getPathForDisplay(unqualifiedPath), locator, pkgJson, subpath: getPathForDisplay(subpath), conditions }, + error.code + ); + } + } + function applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }) { + let stat; + try { + candidates.push(unqualifiedPath); + stat = opts.fakeFs.statSync(unqualifiedPath); + } catch (error) { + } + if (stat && !stat.isDirectory()) + return opts.fakeFs.realpathSync(unqualifiedPath); + if (stat && stat.isDirectory()) { + let pkgJson; + try { + pkgJson = JSON.parse(opts.fakeFs.readFileSync(ppath.join(unqualifiedPath, Filename.manifest), `utf8`)); + } catch (error) { + } + let nextUnqualifiedPath; + if (pkgJson && pkgJson.main) + nextUnqualifiedPath = ppath.resolve(unqualifiedPath, pkgJson.main); + if (nextUnqualifiedPath && nextUnqualifiedPath !== unqualifiedPath) { + const resolution = applyNodeExtensionResolution(nextUnqualifiedPath, candidates, { extensions }); + if (resolution !== null) { + return resolution; + } + } + } + for (let i = 0, length = extensions.length; i < length; i++) { + const candidateFile = `${unqualifiedPath}${extensions[i]}`; + candidates.push(candidateFile); + if (opts.fakeFs.existsSync(candidateFile)) { + return candidateFile; + } + } + if (stat && stat.isDirectory()) { + for (let i = 0, length = extensions.length; i < length; i++) { + const candidateFile = ppath.format({ dir: unqualifiedPath, name: `index`, ext: extensions[i] }); + candidates.push(candidateFile); + if (opts.fakeFs.existsSync(candidateFile)) { + return candidateFile; + } + } + } + return null; + } + function makeFakeModule(path) { + const fakeModule = new require$$0.Module(path, null); + fakeModule.filename = path; + fakeModule.paths = require$$0.Module._nodeModulePaths(path); + return fakeModule; + } + function callNativeResolution(request, issuer) { + if (issuer.endsWith(`/`)) + issuer = ppath.join(issuer, `internal.js`); + return require$$0.Module._resolveFilename(npath.fromPortablePath(request), makeFakeModule(npath.fromPortablePath(issuer)), false, { plugnplay: false }); + } + function isPathIgnored(path) { + if (ignorePattern === null) + return false; + const subPath = ppath.contains(runtimeState.basePath, path); + if (subPath === null) + return false; + if (ignorePattern.test(subPath.replace(/\/$/, ``))) { + return true; + } else { + return false; + } + } + const VERSIONS = { std: 3, resolveVirtual: 1, getAllLocators: 1 }; + const topLevel = topLevelLocator; + function getPackageInformation({ name, reference }) { + const packageInformationStore = packageRegistry.get(name); + if (!packageInformationStore) + return null; + const packageInformation = packageInformationStore.get(reference); + if (!packageInformation) + return null; + return packageInformation; + } + function findPackageDependents({ name, reference }) { + const dependents = []; + for (const [dependentName, packageInformationStore] of packageRegistry) { + if (dependentName === null) + continue; + for (const [dependentReference, packageInformation] of packageInformationStore) { + if (dependentReference === null) + continue; + const dependencyReference = packageInformation.packageDependencies.get(name); + if (dependencyReference !== reference) + continue; + if (dependentName === name && dependentReference === reference) + continue; + dependents.push({ + name: dependentName, + reference: dependentReference + }); + } + } + return dependents; + } + function findBrokenPeerDependencies(dependency, initialPackage) { + const brokenPackages = /* @__PURE__ */ new Map(); + const alreadyVisited = /* @__PURE__ */ new Set(); + const traversal = (currentPackage) => { + const identifier = JSON.stringify(currentPackage.name); + if (alreadyVisited.has(identifier)) + return; + alreadyVisited.add(identifier); + const dependents = findPackageDependents(currentPackage); + for (const dependent of dependents) { + const dependentInformation = getPackageInformationSafe(dependent); + if (dependentInformation.packagePeers.has(dependency)) { + traversal(dependent); + } else { + let brokenSet = brokenPackages.get(dependent.name); + if (typeof brokenSet === `undefined`) + brokenPackages.set(dependent.name, brokenSet = /* @__PURE__ */ new Set()); + brokenSet.add(dependent.reference); + } + } + }; + traversal(initialPackage); + const brokenList = []; + for (const name of [...brokenPackages.keys()].sort()) + for (const reference of [...brokenPackages.get(name)].sort()) + brokenList.push({ name, reference }); + return brokenList; + } + function findPackageLocator(location, { resolveIgnored = false, includeDiscardFromLookup = false } = {}) { + if (isPathIgnored(location) && !resolveIgnored) + return null; + let relativeLocation = ppath.relative(runtimeState.basePath, location); + if (!relativeLocation.match(isStrictRegExp)) + relativeLocation = `./${relativeLocation}`; + if (!relativeLocation.endsWith(`/`)) + relativeLocation = `${relativeLocation}/`; + do { + const entry = packageLocatorsByLocations.get(relativeLocation); + if (typeof entry === `undefined` || entry.discardFromLookup && !includeDiscardFromLookup) { + relativeLocation = relativeLocation.substring(0, relativeLocation.lastIndexOf(`/`, relativeLocation.length - 2) + 1); + continue; + } + return entry.locator; + } while (relativeLocation !== ``); + return null; + } + function tryReadFile(filePath) { + try { + return opts.fakeFs.readFileSync(npath.toPortablePath(filePath), `utf8`); + } catch (err) { + if (err.code === `ENOENT`) + return void 0; + throw err; + } + } + function resolveToUnqualified(request, issuer, { considerBuiltins = true } = {}) { + if (request.startsWith(`#`)) + throw new Error(`resolveToUnqualified can not handle private import mappings`); + if (request === `pnpapi`) + return npath.toPortablePath(opts.pnpapiResolution); + if (considerBuiltins && isBuiltinModule(request)) + return null; + const requestForDisplay = getPathForDisplay(request); + const issuerForDisplay = issuer && getPathForDisplay(issuer); + if (issuer && isPathIgnored(issuer)) { + if (!ppath.isAbsolute(request) || findPackageLocator(request) === null) { + const result = callNativeResolution(request, issuer); + if (result === false) { + throw makeError( + ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, + `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) + +Require request: "${requestForDisplay}" +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + return npath.toPortablePath(result); + } + } + let unqualifiedPath; + const dependencyNameMatch = request.match(pathRegExp); + if (!dependencyNameMatch) { + if (ppath.isAbsolute(request)) { + unqualifiedPath = ppath.normalize(request); + } else { + if (!issuer) { + throw makeError( + ErrorCode.API_ERROR, + `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + const absoluteIssuer = ppath.resolve(issuer); + if (issuer.match(isDirRegExp)) { + unqualifiedPath = ppath.normalize(ppath.join(absoluteIssuer, request)); + } else { + unqualifiedPath = ppath.normalize(ppath.join(ppath.dirname(absoluteIssuer), request)); + } + } + } else { + if (!issuer) { + throw makeError( + ErrorCode.API_ERROR, + `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + const [, dependencyName, subPath] = dependencyNameMatch; + const issuerLocator = findPackageLocator(issuer); + if (!issuerLocator) { + const result = callNativeResolution(request, issuer); + if (result === false) { + throw makeError( + ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, + `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). + +Require path: "${requestForDisplay}" +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + return npath.toPortablePath(result); + } + const issuerInformation = getPackageInformationSafe(issuerLocator); + let dependencyReference = issuerInformation.packageDependencies.get(dependencyName); + let fallbackReference = null; + if (dependencyReference == null) { + if (issuerLocator.name !== null) { + const exclusionEntry = runtimeState.fallbackExclusionList.get(issuerLocator.name); + const canUseFallbacks = !exclusionEntry || !exclusionEntry.has(issuerLocator.reference); + if (canUseFallbacks) { + for (let t = 0, T = fallbackLocators.length; t < T; ++t) { + const fallbackInformation = getPackageInformationSafe(fallbackLocators[t]); + const reference = fallbackInformation.packageDependencies.get(dependencyName); + if (reference == null) + continue; + if (alwaysWarnOnFallback) + fallbackReference = reference; + else + dependencyReference = reference; + break; + } + if (runtimeState.enableTopLevelFallback) { + if (dependencyReference == null && fallbackReference === null) { + const reference = runtimeState.fallbackPool.get(dependencyName); + if (reference != null) { + fallbackReference = reference; + } + } + } + } + } + } + let error = null; + if (dependencyReference === null) { + if (isDependencyTreeRoot(issuerLocator)) { + error = makeError( + ErrorCode.MISSING_PEER_DEPENDENCY, + `Your application tried to access ${dependencyName} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } + ); + } else { + const brokenAncestors = findBrokenPeerDependencies(dependencyName, issuerLocator); + if (brokenAncestors.every((ancestor) => isDependencyTreeRoot(ancestor))) { + error = makeError( + ErrorCode.MISSING_PEER_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) +${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} +`).join(``)} +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors } + ); + } else { + error = makeError( + ErrorCode.MISSING_PEER_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) + +${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} +`).join(``)} +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors } + ); + } + } + } else if (dependencyReference === void 0) { + if (!considerBuiltins && isBuiltinModule(request)) { + if (isDependencyTreeRoot(issuerLocator)) { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `Your application tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } + ); + } else { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in ${issuerLocator.name}'s dependencies, this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName } + ); + } + } else { + if (isDependencyTreeRoot(issuerLocator)) { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `Your application tried to access ${dependencyName}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } + ); + } else { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName } + ); + } + } + } + if (dependencyReference == null) { + if (fallbackReference === null || error === null) + throw error || new Error(`Assertion failed: Expected an error to have been set`); + dependencyReference = fallbackReference; + const message = error.message.replace(/\n.*/g, ``); + error.message = message; + if (!emittedWarnings.has(message) && debugLevel !== 0) { + emittedWarnings.add(message); + process.emitWarning(error); + } + } + const dependencyLocator = Array.isArray(dependencyReference) ? { name: dependencyReference[0], reference: dependencyReference[1] } : { name: dependencyName, reference: dependencyReference }; + const dependencyInformation = getPackageInformationSafe(dependencyLocator); + if (!dependencyInformation.packageLocation) { + throw makeError( + ErrorCode.MISSING_DEPENDENCY, + `A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. + +Required package: ${dependencyLocator.name}@${dependencyLocator.reference}${dependencyLocator.name !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyLocator: Object.assign({}, dependencyLocator) } + ); + } + const dependencyLocation = dependencyInformation.packageLocation; + if (subPath) { + unqualifiedPath = ppath.join(dependencyLocation, subPath); + } else { + unqualifiedPath = dependencyLocation; + } + } + return ppath.normalize(unqualifiedPath); + } + function resolveUnqualifiedExport(request, unqualifiedPath, conditions = defaultExportsConditions, issuer) { + if (isStrictRegExp.test(request)) + return unqualifiedPath; + const unqualifiedExportPath = applyNodeExportsResolution(unqualifiedPath, conditions, issuer); + if (unqualifiedExportPath) { + return ppath.normalize(unqualifiedExportPath); + } else { + return unqualifiedPath; + } + } + function resolveUnqualified(unqualifiedPath, { extensions = Object.keys(require$$0.Module._extensions) } = {}) { + var _a, _b; + const candidates = []; + const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }); + if (qualifiedPath) { + return ppath.normalize(qualifiedPath); + } else { + reportRequiredFilesToWatchMode(candidates.map((candidate) => npath.fromPortablePath(candidate))); + const unqualifiedPathForDisplay = getPathForDisplay(unqualifiedPath); + const containingPackage = findPackageLocator(unqualifiedPath); + if (containingPackage) { + const { packageLocation } = getPackageInformationSafe(containingPackage); + let exists = true; + try { + opts.fakeFs.accessSync(packageLocation); + } catch (err) { + if ((err == null ? void 0 : err.code) === `ENOENT`) { + exists = false; + } else { + const readableError = ((_b = (_a = err == null ? void 0 : err.message) != null ? _a : err) != null ? _b : `empty exception thrown`).replace(/^[A-Z]/, ($0) => $0.toLowerCase()); + throw makeError(ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, `Required package exists but could not be accessed (${readableError}). + +Missing package: ${containingPackage.name}@${containingPackage.reference} +Expected package location: ${getPathForDisplay(packageLocation)} +`, { unqualifiedPath: unqualifiedPathForDisplay, extensions }); + } + } + if (!exists) { + const errorMessage = packageLocation.includes(`/unplugged/`) ? `Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).` : `Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.`; + throw makeError( + ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, + `${errorMessage} + +Missing package: ${containingPackage.name}@${containingPackage.reference} +Expected package location: ${getPathForDisplay(packageLocation)} +`, + { unqualifiedPath: unqualifiedPathForDisplay, extensions } + ); + } + } + throw makeError( + ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, + `Qualified path resolution failed: we looked for the following paths, but none could be accessed. + +Source path: ${unqualifiedPathForDisplay} +${candidates.map((candidate) => `Not found: ${getPathForDisplay(candidate)} +`).join(``)}`, + { unqualifiedPath: unqualifiedPathForDisplay, extensions } + ); + } + } + function resolvePrivateRequest(request, issuer, opts2) { + var _a; + if (!issuer) + throw new Error(`Assertion failed: An issuer is required to resolve private import mappings`); + const resolved = packageImportsResolve({ + name: request, + base: url.pathToFileURL(npath.fromPortablePath(issuer)), + conditions: (_a = opts2.conditions) != null ? _a : defaultExportsConditions, + readFileSyncFn: tryReadFile + }); + if (resolved instanceof url.URL) { + return resolveUnqualified(npath.toPortablePath(url.fileURLToPath(resolved)), { extensions: opts2.extensions }); + } else { + if (resolved.startsWith(`#`)) + throw new Error(`Mapping from one private import to another isn't allowed`); + return resolveRequest(resolved, issuer, opts2); + } + } + function resolveRequest(request, issuer, opts2 = {}) { + try { + if (request.startsWith(`#`)) + return resolvePrivateRequest(request, issuer, opts2); + const { considerBuiltins, extensions, conditions } = opts2; + const unqualifiedPath = resolveToUnqualified(request, issuer, { considerBuiltins }); + if (request === `pnpapi`) + return unqualifiedPath; + if (unqualifiedPath === null) + return null; + const isIssuerIgnored = () => issuer !== null ? isPathIgnored(issuer) : false; + const remappedPath = (!considerBuiltins || !isBuiltinModule(request)) && !isIssuerIgnored() ? resolveUnqualifiedExport(request, unqualifiedPath, conditions, issuer) : unqualifiedPath; + return resolveUnqualified(remappedPath, { extensions }); + } catch (error) { + if (Object.prototype.hasOwnProperty.call(error, `pnpCode`)) + Object.assign(error.data, { request: getPathForDisplay(request), issuer: issuer && getPathForDisplay(issuer) }); + throw error; + } + } + function resolveVirtual(request) { + const normalized = ppath.normalize(request); + const resolved = VirtualFS.resolveVirtual(normalized); + return resolved !== normalized ? resolved : null; + } + return { + VERSIONS, + topLevel, + getLocator: (name, referencish) => { + if (Array.isArray(referencish)) { + return { name: referencish[0], reference: referencish[1] }; + } else { + return { name, reference: referencish }; + } + }, + getDependencyTreeRoots: () => { + return [...runtimeState.dependencyTreeRoots]; + }, + getAllLocators() { + const locators = []; + for (const [name, entry] of packageRegistry) + for (const reference of entry.keys()) + if (name !== null && reference !== null) + locators.push({ name, reference }); + return locators; + }, + getPackageInformation: (locator) => { + const info = getPackageInformation(locator); + if (info === null) + return null; + const packageLocation = npath.fromPortablePath(info.packageLocation); + const nativeInfo = { ...info, packageLocation }; + return nativeInfo; + }, + findPackageLocator: (path) => { + return findPackageLocator(npath.toPortablePath(path)); + }, + resolveToUnqualified: maybeLog(`resolveToUnqualified`, (request, issuer, opts2) => { + const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null; + const resolution = resolveToUnqualified(npath.toPortablePath(request), portableIssuer, opts2); + if (resolution === null) + return null; + return npath.fromPortablePath(resolution); + }), + resolveUnqualified: maybeLog(`resolveUnqualified`, (unqualifiedPath, opts2) => { + return npath.fromPortablePath(resolveUnqualified(npath.toPortablePath(unqualifiedPath), opts2)); + }), + resolveRequest: maybeLog(`resolveRequest`, (request, issuer, opts2) => { + const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null; + const resolution = resolveRequest(npath.toPortablePath(request), portableIssuer, opts2); + if (resolution === null) + return null; + return npath.fromPortablePath(resolution); + }), + resolveVirtual: maybeLog(`resolveVirtual`, (path) => { + const result = resolveVirtual(npath.toPortablePath(path)); + if (result !== null) { + return npath.fromPortablePath(result); + } else { + return null; + } + }) + }; +} + +function makeManager(pnpapi, opts) { + const initialApiPath = npath.toPortablePath(pnpapi.resolveToUnqualified(`pnpapi`, null)); + const initialApiStats = opts.fakeFs.statSync(npath.toPortablePath(initialApiPath)); + const apiMetadata = /* @__PURE__ */ new Map([ + [initialApiPath, { + instance: pnpapi, + stats: initialApiStats, + lastRefreshCheck: Date.now() + }] + ]); + function loadApiInstance(pnpApiPath) { + const nativePath = npath.fromPortablePath(pnpApiPath); + const module = new require$$0.Module(nativePath, null); + module.load(nativePath); + return module.exports; + } + function refreshApiEntry(pnpApiPath, apiEntry) { + const timeNow = Date.now(); + if (timeNow - apiEntry.lastRefreshCheck < 500) + return; + apiEntry.lastRefreshCheck = timeNow; + const stats = opts.fakeFs.statSync(pnpApiPath); + if (stats.mtime > apiEntry.stats.mtime) { + process.emitWarning(`[Warning] The runtime detected new informations in a PnP file; reloading the API instance (${npath.fromPortablePath(pnpApiPath)})`); + apiEntry.stats = stats; + apiEntry.instance = loadApiInstance(pnpApiPath); + } + } + function getApiEntry(pnpApiPath, refresh = false) { + let apiEntry = apiMetadata.get(pnpApiPath); + if (typeof apiEntry !== `undefined`) { + if (refresh) { + refreshApiEntry(pnpApiPath, apiEntry); + } + } else { + apiMetadata.set(pnpApiPath, apiEntry = { + instance: loadApiInstance(pnpApiPath), + stats: opts.fakeFs.statSync(pnpApiPath), + lastRefreshCheck: Date.now() + }); + } + return apiEntry; + } + const findApiPathCache = /* @__PURE__ */ new Map(); + function addToCacheAndReturn(start, end, target) { + if (target !== null) + target = VirtualFS.resolveVirtual(target); + let curr; + let next = start; + do { + curr = next; + findApiPathCache.set(curr, target); + next = ppath.dirname(curr); + } while (curr !== end); + return target; + } + function findApiPathFor(modulePath) { + let bestCandidate = null; + for (const [apiPath, apiEntry] of apiMetadata) { + const locator = apiEntry.instance.findPackageLocator(modulePath); + if (!locator) + continue; + if (apiMetadata.size === 1) + return apiPath; + const packageInformation = apiEntry.instance.getPackageInformation(locator); + if (!packageInformation) + throw new Error(`Assertion failed: Couldn't get package information for '${modulePath}'`); + if (!bestCandidate) + bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [] }; + if (packageInformation.packageLocation === bestCandidate.packageLocation) { + bestCandidate.apiPaths.push(apiPath); + } else if (packageInformation.packageLocation.length > bestCandidate.packageLocation.length) { + bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [apiPath] }; + } + } + if (bestCandidate) { + if (bestCandidate.apiPaths.length === 1) + return bestCandidate.apiPaths[0]; + const controlSegment = bestCandidate.apiPaths.map((apiPath) => ` ${npath.fromPortablePath(apiPath)}`).join(` +`); + throw new Error(`Unable to locate pnpapi, the module '${modulePath}' is controlled by multiple pnpapi instances. +This is usually caused by using the global cache (enableGlobalCache: true) + +Controlled by: +${controlSegment} +`); + } + const start = ppath.resolve(npath.toPortablePath(modulePath)); + let curr; + let next = start; + do { + curr = next; + const cached = findApiPathCache.get(curr); + if (cached !== void 0) + return addToCacheAndReturn(start, curr, cached); + const cjsCandidate = ppath.join(curr, Filename.pnpCjs); + if (opts.fakeFs.existsSync(cjsCandidate) && opts.fakeFs.statSync(cjsCandidate).isFile()) + return addToCacheAndReturn(start, curr, cjsCandidate); + const legacyCjsCandidate = ppath.join(curr, Filename.pnpJs); + if (opts.fakeFs.existsSync(legacyCjsCandidate) && opts.fakeFs.statSync(legacyCjsCandidate).isFile()) + return addToCacheAndReturn(start, curr, legacyCjsCandidate); + next = ppath.dirname(curr); + } while (curr !== PortablePath.root); + return addToCacheAndReturn(start, curr, null); + } + const moduleToApiPathCache = /* @__PURE__ */ new WeakMap(); + function getApiPathFromParent(parent) { + if (parent == null) + return initialApiPath; + let apiPath = moduleToApiPathCache.get(parent); + if (typeof apiPath !== `undefined`) + return apiPath; + apiPath = parent.filename ? findApiPathFor(parent.filename) : null; + moduleToApiPathCache.set(parent, apiPath); + return apiPath; + } + return { + getApiPathFromParent, + findApiPathFor, + getApiEntry + }; +} + +const localFs = { ...fs__default.default }; +const nodeFs = new NodeFS(localFs); +const defaultRuntimeState = $$SETUP_STATE(hydrateRuntimeState); +const defaultPnpapiResolution = __filename; +const defaultFsLayer = new VirtualFS({ + baseFs: new ZipOpenFS({ + baseFs: nodeFs, + libzip: () => getLibzipSync(), + maxOpenFiles: 80, + readOnlyArchives: true + }) +}); +class DynamicFS extends ProxiedFS { + constructor() { + super(ppath); + this.baseFs = defaultFsLayer; + } + mapToBase(p) { + return p; + } + mapFromBase(p) { + return p; + } +} +const dynamicFsLayer = new DynamicFS(); +let manager; +const defaultApi = Object.assign(makeApi(defaultRuntimeState, { + fakeFs: dynamicFsLayer, + pnpapiResolution: defaultPnpapiResolution +}), { + makeApi: ({ + basePath = void 0, + fakeFs = dynamicFsLayer, + pnpapiResolution = defaultPnpapiResolution, + ...rest + }) => { + const apiRuntimeState = typeof basePath !== `undefined` ? $$SETUP_STATE(hydrateRuntimeState, basePath) : defaultRuntimeState; + return makeApi(apiRuntimeState, { + fakeFs, + pnpapiResolution, + ...rest + }); + }, + setup: (api) => { + applyPatch(api || defaultApi, { + fakeFs: defaultFsLayer, + manager + }); + dynamicFsLayer.baseFs = new NodeFS(fs__default.default); + } +}); +manager = makeManager(defaultApi, { + fakeFs: dynamicFsLayer +}); +if (module.parent && module.parent.id === `internal/preload`) { + defaultApi.setup(); + if (module.filename) { + delete require$$0__default.default._cache[module.filename]; + } +} +if (process.mainModule === module) { + const reportError = (code, message, data) => { + process.stdout.write(`${JSON.stringify([{ code, message, data }, null])} +`); + }; + const reportSuccess = (resolution) => { + process.stdout.write(`${JSON.stringify([null, resolution])} +`); + }; + const processResolution = (request, issuer) => { + try { + reportSuccess(defaultApi.resolveRequest(request, issuer)); + } catch (error) { + reportError(error.code, error.message, error.data); + } + }; + const processRequest = (data) => { + try { + const [request, issuer] = JSON.parse(data); + processResolution(request, issuer); + } catch (error) { + reportError(`INVALID_JSON`, error.message, error.data); + } + }; + if (process.argv.length > 2) { + if (process.argv.length !== 4) { + process.stderr.write(`Usage: ${process.argv[0]} ${process.argv[1]} +`); + process.exitCode = 64; + } else { + processResolution(process.argv[2], process.argv[3]); + } + } else { + let buffer = ``; + const decoder = new StringDecoder__default.default.StringDecoder(); + process.stdin.on(`data`, (chunk) => { + buffer += decoder.write(chunk); + do { + const index = buffer.indexOf(` +`); + if (index === -1) + break; + const line = buffer.slice(0, index); + buffer = buffer.slice(index + 1); + processRequest(line); + } while (true); + }); + } +} + +module.exports = defaultApi; diff --git a/extensions/puppet/.pnp.loader.mjs b/extensions/puppet/.pnp.loader.mjs new file mode 100644 index 0000000..4b7f9f8 --- /dev/null +++ b/extensions/puppet/.pnp.loader.mjs @@ -0,0 +1,2047 @@ +import { URL as URL$1, fileURLToPath, pathToFileURL } from 'url'; +import fs from 'fs'; +import path from 'path'; +import moduleExports, { Module } from 'module'; +import { EOL } from 'os'; +import assert from 'assert'; + +const SAFE_TIME = 456789e3; + +const PortablePath = { + root: `/`, + dot: `.`, + parent: `..` +}; +const npath = Object.create(path); +const ppath = Object.create(path.posix); +npath.cwd = () => process.cwd(); +ppath.cwd = () => toPortablePath(process.cwd()); +ppath.resolve = (...segments) => { + if (segments.length > 0 && ppath.isAbsolute(segments[0])) { + return path.posix.resolve(...segments); + } else { + return path.posix.resolve(ppath.cwd(), ...segments); + } +}; +const contains = function(pathUtils, from, to) { + from = pathUtils.normalize(from); + to = pathUtils.normalize(to); + if (from === to) + return `.`; + if (!from.endsWith(pathUtils.sep)) + from = from + pathUtils.sep; + if (to.startsWith(from)) { + return to.slice(from.length); + } else { + return null; + } +}; +npath.fromPortablePath = fromPortablePath; +npath.toPortablePath = toPortablePath; +npath.contains = (from, to) => contains(npath, from, to); +ppath.contains = (from, to) => contains(ppath, from, to); +const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; +const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; +const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; +const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; +function fromPortablePath(p) { + if (process.platform !== `win32`) + return p; + let portablePathMatch, uncPortablePathMatch; + if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) + p = portablePathMatch[1]; + else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) + p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; + else + return p; + return p.replace(/\//g, `\\`); +} +function toPortablePath(p) { + if (process.platform !== `win32`) + return p; + p = p.replace(/\\/g, `/`); + let windowsPathMatch, uncWindowsPathMatch; + if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) + p = `/${windowsPathMatch[1]}`; + else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) + p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; + return p; +} +function convertPath(targetPathUtils, sourcePath) { + return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); +} + +const defaultTime = new Date(SAFE_TIME * 1e3); +async function copyPromise(destinationFs, destination, sourceFs, source, opts) { + const normalizedDestination = destinationFs.pathUtils.normalize(destination); + const normalizedSource = sourceFs.pathUtils.normalize(source); + const prelayout = []; + const postlayout = []; + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); + await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); + const updateTime = typeof destinationFs.lutimesPromise === `function` ? destinationFs.lutimesPromise.bind(destinationFs) : destinationFs.utimesPromise.bind(destinationFs); + await copyImpl(prelayout, postlayout, updateTime, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); + for (const operation of prelayout) + await operation(); + await Promise.all(postlayout.map((operation) => { + return operation(); + })); +} +async function copyImpl(prelayout, postlayout, updateTime, destinationFs, destination, sourceFs, source, opts) { + var _a, _b; + const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; + const sourceStat = await sourceFs.lstatPromise(source); + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; + let updated; + switch (true) { + case sourceStat.isDirectory(): + { + updated = await copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isFile(): + { + updated = await copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isSymbolicLink(): + { + updated = await copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + default: + { + throw new Error(`Unsupported file type (${sourceStat.mode})`); + } + } + if (updated || ((_a = destinationStat == null ? void 0 : destinationStat.mtime) == null ? void 0 : _a.getTime()) !== mtime.getTime() || ((_b = destinationStat == null ? void 0 : destinationStat.atime) == null ? void 0 : _b.getTime()) !== atime.getTime()) { + postlayout.push(() => updateTime(destination, atime, mtime)); + updated = true; + } + if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { + postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); + updated = true; + } + return updated; +} +async function maybeLStat(baseFs, p) { + try { + return await baseFs.lstatPromise(p); + } catch (e) { + return null; + } +} +async function copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null && !destinationStat.isDirectory()) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + let updated = false; + if (destinationStat === null) { + prelayout.push(async () => { + try { + await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); + } catch (err) { + if (err.code !== `EEXIST`) { + throw err; + } + } + }); + updated = true; + } + const entries = await sourceFs.readdirPromise(source); + const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; + if (opts.stableSort) { + for (const entry of entries.sort()) { + if (await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { + updated = true; + } + } + } else { + const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { + await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); + })); + if (entriesUpdateStatus.some((status) => status)) { + updated = true; + } + } + return updated; +} +const isCloneSupportedCache = /* @__PURE__ */ new WeakMap(); +function makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy) { + return async () => { + await opFs.linkPromise(source, destination); + if (linkStrategy === "readOnly" /* ReadOnly */) { + sourceStat.mode &= ~146; + await opFs.chmodPromise(destination, sourceStat.mode); + } + }; +} +function makeCloneLinkOperation(opFs, destination, source, sourceStat, linkStrategy) { + const isCloneSupported = isCloneSupportedCache.get(opFs); + if (typeof isCloneSupported === `undefined`) { + return async () => { + try { + await opFs.copyFilePromise(source, destination, fs.constants.COPYFILE_FICLONE_FORCE); + isCloneSupportedCache.set(opFs, true); + } catch (err) { + if (err.code === `ENOSYS` || err.code === `ENOTSUP`) { + isCloneSupportedCache.set(opFs, false); + await makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy)(); + } else { + throw err; + } + } + }; + } else { + if (isCloneSupported) { + return async () => opFs.copyFilePromise(source, destination, fs.constants.COPYFILE_FICLONE_FORCE); + } else { + return makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy); + } + } +} +async function copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + var _a; + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + const linkStrategy = (_a = opts.linkStrategy) != null ? _a : null; + const op = destinationFs === sourceFs ? linkStrategy !== null ? makeCloneLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.copyFilePromise(source, destination, fs.constants.COPYFILE_FICLONE) : linkStrategy !== null ? makeLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.writeFilePromise(destination, await sourceFs.readFilePromise(source)); + prelayout.push(async () => op()); + return true; +} +async function copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); + }); + return true; +} + +function makeError(code, message) { + return Object.assign(new Error(`${code}: ${message}`), { code }); +} +function ENOSYS(message, reason) { + return makeError(`ENOSYS`, `${message}, ${reason}`); +} + +class FakeFS { + constructor(pathUtils) { + this.pathUtils = pathUtils; + } + async *genTraversePromise(init, { stableSort = false } = {}) { + const stack = [init]; + while (stack.length > 0) { + const p = stack.shift(); + const entry = await this.lstatPromise(p); + if (entry.isDirectory()) { + const entries = await this.readdirPromise(p); + if (stableSort) { + for (const entry2 of entries.sort()) { + stack.push(this.pathUtils.join(p, entry2)); + } + } else { + throw new Error(`Not supported`); + } + } else { + yield p; + } + } + } + async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { + let stat; + try { + stat = await this.lstatPromise(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) { + const entries = await this.readdirPromise(p); + await Promise.all(entries.map((entry) => { + return this.removePromise(this.pathUtils.resolve(p, entry)); + })); + } + for (let t = 0; t <= maxRetries; t++) { + try { + await this.rmdirPromise(p); + break; + } catch (error) { + if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { + throw error; + } else if (t < maxRetries) { + await new Promise((resolve) => setTimeout(resolve, t * 100)); + } + } + } + } else { + await this.unlinkPromise(p); + } + } + removeSync(p, { recursive = true } = {}) { + let stat; + try { + stat = this.lstatSync(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) + for (const entry of this.readdirSync(p)) + this.removeSync(this.pathUtils.resolve(p, entry)); + this.rmdirSync(p); + } else { + this.unlinkSync(p); + } + } + async mkdirpPromise(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + await this.mkdirPromise(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory != null ? createdDirectory : createdDirectory = subPath; + if (chmod != null) + await this.chmodPromise(subPath, chmod); + if (utimes != null) { + await this.utimesPromise(subPath, utimes[0], utimes[1]); + } else { + const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); + await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + mkdirpSync(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + this.mkdirSync(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory != null ? createdDirectory : createdDirectory = subPath; + if (chmod != null) + this.chmodSync(subPath, chmod); + if (utimes != null) { + this.utimesSync(subPath, utimes[0], utimes[1]); + } else { + const parentStat = this.statSync(this.pathUtils.dirname(subPath)); + this.utimesSync(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { + return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); + } + copySync(destination, source, { baseFs = this, overwrite = true } = {}) { + const stat = baseFs.lstatSync(source); + const exists = this.existsSync(destination); + if (stat.isDirectory()) { + this.mkdirpSync(destination); + const directoryListing = baseFs.readdirSync(source); + for (const entry of directoryListing) { + this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); + } + } else if (stat.isFile()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const content = baseFs.readFileSync(source); + this.writeFileSync(destination, content); + } + } else if (stat.isSymbolicLink()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const target = baseFs.readlinkSync(source); + this.symlinkSync(convertPath(this.pathUtils, target), destination); + } + } else { + throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); + } + const mode = stat.mode & 511; + this.chmodSync(destination, mode); + } + async changeFilePromise(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferPromise(p, content, opts); + } else { + return this.changeFileTextPromise(p, content, opts); + } + } + async changeFileBufferPromise(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = await this.readFilePromise(p); + } catch (error) { + } + if (Buffer.compare(current, content) === 0) + return; + await this.writeFilePromise(p, content, { mode }); + } + async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { + let current = ``; + try { + current = await this.readFilePromise(p, `utf8`); + } catch (error) { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + await this.writeFilePromise(p, normalizedContent, { mode }); + } + changeFileSync(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferSync(p, content, opts); + } else { + return this.changeFileTextSync(p, content, opts); + } + } + changeFileBufferSync(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = this.readFileSync(p); + } catch (error) { + } + if (Buffer.compare(current, content) === 0) + return; + this.writeFileSync(p, content, { mode }); + } + changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { + let current = ``; + try { + current = this.readFileSync(p, `utf8`); + } catch (error) { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + this.writeFileSync(p, normalizedContent, { mode }); + } + async movePromise(fromP, toP) { + try { + await this.renamePromise(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + await this.copyPromise(toP, fromP); + await this.removePromise(fromP); + } else { + throw error; + } + } + } + moveSync(fromP, toP) { + try { + this.renameSync(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + this.copySync(toP, fromP); + this.removeSync(fromP); + } else { + throw error; + } + } + } + async lockPromise(affectedPath, callback) { + const lockPath = `${affectedPath}.flock`; + const interval = 1e3 / 60; + const startTime = Date.now(); + let fd = null; + const isAlive = async () => { + let pid; + try { + [pid] = await this.readJsonPromise(lockPath); + } catch (error) { + return Date.now() - startTime < 500; + } + try { + process.kill(pid, 0); + return true; + } catch (error) { + return false; + } + }; + while (fd === null) { + try { + fd = await this.openPromise(lockPath, `wx`); + } catch (error) { + if (error.code === `EEXIST`) { + if (!await isAlive()) { + try { + await this.unlinkPromise(lockPath); + continue; + } catch (error2) { + } + } + if (Date.now() - startTime < 60 * 1e3) { + await new Promise((resolve) => setTimeout(resolve, interval)); + } else { + throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); + } + } else { + throw error; + } + } + } + await this.writePromise(fd, JSON.stringify([process.pid])); + try { + return await callback(); + } finally { + try { + await this.closePromise(fd); + await this.unlinkPromise(lockPath); + } catch (error) { + } + } + } + async readJsonPromise(p) { + const content = await this.readFilePromise(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + readJsonSync(p) { + const content = this.readFileSync(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + async writeJsonPromise(p, data) { + return await this.writeFilePromise(p, `${JSON.stringify(data, null, 2)} +`); + } + writeJsonSync(p, data) { + return this.writeFileSync(p, `${JSON.stringify(data, null, 2)} +`); + } + async preserveTimePromise(p, cb) { + const stat = await this.lstatPromise(p); + const result = await cb(); + if (typeof result !== `undefined`) + p = result; + if (this.lutimesPromise) { + await this.lutimesPromise(p, stat.atime, stat.mtime); + } else if (!stat.isSymbolicLink()) { + await this.utimesPromise(p, stat.atime, stat.mtime); + } + } + async preserveTimeSync(p, cb) { + const stat = this.lstatSync(p); + const result = cb(); + if (typeof result !== `undefined`) + p = result; + if (this.lutimesSync) { + this.lutimesSync(p, stat.atime, stat.mtime); + } else if (!stat.isSymbolicLink()) { + this.utimesSync(p, stat.atime, stat.mtime); + } + } +} +class BasePortableFakeFS extends FakeFS { + constructor() { + super(ppath); + } +} +function getEndOfLine(content) { + const matches = content.match(/\r?\n/g); + if (matches === null) + return EOL; + const crlf = matches.filter((nl) => nl === `\r +`).length; + const lf = matches.length - crlf; + return crlf > lf ? `\r +` : ` +`; +} +function normalizeLineEndings(originalContent, newContent) { + return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); +} + +class NodeFS extends BasePortableFakeFS { + constructor(realFs = fs) { + super(); + this.realFs = realFs; + if (typeof this.realFs.lutimes !== `undefined`) { + this.lutimesPromise = this.lutimesPromiseImpl; + this.lutimesSync = this.lutimesSyncImpl; + } + } + getExtractHint() { + return false; + } + getRealPath() { + return PortablePath.root; + } + resolve(p) { + return ppath.resolve(p); + } + async openPromise(p, flags, mode) { + return await new Promise((resolve, reject) => { + this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); + }); + } + openSync(p, flags, mode) { + return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); + } + async opendirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (typeof opts !== `undefined`) { + this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }).then((dir) => { + return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true }); + }); + } + opendirSync(p, opts) { + const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); + return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true }); + } + async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { + return await new Promise((resolve, reject) => { + this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { + if (error) { + reject(error); + } else { + resolve(bytesRead); + } + }); + }); + } + readSync(fd, buffer, offset, length, position) { + return this.realFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + return await new Promise((resolve, reject) => { + if (typeof buffer === `string`) { + return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); + } else { + return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); + } + }); + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.realFs.writeSync(fd, buffer, offset); + } else { + return this.realFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + await new Promise((resolve, reject) => { + this.realFs.close(fd, this.makeCallback(resolve, reject)); + }); + } + closeSync(fd) { + this.realFs.closeSync(fd); + } + createReadStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createReadStream(realPath, opts); + } + createWriteStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createWriteStream(realPath, opts); + } + async realpathPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + realpathSync(p) { + return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); + } + async existsPromise(p) { + return await new Promise((resolve) => { + this.realFs.exists(npath.fromPortablePath(p), resolve); + }); + } + accessSync(p, mode) { + return this.realFs.accessSync(npath.fromPortablePath(p), mode); + } + async accessPromise(p, mode) { + return await new Promise((resolve, reject) => { + this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); + }); + } + existsSync(p) { + return this.realFs.existsSync(npath.fromPortablePath(p)); + } + async statPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + statSync(p, opts) { + if (opts) { + return this.realFs.statSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.statSync(npath.fromPortablePath(p)); + } + } + async fstatPromise(fd, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.fstat(fd, this.makeCallback(resolve, reject)); + } + }); + } + fstatSync(fd, opts) { + if (opts) { + return this.realFs.fstatSync(fd, opts); + } else { + return this.realFs.fstatSync(fd); + } + } + async lstatPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + lstatSync(p, opts) { + if (opts) { + return this.realFs.lstatSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.lstatSync(npath.fromPortablePath(p)); + } + } + async fchmodPromise(fd, mask) { + return await new Promise((resolve, reject) => { + this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); + }); + } + fchmodSync(fd, mask) { + return this.realFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return await new Promise((resolve, reject) => { + this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); + }); + } + chmodSync(p, mask) { + return this.realFs.chmodSync(npath.fromPortablePath(p), mask); + } + async fchownPromise(fd, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); + }); + } + fchownSync(fd, uid, gid) { + return this.realFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); + }); + } + chownSync(p, uid, gid) { + return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); + } + async renamePromise(oldP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + renameSync(oldP, newP) { + return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return await new Promise((resolve, reject) => { + this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); + } + async appendFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + appendFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFileSync(fsNativePath, content, opts); + } else { + this.realFs.appendFileSync(fsNativePath, content); + } + } + async writeFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + writeFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFileSync(fsNativePath, content, opts); + } else { + this.realFs.writeFileSync(fsNativePath, content); + } + } + async unlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + unlinkSync(p) { + return this.realFs.unlinkSync(npath.fromPortablePath(p)); + } + async utimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + utimesSync(p, atime, mtime) { + this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); + } + async lutimesPromiseImpl(p, atime, mtime) { + const lutimes = this.realFs.lutimes; + if (typeof lutimes === `undefined`) + throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`); + return await new Promise((resolve, reject) => { + lutimes.call(this.realFs, npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + lutimesSyncImpl(p, atime, mtime) { + const lutimesSync = this.realFs.lutimesSync; + if (typeof lutimesSync === `undefined`) + throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`); + lutimesSync.call(this.realFs, npath.fromPortablePath(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + }); + } + mkdirSync(p, opts) { + return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); + } + async rmdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmdirSync(p, opts) { + return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); + } + async linkPromise(existingP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + linkSync(existingP, newP) { + return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); + } + async symlinkPromise(target, p, type) { + return await new Promise((resolve, reject) => { + this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); + }); + } + symlinkSync(target, p, type) { + return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); + } + async readFilePromise(p, encoding) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); + }); + } + readFileSync(p, encoding) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + return this.realFs.readFileSync(fsNativePath, encoding); + } + async readdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts == null ? void 0 : opts.withFileTypes) { + this.realFs.readdir(npath.fromPortablePath(p), { withFileTypes: true }, this.makeCallback(resolve, reject)); + } else { + this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback((value) => resolve(value), reject)); + } + }); + } + readdirSync(p, opts) { + if (opts == null ? void 0 : opts.withFileTypes) { + return this.realFs.readdirSync(npath.fromPortablePath(p), { withFileTypes: true }); + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p)); + } + } + async readlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + readlinkSync(p) { + return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); + } + async truncatePromise(p, len) { + return await new Promise((resolve, reject) => { + this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); + }); + } + truncateSync(p, len) { + return this.realFs.truncateSync(npath.fromPortablePath(p), len); + } + async ftruncatePromise(fd, len) { + return await new Promise((resolve, reject) => { + this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); + }); + } + ftruncateSync(fd, len) { + return this.realFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.realFs.watch( + npath.fromPortablePath(p), + a, + b + ); + } + watchFile(p, a, b) { + return this.realFs.watchFile( + npath.fromPortablePath(p), + a, + b + ); + } + unwatchFile(p, cb) { + return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); + } + makeCallback(resolve, reject) { + return (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }; + } +} + +class ProxiedFS extends FakeFS { + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + resolve(path) { + return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); + } + getRealPath() { + return this.mapFromBase(this.baseFs.getRealPath()); + } + async openPromise(p, flags, mode) { + return this.baseFs.openPromise(this.mapToBase(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(this.mapToBase(p), flags, mode); + } + async opendirPromise(p, opts) { + return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); + } + opendirSync(p, opts) { + return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); + } + async readPromise(fd, buffer, offset, length, position) { + return await this.baseFs.readPromise(fd, buffer, offset, length, position); + } + readSync(fd, buffer, offset, length, position) { + return this.baseFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return await this.baseFs.writePromise(fd, buffer, offset); + } else { + return await this.baseFs.writePromise(fd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.baseFs.writeSync(fd, buffer, offset); + } else { + return this.baseFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + return this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); + } + async realpathPromise(p) { + return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); + } + realpathSync(p) { + return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); + } + async existsPromise(p) { + return this.baseFs.existsPromise(this.mapToBase(p)); + } + existsSync(p) { + return this.baseFs.existsSync(this.mapToBase(p)); + } + accessSync(p, mode) { + return this.baseFs.accessSync(this.mapToBase(p), mode); + } + async accessPromise(p, mode) { + return this.baseFs.accessPromise(this.mapToBase(p), mode); + } + async statPromise(p, opts) { + return this.baseFs.statPromise(this.mapToBase(p), opts); + } + statSync(p, opts) { + return this.baseFs.statSync(this.mapToBase(p), opts); + } + async fstatPromise(fd, opts) { + return this.baseFs.fstatPromise(fd, opts); + } + fstatSync(fd, opts) { + return this.baseFs.fstatSync(fd, opts); + } + lstatPromise(p, opts) { + return this.baseFs.lstatPromise(this.mapToBase(p), opts); + } + lstatSync(p, opts) { + return this.baseFs.lstatSync(this.mapToBase(p), opts); + } + async fchmodPromise(fd, mask) { + return this.baseFs.fchmodPromise(fd, mask); + } + fchmodSync(fd, mask) { + return this.baseFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return this.baseFs.chmodPromise(this.mapToBase(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(this.mapToBase(p), mask); + } + async fchownPromise(fd, uid, gid) { + return this.baseFs.fchownPromise(fd, uid, gid); + } + fchownSync(fd, uid, gid) { + return this.baseFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); + } + chownSync(p, uid, gid) { + return this.baseFs.chownSync(this.mapToBase(p), uid, gid); + } + async renamePromise(oldP, newP) { + return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + async appendFilePromise(p, content, opts) { + return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); + } + appendFileSync(p, content, opts) { + return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); + } + async writeFilePromise(p, content, opts) { + return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); + } + async unlinkPromise(p) { + return this.baseFs.unlinkPromise(this.mapToBase(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(this.mapToBase(p)); + } + async utimesPromise(p, atime, mtime) { + return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return this.baseFs.mkdirPromise(this.mapToBase(p), opts); + } + mkdirSync(p, opts) { + return this.baseFs.mkdirSync(this.mapToBase(p), opts); + } + async rmdirPromise(p, opts) { + return this.baseFs.rmdirPromise(this.mapToBase(p), opts); + } + rmdirSync(p, opts) { + return this.baseFs.rmdirSync(this.mapToBase(p), opts); + } + async linkPromise(existingP, newP) { + return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); + } + linkSync(existingP, newP) { + return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); + } + async symlinkPromise(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); + } + symlinkSync(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkSync(mappedTarget, mappedP, type); + } + async readFilePromise(p, encoding) { + if (encoding === `utf8`) { + return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); + } else { + return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); + } + } + readFileSync(p, encoding) { + if (encoding === `utf8`) { + return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); + } else { + return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); + } + } + async readdirPromise(p, opts) { + return this.baseFs.readdirPromise(this.mapToBase(p), opts); + } + readdirSync(p, opts) { + return this.baseFs.readdirSync(this.mapToBase(p), opts); + } + async readlinkPromise(p) { + return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); + } + readlinkSync(p) { + return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); + } + async truncatePromise(p, len) { + return this.baseFs.truncatePromise(this.mapToBase(p), len); + } + truncateSync(p, len) { + return this.baseFs.truncateSync(this.mapToBase(p), len); + } + async ftruncatePromise(fd, len) { + return this.baseFs.ftruncatePromise(fd, len); + } + ftruncateSync(fd, len) { + return this.baseFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.baseFs.watch( + this.mapToBase(p), + a, + b + ); + } + watchFile(p, a, b) { + return this.baseFs.watchFile( + this.mapToBase(p), + a, + b + ); + } + unwatchFile(p, cb) { + return this.baseFs.unwatchFile(this.mapToBase(p), cb); + } + fsMapToBase(p) { + if (typeof p === `number`) { + return p; + } else { + return this.mapToBase(p); + } + } +} + +const NUMBER_REGEXP = /^[0-9]+$/; +const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; +const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; +class VirtualFS extends ProxiedFS { + constructor({ baseFs = new NodeFS() } = {}) { + super(ppath); + this.baseFs = baseFs; + } + static makeVirtualPath(base, component, to) { + if (ppath.basename(base) !== `__virtual__`) + throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); + if (!ppath.basename(component).match(VALID_COMPONENT)) + throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); + const target = ppath.relative(ppath.dirname(base), to); + const segments = target.split(`/`); + let depth = 0; + while (depth < segments.length && segments[depth] === `..`) + depth += 1; + const finalSegments = segments.slice(depth); + const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); + return fullVirtualPath; + } + static resolveVirtual(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match || !match[3] && match[5]) + return p; + const target = ppath.dirname(match[1]); + if (!match[3] || !match[4]) + return target; + const isnum = NUMBER_REGEXP.test(match[4]); + if (!isnum) + return p; + const depth = Number(match[4]); + const backstep = `../`.repeat(depth); + const subpath = match[5] || `.`; + return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); + } + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + getRealPath() { + return this.baseFs.getRealPath(); + } + realpathSync(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return this.baseFs.realpathSync(p); + if (!match[5]) + return p; + const realpath = this.baseFs.realpathSync(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + async realpathPromise(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return await this.baseFs.realpathPromise(p); + if (!match[5]) + return p; + const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + mapToBase(p) { + if (p === ``) + return p; + if (this.pathUtils.isAbsolute(p)) + return VirtualFS.resolveVirtual(p); + const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); + const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); + return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; + } + mapFromBase(p) { + return p; + } +} + +const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); +const HAS_CONSOLIDATED_HOOKS = major > 16 || major === 16 && minor >= 12; +const HAS_UNFLAGGED_JSON_MODULES = major > 17 || major === 17 && minor >= 5 || major === 16 && minor >= 15; +const HAS_JSON_IMPORT_ASSERTION_REQUIREMENT = major > 17 || major === 17 && minor >= 1 || major === 16 && minor > 14; +const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13; +const HAS_LAZY_LOADED_TRANSLATORS = major > 19 || major === 19 && minor >= 3; + +const builtinModules = new Set(Module.builtinModules || Object.keys(process.binding(`natives`))); +const isBuiltinModule = (request) => request.startsWith(`node:`) || builtinModules.has(request); +function readPackageScope(checkPath) { + const rootSeparatorIndex = checkPath.indexOf(npath.sep); + let separatorIndex; + do { + separatorIndex = checkPath.lastIndexOf(npath.sep); + checkPath = checkPath.slice(0, separatorIndex); + if (checkPath.endsWith(`${npath.sep}node_modules`)) + return false; + const pjson = readPackage(checkPath + npath.sep); + if (pjson) { + return { + data: pjson, + path: checkPath + }; + } + } while (separatorIndex > rootSeparatorIndex); + return false; +} +function readPackage(requestPath) { + const jsonPath = npath.resolve(requestPath, `package.json`); + if (!fs.existsSync(jsonPath)) + return null; + return JSON.parse(fs.readFileSync(jsonPath, `utf8`)); +} + +async function tryReadFile$1(path2) { + try { + return await fs.promises.readFile(path2, `utf8`); + } catch (error) { + if (error.code === `ENOENT`) + return null; + throw error; + } +} +function tryParseURL(str, base) { + try { + return new URL$1(str, base); + } catch { + return null; + } +} +let entrypointPath = null; +function setEntrypointPath(file) { + entrypointPath = file; +} +function getFileFormat(filepath) { + var _a, _b; + const ext = path.extname(filepath); + switch (ext) { + case `.mjs`: { + return `module`; + } + case `.cjs`: { + return `commonjs`; + } + case `.wasm`: { + throw new Error( + `Unknown file extension ".wasm" for ${filepath}` + ); + } + case `.json`: { + if (HAS_UNFLAGGED_JSON_MODULES) + return `json`; + throw new Error( + `Unknown file extension ".json" for ${filepath}` + ); + } + case `.js`: { + const pkg = readPackageScope(filepath); + if (!pkg) + return `commonjs`; + return (_a = pkg.data.type) != null ? _a : `commonjs`; + } + default: { + if (entrypointPath !== filepath) + return null; + const pkg = readPackageScope(filepath); + if (!pkg) + return `commonjs`; + if (pkg.data.type === `module`) + return null; + return (_b = pkg.data.type) != null ? _b : `commonjs`; + } + } +} + +async function getFormat$1(resolved, context, defaultGetFormat) { + const url = tryParseURL(resolved); + if ((url == null ? void 0 : url.protocol) !== `file:`) + return defaultGetFormat(resolved, context, defaultGetFormat); + const format = getFileFormat(fileURLToPath(url)); + if (format) { + return { + format + }; + } + return defaultGetFormat(resolved, context, defaultGetFormat); +} + +async function getSource$1(urlString, context, defaultGetSource) { + const url = tryParseURL(urlString); + if ((url == null ? void 0 : url.protocol) !== `file:`) + return defaultGetSource(urlString, context, defaultGetSource); + return { + source: await fs.promises.readFile(fileURLToPath(url), `utf8`) + }; +} + +async function load$1(urlString, context, nextLoad) { + var _a; + const url = tryParseURL(urlString); + if ((url == null ? void 0 : url.protocol) !== `file:`) + return nextLoad(urlString, context, nextLoad); + const filePath = fileURLToPath(url); + const format = getFileFormat(filePath); + if (!format) + return nextLoad(urlString, context, nextLoad); + if (HAS_JSON_IMPORT_ASSERTION_REQUIREMENT && format === `json` && ((_a = context.importAssertions) == null ? void 0 : _a.type) !== `json`) { + const err = new TypeError(`[ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "${urlString}" needs an import assertion of type "json"`); + err.code = `ERR_IMPORT_ASSERTION_TYPE_MISSING`; + throw err; + } + if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { + const pathToSend = pathToFileURL( + npath.fromPortablePath( + VirtualFS.resolveVirtual(npath.toPortablePath(filePath)) + ) + ).href; + process.send({ + "watch:import": WATCH_MODE_MESSAGE_USES_ARRAYS ? [pathToSend] : pathToSend + }); + } + return { + format, + source: format === `commonjs` ? void 0 : await fs.promises.readFile(filePath, `utf8`), + shortCircuit: true + }; +} + +const ArrayIsArray = Array.isArray; +const JSONStringify = JSON.stringify; +const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; +const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); +const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); +const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); +const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); +const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); +const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); +const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); +const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); +const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); +const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); +const SafeMap = Map; +const JSONParse = JSON.parse; + +function createErrorType(code, messageCreator, errorType) { + return class extends errorType { + constructor(...args) { + super(messageCreator(...args)); + this.code = code; + this.name = `${errorType.name} [${code}]`; + } + }; +} +const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( + `ERR_PACKAGE_IMPORT_NOT_DEFINED`, + (specifier, packagePath, base) => { + return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; + }, + TypeError +); +const ERR_INVALID_MODULE_SPECIFIER = createErrorType( + `ERR_INVALID_MODULE_SPECIFIER`, + (request, reason, base = void 0) => { + return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; + }, + TypeError +); +const ERR_INVALID_PACKAGE_TARGET = createErrorType( + `ERR_INVALID_PACKAGE_TARGET`, + (pkgPath, key, target, isImport = false, base = void 0) => { + const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); + if (key === `.`) { + assert(isImport === false); + return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + } + return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( + target + )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + }, + Error +); +const ERR_INVALID_PACKAGE_CONFIG = createErrorType( + `ERR_INVALID_PACKAGE_CONFIG`, + (path, base, message) => { + return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; + }, + Error +); + +function filterOwnProperties(source, keys) { + const filtered = /* @__PURE__ */ Object.create(null); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (ObjectPrototypeHasOwnProperty(source, key)) { + filtered[key] = source[key]; + } + } + return filtered; +} + +const packageJSONCache = new SafeMap(); +function getPackageConfig(path, specifier, base, readFileSyncFn) { + const existing = packageJSONCache.get(path); + if (existing !== void 0) { + return existing; + } + const source = readFileSyncFn(path); + if (source === void 0) { + const packageConfig2 = { + pjsonPath: path, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(path, packageConfig2); + return packageConfig2; + } + let packageJSON; + try { + packageJSON = JSONParse(source); + } catch (error) { + throw new ERR_INVALID_PACKAGE_CONFIG( + path, + (base ? `"${specifier}" from ` : "") + fileURLToPath(base || specifier), + error.message + ); + } + let { imports, main, name, type } = filterOwnProperties(packageJSON, [ + "imports", + "main", + "name", + "type" + ]); + const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; + if (typeof imports !== "object" || imports === null) { + imports = void 0; + } + if (typeof main !== "string") { + main = void 0; + } + if (typeof name !== "string") { + name = void 0; + } + if (type !== "module" && type !== "commonjs") { + type = "none"; + } + const packageConfig = { + pjsonPath: path, + exists: true, + main, + name, + type, + exports, + imports + }; + packageJSONCache.set(path, packageConfig); + return packageConfig; +} +function getPackageScopeConfig(resolved, readFileSyncFn) { + let packageJSONUrl = new URL("./package.json", resolved); + while (true) { + const packageJSONPath2 = packageJSONUrl.pathname; + if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { + break; + } + const packageConfig2 = getPackageConfig( + fileURLToPath(packageJSONUrl), + resolved, + void 0, + readFileSyncFn + ); + if (packageConfig2.exists) { + return packageConfig2; + } + const lastPackageJSONUrl = packageJSONUrl; + packageJSONUrl = new URL("../package.json", packageJSONUrl); + if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { + break; + } + } + const packageJSONPath = fileURLToPath(packageJSONUrl); + const packageConfig = { + pjsonPath: packageJSONPath, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(packageJSONPath, packageConfig); + return packageConfig; +} + +/** + @license + Copyright Node.js contributors. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. +*/ +function throwImportNotDefined(specifier, packageJSONUrl, base) { + throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( + specifier, + packageJSONUrl && fileURLToPath(new URL(".", packageJSONUrl)), + fileURLToPath(base) + ); +} +function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { + const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${fileURLToPath(packageJSONUrl)}`; + throw new ERR_INVALID_MODULE_SPECIFIER( + subpath, + reason, + base && fileURLToPath(base) + ); +} +function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { + if (typeof target === "object" && target !== null) { + target = JSONStringify(target, null, ""); + } else { + target = `${target}`; + } + throw new ERR_INVALID_PACKAGE_TARGET( + fileURLToPath(new URL(".", packageJSONUrl)), + subpath, + target, + internal, + base && fileURLToPath(base) + ); +} +const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; +const patternRegEx = /\*/g; +function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { + if (subpath !== "" && !pattern && target[target.length - 1] !== "/") + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (!StringPrototypeStartsWith(target, "./")) { + if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { + let isURL = false; + try { + new URL(target); + isURL = true; + } catch { + } + if (!isURL) { + const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; + return exportTarget; + } + } + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + } + if (RegExpPrototypeExec( + invalidSegmentRegEx, + StringPrototypeSlice(target, 2) + ) !== null) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + const resolved = new URL(target, packageJSONUrl); + const resolvedPath = resolved.pathname; + const packagePath = new URL(".", packageJSONUrl).pathname; + if (!StringPrototypeStartsWith(resolvedPath, packagePath)) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (subpath === "") + return resolved; + if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { + const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; + throwInvalidSubpath(request, packageJSONUrl, internal, base); + } + if (pattern) { + return new URL( + RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) + ); + } + return new URL(subpath, resolved); +} +function isArrayIndex(key) { + const keyNum = +key; + if (`${keyNum}` !== key) + return false; + return keyNum >= 0 && keyNum < 4294967295; +} +function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { + if (typeof target === "string") { + return resolvePackageTargetString( + target, + subpath, + packageSubpath, + packageJSONUrl, + base, + pattern, + internal); + } else if (ArrayIsArray(target)) { + if (target.length === 0) { + return null; + } + let lastException; + for (let i = 0; i < target.length; i++) { + const targetItem = target[i]; + let resolveResult; + try { + resolveResult = resolvePackageTarget( + packageJSONUrl, + targetItem, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + } catch (e) { + lastException = e; + if (e.code === "ERR_INVALID_PACKAGE_TARGET") { + continue; + } + throw e; + } + if (resolveResult === void 0) { + continue; + } + if (resolveResult === null) { + lastException = null; + continue; + } + return resolveResult; + } + if (lastException === void 0 || lastException === null) + return lastException; + throw lastException; + } else if (typeof target === "object" && target !== null) { + const keys = ObjectGetOwnPropertyNames(target); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (isArrayIndex(key)) { + throw new ERR_INVALID_PACKAGE_CONFIG( + fileURLToPath(packageJSONUrl), + base, + '"exports" cannot contain numeric property keys.' + ); + } + } + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (key === "default" || conditions.has(key)) { + const conditionalTarget = target[key]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + conditionalTarget, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + if (resolveResult === void 0) + continue; + return resolveResult; + } + } + return void 0; + } else if (target === null) { + return null; + } + throwInvalidPackageTarget( + packageSubpath, + target, + packageJSONUrl, + internal, + base + ); +} +function patternKeyCompare(a, b) { + const aPatternIndex = StringPrototypeIndexOf(a, "*"); + const bPatternIndex = StringPrototypeIndexOf(b, "*"); + const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; + const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; + if (baseLenA > baseLenB) + return -1; + if (baseLenB > baseLenA) + return 1; + if (aPatternIndex === -1) + return 1; + if (bPatternIndex === -1) + return -1; + if (a.length > b.length) + return -1; + if (b.length > a.length) + return 1; + return 0; +} +function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { + if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { + const reason = "is not a valid internal imports specifier name"; + throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath(base)); + } + let packageJSONUrl; + const packageConfig = getPackageScopeConfig(base, readFileSyncFn); + if (packageConfig.exists) { + packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); + const imports = packageConfig.imports; + if (imports) { + if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { + const resolveResult = resolvePackageTarget( + packageJSONUrl, + imports[name], + "", + name, + base, + false, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } else { + let bestMatch = ""; + let bestMatchSubpath; + const keys = ObjectGetOwnPropertyNames(imports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const patternIndex = StringPrototypeIndexOf(key, "*"); + if (patternIndex !== -1 && StringPrototypeStartsWith( + name, + StringPrototypeSlice(key, 0, patternIndex) + )) { + const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); + if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { + bestMatch = key; + bestMatchSubpath = StringPrototypeSlice( + name, + patternIndex, + name.length - patternTrailer.length + ); + } + } + } + if (bestMatch) { + const target = imports[bestMatch]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + bestMatchSubpath, + bestMatch, + base, + true, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } + } + } + } + throwImportNotDefined(name, packageJSONUrl, base); +} + +const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; +const isRelativeRegexp = /^\.{0,2}\//; +function tryReadFile(filePath) { + try { + return fs.readFileSync(filePath, `utf8`); + } catch (err) { + if (err.code === `ENOENT`) + return void 0; + throw err; + } +} +async function resolvePrivateRequest(specifier, issuer, context, nextResolve) { + const resolved = packageImportsResolve({ + name: specifier, + base: pathToFileURL(issuer), + conditions: new Set(context.conditions), + readFileSyncFn: tryReadFile + }); + if (resolved instanceof URL$1) { + return { url: resolved.href, shortCircuit: true }; + } else { + if (resolved.startsWith(`#`)) + throw new Error(`Mapping from one private import to another isn't allowed`); + return resolve$1(resolved, context, nextResolve); + } +} +async function resolve$1(originalSpecifier, context, nextResolve) { + var _a, _b; + const { findPnpApi } = moduleExports; + if (!findPnpApi || isBuiltinModule(originalSpecifier)) + return nextResolve(originalSpecifier, context, nextResolve); + let specifier = originalSpecifier; + const url = tryParseURL(specifier, isRelativeRegexp.test(specifier) ? context.parentURL : void 0); + if (url) { + if (url.protocol !== `file:`) + return nextResolve(originalSpecifier, context, nextResolve); + specifier = fileURLToPath(url); + } + const { parentURL, conditions = [] } = context; + const issuer = parentURL && ((_a = tryParseURL(parentURL)) == null ? void 0 : _a.protocol) === `file:` ? fileURLToPath(parentURL) : process.cwd(); + const pnpapi = (_b = findPnpApi(issuer)) != null ? _b : url ? findPnpApi(specifier) : null; + if (!pnpapi) + return nextResolve(originalSpecifier, context, nextResolve); + if (specifier.startsWith(`#`)) + return resolvePrivateRequest(specifier, issuer, context, nextResolve); + const dependencyNameMatch = specifier.match(pathRegExp); + let allowLegacyResolve = false; + if (dependencyNameMatch) { + const [, dependencyName, subPath] = dependencyNameMatch; + if (subPath === `` && dependencyName !== `pnpapi`) { + const resolved = pnpapi.resolveToUnqualified(`${dependencyName}/package.json`, issuer); + if (resolved) { + const content = await tryReadFile$1(resolved); + if (content) { + const pkg = JSON.parse(content); + allowLegacyResolve = pkg.exports == null; + } + } + } + } + let result; + try { + result = pnpapi.resolveRequest(specifier, issuer, { + conditions: new Set(conditions), + extensions: allowLegacyResolve ? void 0 : [] + }); + } catch (err) { + if (err instanceof Error && `code` in err && err.code === `MODULE_NOT_FOUND`) + err.code = `ERR_MODULE_NOT_FOUND`; + throw err; + } + if (!result) + throw new Error(`Resolving '${specifier}' from '${issuer}' failed`); + const resultURL = pathToFileURL(result); + if (url) { + resultURL.search = url.search; + resultURL.hash = url.hash; + } + if (!parentURL) + setEntrypointPath(fileURLToPath(resultURL)); + return { + url: resultURL.href, + shortCircuit: true + }; +} + +if (!HAS_LAZY_LOADED_TRANSLATORS) { + const binding = process.binding(`fs`); + const originalfstat = binding.fstat; + const ZIP_MASK = 4278190080; + const ZIP_MAGIC = 704643072; + binding.fstat = function(...args) { + const [fd, useBigint, req] = args; + if ((fd & ZIP_MASK) === ZIP_MAGIC && useBigint === false && req === void 0) { + try { + const stats = fs.fstatSync(fd); + return new Float64Array([ + stats.dev, + stats.mode, + stats.nlink, + stats.uid, + stats.gid, + stats.rdev, + stats.blksize, + stats.ino, + stats.size, + stats.blocks + ]); + } catch { + } + } + return originalfstat.apply(this, args); + }; +} + +const resolve = resolve$1; +const getFormat = HAS_CONSOLIDATED_HOOKS ? void 0 : getFormat$1; +const getSource = HAS_CONSOLIDATED_HOOKS ? void 0 : getSource$1; +const load = HAS_CONSOLIDATED_HOOKS ? load$1 : void 0; + +export { getFormat, getSource, load, resolve }; diff --git a/extensions/puppet/.prettierignore b/extensions/puppet/.prettierignore new file mode 100644 index 0000000..4142583 --- /dev/null +++ b/extensions/puppet/.prettierignore @@ -0,0 +1,7 @@ +.anchor +.DS_Store +target +node_modules +dist +build +test-ledger diff --git a/extensions/puppet/Anchor.toml b/extensions/puppet/Anchor.toml new file mode 100644 index 0000000..90667dd --- /dev/null +++ b/extensions/puppet/Anchor.toml @@ -0,0 +1,22 @@ +[toolchain] + +[features] +resolution = true +skip-lint = false + +[programs.localnet] +puppet = "6nxvjh3D3kLkkb25sgRUdyomfYqeoUv7gfRFgcScy6jN" + +[registry] +url = "https://api.apr.dev" +# url = "http://127.0.0.1:8899" + +[provider] +cluster = "Localnet" +wallet = "~/.config/solana/id.json" + +# [[test.validator.clone]] +# address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" + +[scripts] +test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" diff --git a/extensions/puppet/Cargo.lock b/extensions/puppet/Cargo.lock new file mode 100644 index 0000000..98a5ab8 --- /dev/null +++ b/extensions/puppet/Cargo.lock @@ -0,0 +1,2727 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array", +] + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", + "opaque-debug", +] + +[[package]] +name = "aes-gcm-siv" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589c637f0e68c877bbd59a4599bbe849cac8e5f3e4b5a3ebae8f528cd218dcdc" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "polyval", + "subtle", + "zeroize", +] + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "anchor-attribute-access-control" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47fe28365b33e8334dd70ae2f34a43892363012fe239cf37d2ee91693575b1f8" +dependencies = [ + "anchor-syn", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-account" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c288d496168268d198d9b53ee9f4f9d260a55ba4df9877ea1d4486ad6109e0f" +dependencies = [ + "anchor-syn", + "bs58 0.5.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-constant" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b77b6948d0eeaaa129ce79eea5bbbb9937375a9241d909ca8fb9e006bb6e90" +dependencies = [ + "anchor-syn", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-error" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d20bb569c5a557c86101b944721d865e1fd0a4c67c381d31a44a84f07f84828" +dependencies = [ + "anchor-syn", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-event" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cebd8d0671a3a9dc3160c48598d652c34c77de6be4d44345b8b514323284d57" +dependencies = [ + "anchor-syn", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-program" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb2a5eb0860e661ab31aff7bb5e0288357b176380e985bade4ccb395981b42d" +dependencies = [ + "anchor-lang-idl", + "anchor-syn", + "anyhow", + "bs58 0.5.1", + "heck", + "proc-macro2", + "quote", + "serde_json", + "syn 1.0.109", +] + +[[package]] +name = "anchor-derive-accounts" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04368b5abef4266250ca8d1d12f4dff860242681e4ec22b885dcfe354fd35aa1" +dependencies = [ + "anchor-syn", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-derive-serde" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0bb0e0911ad4a70cab880cdd6287fe1e880a1a9d8e4e6defa8e9044b9796a6c" +dependencies = [ + "anchor-syn", + "borsh-derive-internal 0.10.3", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-derive-space" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ef415ff156dc82e9ecb943189b0cb241b3a6bfc26a180234dc21bd3ef3ce0cb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-lang" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6620c9486d9d36a4389cab5e37dc34a42ed0bfaa62e6a75a2999ce98f8f2e373" +dependencies = [ + "anchor-attribute-access-control", + "anchor-attribute-account", + "anchor-attribute-constant", + "anchor-attribute-error", + "anchor-attribute-event", + "anchor-attribute-program", + "anchor-derive-accounts", + "anchor-derive-serde", + "anchor-derive-space", + "anchor-lang-idl", + "arrayref", + "base64 0.21.7", + "bincode", + "borsh 0.10.3", + "bytemuck", + "getrandom 0.2.15", + "solana-program", + "thiserror", +] + +[[package]] +name = "anchor-lang-idl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31cf97b4e6f7d6144a05e435660fcf757dbc3446d38d0e2b851d11ed13625bba" +dependencies = [ + "anchor-lang-idl-spec", + "anyhow", + "heck", + "regex", + "serde", + "serde_json", + "sha2 0.10.8", +] + +[[package]] +name = "anchor-lang-idl-spec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bdf143115440fe621bdac3a29a1f7472e09f6cd82b2aa569429a0c13f103838" +dependencies = [ + "anyhow", + "serde", +] + +[[package]] +name = "anchor-spl" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04bd077c34449319a1e4e0bc21cea572960c9ae0d0fefda0dd7c52fcc3c647a3" +dependencies = [ + "anchor-lang", + "mpl-token-metadata", + "spl-associated-token-account", + "spl-pod", + "spl-token", + "spl-token-2022", + "spl-token-group-interface", + "spl-token-metadata-interface", +] + +[[package]] +name = "anchor-syn" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f99daacb53b55cfd37ce14d6c9905929721137fd4c67bbab44a19802aecb622f" +dependencies = [ + "anyhow", + "bs58 0.5.1", + "cargo_toml", + "heck", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.8", + "syn 1.0.109", + "thiserror", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "arrayref" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] + +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] +name = "blake3" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "digest 0.10.7", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "borsh" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +dependencies = [ + "borsh-derive 0.9.3", + "hashbrown 0.11.2", +] + +[[package]] +name = "borsh" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +dependencies = [ + "borsh-derive 0.10.3", + "hashbrown 0.13.2", +] + +[[package]] +name = "borsh" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +dependencies = [ + "borsh-derive 1.5.1", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +dependencies = [ + "borsh-derive-internal 0.9.3", + "borsh-schema-derive-internal 0.9.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +dependencies = [ + "borsh-derive-internal 0.10.3", + "borsh-schema-derive-internal 0.10.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +dependencies = [ + "once_cell", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.77", + "syn_derive", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" +dependencies = [ + "feature-probe", + "serde", +] + +[[package]] +name = "bytemuck" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cargo_toml" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a98356df42a2eb1bd8f1793ae4ee4de48e384dd974ce5eac8eee802edb7492be" +dependencies = [ + "serde", + "toml 0.8.19", +] + +[[package]] +name = "cc" +version = "1.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "num-traits", +] + +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "console_log" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f" +dependencies = [ + "log", + "web-sys", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "cpufeatures" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "serde", + "subtle", + "zeroize", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.77", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "derivation-path" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", + "subtle", +] + +[[package]] +name = "ed25519" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-dalek-bip32" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" +dependencies = [ + "derivation-path", + "ed25519-dalek", + "hmac 0.12.1", + "sha2 0.10.8", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "feature-probe" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "serde", + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.11", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "im" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "rayon", + "serde", + "sized-chunks", + "typenum", + "version_check", +] + +[[package]] +name = "indexmap" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.158" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" + +[[package]] +name = "libsecp256k1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" +dependencies = [ + "arrayref", + "base64 0.12.3", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "light-poseidon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" +dependencies = [ + "ark-bn254", + "ark-ff", + "num-bigint", + "thiserror", +] + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "mpl-token-metadata" +version = "4.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caf0f61b553e424a6234af1268456972ee66c2222e1da89079242251fa7479e5" +dependencies = [ + "borsh 0.10.3", + "num-derive 0.3.3", + "num-traits", + "solana-program", + "thiserror", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml 0.5.11", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "puppet" +version = "0.1.0" +dependencies = [ + "anchor-lang", + "anchor-spl", +] + +[[package]] +name = "qstring" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "qualifier_attr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.209" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.209" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "serde_json" +version = "1.0.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_with" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" +dependencies = [ + "serde", + "serde_with_macros", +] + +[[package]] +name = "serde_with_macros" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "keccak", + "opaque-debug", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "solana-frozen-abi" +version = "1.18.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bfcde2fc6946c99c7e3400fadd04d1628d675bfd66cb34d461c0f3224bd27d1" +dependencies = [ + "block-buffer 0.10.4", + "bs58 0.4.0", + "bv", + "either", + "generic-array", + "im", + "lazy_static", + "log", + "memmap2", + "rustc_version", + "serde", + "serde_bytes", + "serde_derive", + "sha2 0.10.8", + "solana-frozen-abi-macro", + "subtle", + "thiserror", +] + +[[package]] +name = "solana-frozen-abi-macro" +version = "1.18.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5024d241425f4e99f112ee03bfa89e526c86c7ca9bd7e13448a7f2dffb7e060" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.77", +] + +[[package]] +name = "solana-logger" +version = "1.18.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10948c30d138d6fbfc2ae78a4882be5a9ebffa4bb1239c4efc386104ebc35b7f" +dependencies = [ + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "solana-program" +version = "1.18.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76056fecde0fe0ece8b457b719729c17173333471c72ad41969982975a10d6e0" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "base64 0.21.7", + "bincode", + "bitflags", + "blake3", + "borsh 0.10.3", + "borsh 0.9.3", + "borsh 1.5.1", + "bs58 0.4.0", + "bv", + "bytemuck", + "cc", + "console_error_panic_hook", + "console_log", + "curve25519-dalek", + "getrandom 0.2.15", + "itertools", + "js-sys", + "lazy_static", + "libc", + "libsecp256k1", + "light-poseidon", + "log", + "memoffset", + "num-bigint", + "num-derive 0.4.2", + "num-traits", + "parking_lot", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk-macro", + "thiserror", + "tiny-bip39", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "solana-sdk" +version = "1.18.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4b3f2080eddef6552fde7f149c429cf05b9bb0605a068b0d28e19d793e24df4" +dependencies = [ + "assert_matches", + "base64 0.21.7", + "bincode", + "bitflags", + "borsh 1.5.1", + "bs58 0.4.0", + "bytemuck", + "byteorder", + "chrono", + "derivation-path", + "digest 0.10.7", + "ed25519-dalek", + "ed25519-dalek-bip32", + "generic-array", + "hmac 0.12.1", + "itertools", + "js-sys", + "lazy_static", + "libsecp256k1", + "log", + "memmap2", + "num-derive 0.4.2", + "num-traits", + "num_enum", + "pbkdf2 0.11.0", + "qstring", + "qualifier_attr", + "rand 0.7.3", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "serde_with", + "sha2 0.10.8", + "sha3 0.10.8", + "siphasher", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-logger", + "solana-program", + "solana-sdk-macro", + "thiserror", + "uriparse", + "wasm-bindgen", +] + +[[package]] +name = "solana-sdk-macro" +version = "1.18.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a8613ca80150f7e277e773620ba65d2c5fcc3a08eb8026627d601421ab43aef" +dependencies = [ + "bs58 0.4.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.77", +] + +[[package]] +name = "solana-security-txt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" + +[[package]] +name = "solana-zk-token-sdk" +version = "1.18.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39a57b2f269f24088b6b8e426de05e5c1faa6b5d6f26175c06eb80df96ec685e" +dependencies = [ + "aes-gcm-siv", + "base64 0.21.7", + "bincode", + "bytemuck", + "byteorder", + "curve25519-dalek", + "getrandom 0.1.16", + "itertools", + "lazy_static", + "merlin", + "num-derive 0.4.2", + "num-traits", + "rand 0.7.3", + "serde", + "serde_json", + "sha3 0.9.1", + "solana-program", + "solana-sdk", + "subtle", + "thiserror", + "zeroize", +] + +[[package]] +name = "spl-associated-token-account" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143109d789171379e6143ef23191786dfaac54289ad6e7917cfb26b36c432b10" +dependencies = [ + "assert_matches", + "borsh 1.5.1", + "num-derive 0.4.2", + "num-traits", + "solana-program", + "spl-token", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "spl-discriminator" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "210101376962bb22bb13be6daea34656ea1cbc248fce2164b146e39203b55e03" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator-derive", +] + +[[package]] +name = "spl-discriminator-derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" +dependencies = [ + "quote", + "spl-discriminator-syn", + "syn 2.0.77", +] + +[[package]] +name = "spl-discriminator-syn" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f05593b7ca9eac7caca309720f2eafb96355e037e6d373b909a80fe7b69b9" +dependencies = [ + "proc-macro2", + "quote", + "sha2 0.10.8", + "syn 2.0.77", + "thiserror", +] + +[[package]] +name = "spl-memo" +version = "4.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a49f49f95f2d02111ded31696ab38a081fab623d4c76bd4cb074286db4560836" +dependencies = [ + "solana-program", +] + +[[package]] +name = "spl-pod" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c52d84c55efeef8edcc226743dc089d7e3888b8e3474569aa3eff152b37b9996" +dependencies = [ + "borsh 1.5.1", + "bytemuck", + "solana-program", + "solana-zk-token-sdk", + "spl-program-error", +] + +[[package]] +name = "spl-program-error" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45a49acb925db68aa501b926096b2164adbdcade7a0c24152af9f0742d0a602" +dependencies = [ + "num-derive 0.4.2", + "num-traits", + "solana-program", + "spl-program-error-derive", + "thiserror", +] + +[[package]] +name = "spl-program-error-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d375dd76c517836353e093c2dbb490938ff72821ab568b545fd30ab3256b3e" +dependencies = [ + "proc-macro2", + "quote", + "sha2 0.10.8", + "syn 2.0.77", +] + +[[package]] +name = "spl-tlv-account-resolution" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fab8edfd37be5fa17c9e42c1bff86abbbaf0494b031b37957f2728ad2ff842ba" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] + +[[package]] +name = "spl-token" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9eb465e4bf5ce1d498f05204c8089378c1ba34ef2777ea95852fc53a1fd4fb2" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.4.2", + "num-traits", + "num_enum", + "solana-program", + "thiserror", +] + +[[package]] +name = "spl-token-2022" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b01d1b2851964e257187c0bca43a0de38d0af59192479ca01ac3e2b58b1bd95a" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.4.2", + "num-traits", + "num_enum", + "solana-program", + "solana-security-txt", + "solana-zk-token-sdk", + "spl-memo", + "spl-pod", + "spl-token", + "spl-token-group-interface", + "spl-token-metadata-interface", + "spl-transfer-hook-interface", + "spl-type-length-value", + "thiserror", +] + +[[package]] +name = "spl-token-group-interface" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "014817d6324b1e20c4bbc883e8ee30a5faa13e59d91d1b2b95df98b920150c17" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", +] + +[[package]] +name = "spl-token-metadata-interface" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3da00495b602ebcf5d8ba8b3ecff1ee454ce4c125c9077747be49c2d62335ba" +dependencies = [ + "borsh 1.5.1", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] + +[[package]] +name = "spl-transfer-hook-interface" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9b5c08a89838e5a2931f79b17f611857f281a14a2100968a3ccef352cb7414b" +dependencies = [ + "arrayref", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-tlv-account-resolution", + "spl-type-length-value", +] + +[[package]] +name = "spl-type-length-value" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c872f93d0600e743116501eba2d53460e73a12c9a496875a42a7d70e034fe06d" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "tiny-bip39" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +dependencies = [ + "anyhow", + "hmac 0.8.1", + "once_cell", + "pbkdf2 0.4.0", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.9", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "uriparse" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff" +dependencies = [ + "fnv", + "lazy_static", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.77", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" + +[[package]] +name = "web-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +dependencies = [ + "memchr", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "zeroize" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] diff --git a/extensions/puppet/Cargo.toml b/extensions/puppet/Cargo.toml new file mode 100644 index 0000000..f397704 --- /dev/null +++ b/extensions/puppet/Cargo.toml @@ -0,0 +1,14 @@ +[workspace] +members = [ + "programs/*" +] +resolver = "2" + +[profile.release] +overflow-checks = true +lto = "fat" +codegen-units = 1 +[profile.release.build-override] +opt-level = 3 +incremental = false +codegen-units = 1 diff --git a/extensions/puppet/migrations/deploy.ts b/extensions/puppet/migrations/deploy.ts new file mode 100644 index 0000000..82fb175 --- /dev/null +++ b/extensions/puppet/migrations/deploy.ts @@ -0,0 +1,12 @@ +// Migrations are an early feature. Currently, they're nothing more than this +// single deploy script that's invoked from the CLI, injecting a provider +// configured from the workspace's Anchor.toml. + +const anchor = require("@coral-xyz/anchor"); + +module.exports = async function (provider) { + // Configure client to use the provider. + anchor.setProvider(provider); + + // Add your deploy script here. +}; diff --git a/extensions/puppet/package.json b/extensions/puppet/package.json new file mode 100644 index 0000000..797b28d --- /dev/null +++ b/extensions/puppet/package.json @@ -0,0 +1,22 @@ +{ + "license": "ISC", + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.30.1" + }, + "devDependencies": { + "@solana/spl-token": "^0.4.8", + "@solana/web3.js": "^1.95.3", + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "chai": "^4.3.4", + "mocha": "^9.0.3", + "prettier": "^2.6.2", + "ts-mocha": "^10.0.0", + "typescript": "^4.3.5" + } +} diff --git a/extensions/puppet/pnpm-lock.yaml b/extensions/puppet/pnpm-lock.yaml new file mode 100644 index 0000000..b199a5c --- /dev/null +++ b/extensions/puppet/pnpm-lock.yaml @@ -0,0 +1,1432 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@coral-xyz/anchor': + specifier: ^0.30.1 + version: 0.30.1 + +devDependencies: + '@solana/spl-token': + specifier: ^0.4.8 + version: 0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/web3.js': + specifier: ^1.95.3 + version: 1.95.3 + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.0 + '@types/chai': + specifier: ^4.3.0 + version: 4.3.0 + '@types/mocha': + specifier: ^9.0.0 + version: 9.0.0 + chai: + specifier: ^4.3.4 + version: 4.3.4 + mocha: + specifier: ^9.0.3 + version: 9.0.3 + prettier: + specifier: ^2.6.2 + version: 2.6.2 + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.0.3) + typescript: + specifier: ^4.3.5 + version: 4.3.5 + +packages: + + /@babel/runtime@7.25.6: + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + + /@coral-xyz/anchor-errors@0.30.1: + resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} + engines: {node: '>=10'} + dev: false + + /@coral-xyz/anchor@0.30.1: + resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} + engines: {node: '>=11'} + dependencies: + '@coral-xyz/anchor-errors': 0.30.1 + '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.3) + '@noble/hashes': 1.5.0 + '@solana/web3.js': 1.95.3 + bn.js: 5.2.1 + bs58: 4.0.1 + buffer-layout: 1.2.2 + camelcase: 6.3.0 + cross-fetch: 3.1.8 + crypto-hash: 1.3.0 + eventemitter3: 4.0.7 + pako: 2.1.0 + snake-case: 3.0.4 + superstruct: 0.15.5 + toml: 3.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.3): + resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + dependencies: + '@solana/web3.js': 1.95.3 + bn.js: 5.2.1 + buffer-layout: 1.2.2 + dev: false + + /@noble/curves@1.6.0: + resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} + engines: {node: ^14.21.3 || >=16} + dependencies: + '@noble/hashes': 1.5.0 + + /@noble/hashes@1.5.0: + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + + /@solana/buffer-layout-utils@0.2.0: + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.95.3 + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + + /@solana/buffer-layout@4.0.1: + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + dependencies: + buffer: 6.0.3 + + /@solana/codecs-core@2.0.0-preview.4(typescript@4.3.5): + resolution: {integrity: sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) + typescript: 4.3.5 + dev: true + + /@solana/codecs-core@2.0.0-rc.1(typescript@4.3.5): + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) + typescript: 4.3.5 + dev: true + + /@solana/codecs-data-structures@2.0.0-preview.4(typescript@4.3.5): + resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) + '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) + typescript: 4.3.5 + dev: true + + /@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.3.5): + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) + typescript: 4.3.5 + dev: true + + /@solana/codecs-numbers@2.0.0-preview.4(typescript@4.3.5): + resolution: {integrity: sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) + '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) + typescript: 4.3.5 + dev: true + + /@solana/codecs-numbers@2.0.0-rc.1(typescript@4.3.5): + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) + typescript: 4.3.5 + dev: true + + /@solana/codecs-strings@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) + '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 4.3.5 + dev: true + + /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 4.3.5 + dev: true + + /@solana/codecs@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/options': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + typescript: 4.3.5 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + dev: true + + /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + typescript: 4.3.5 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + dev: true + + /@solana/errors@2.0.0-preview.4(typescript@4.3.5): + resolution: {integrity: sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA==} + hasBin: true + peerDependencies: + typescript: '>=5' + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + typescript: 4.3.5 + dev: true + + /@solana/errors@2.0.0-rc.1(typescript@4.3.5): + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + hasBin: true + peerDependencies: + typescript: '>=5' + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + typescript: 4.3.5 + dev: true + + /@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) + typescript: 4.3.5 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + dev: true + + /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) + typescript: 4.3.5 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + dev: true + + /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.94.0 + dependencies: + '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.95.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + dev: true + + /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.95.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + dev: true + + /@solana/spl-token@0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.94.0 + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0 + '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/web3.js': 1.95.3 + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + dev: true + + /@solana/spl-type-length-value@0.1.0: + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + dependencies: + buffer: 6.0.3 + dev: true + + /@solana/web3.js@1.95.3: + resolution: {integrity: sha512-O6rPUN0w2fkNqx/Z3QJMB9L225Ex10PRDH8bTaIUPZXMPV0QP8ZpPvjQnXK+upUczlRgzHzd6SjKIha1p+I6og==} + dependencies: + '@babel/runtime': 7.25.6 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.2 + node-fetch: 2.7.0 + rpc-websockets: 9.0.2 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + /@swc/helpers@0.5.13: + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + dependencies: + tslib: 2.7.0 + + /@types/bn.js@5.1.0: + resolution: {integrity: sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==} + dependencies: + '@types/node': 22.5.4 + dev: true + + /@types/chai@4.3.0: + resolution: {integrity: sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==} + dev: true + + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 22.5.4 + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + requiresBuild: true + dev: true + optional: true + + /@types/mocha@9.0.0: + resolution: {integrity: sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==} + dev: true + + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + /@types/node@22.5.4: + resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==} + dependencies: + undici-types: 6.19.8 + + /@types/uuid@8.3.4: + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + /@types/ws@7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 22.5.4 + + /@types/ws@8.5.12: + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + dependencies: + '@types/node': 22.5.4 + + /@ungap/promise-all-settled@1.1.2: + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + dev: true + + /JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + /agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + dependencies: + humanize-ms: 1.2.1 + + /ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + dev: true + + /ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base-x@3.0.10: + resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + dependencies: + safe-buffer: 5.2.1 + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + + /bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + dev: true + + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + dev: true + + /bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + /borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.1.1 + dev: true + + /browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + dev: true + + /bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + dependencies: + base-x: 3.0.10 + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + dev: false + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + /bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.2 + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + /chai@4.3.4: + resolution: {integrity: sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 3.0.1 + get-func-name: 2.0.2 + pathval: 1.1.1 + type-detect: 4.1.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /chokidar@3.5.2: + resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + dev: true + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false + + /crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + dev: false + + /debug@4.3.1(supports-color@8.1.1): + resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 + dev: true + + /decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + dev: true + + /deep-eql@3.0.1: + resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} + engines: {node: '>=0.12'} + dependencies: + type-detect: 4.1.0 + dev: true + + /delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + /diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + dev: true + + /diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + dev: true + + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.7.0 + dev: false + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + /es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + dependencies: + es6-promise: 4.2.8 + + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: false + + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + /eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + /fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + /fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + dev: true + + /file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.3 + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: true + + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isomorphic-ws@4.0.1(ws@7.5.10): + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + dependencies: + ws: 7.5.10 + + /jayson@4.1.2: + resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + requiresBuild: true + dependencies: + minimist: 1.2.8 + dev: true + optional: true + + /jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.7.0 + dev: false + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /minimatch@3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /mocha@9.0.3: + resolution: {integrity: sha512-hnYFrSefHxYS2XFGtN01x8un0EwNu2bzKvhpRFhgoybIvMaOkkL60IVPmkb5h6XDmUl4IMSB+rT5cIO4/4bJgg==} + engines: {node: '>= 12.0.0'} + hasBin: true + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.2 + debug: 4.3.1(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.1.7 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 3.0.4 + ms: 2.1.3 + nanoid: 3.1.23 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + wide-align: 1.1.3 + workerpool: 6.1.5 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /nanoid@3.1.23: + resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.7.0 + dev: false + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + + /node-gyp-build@4.8.2: + resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} + hasBin: true + requiresBuild: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + dev: false + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /prettier@2.6.2: + resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /rpc-websockets@9.0.2: + resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==} + dependencies: + '@swc/helpers': 0.5.13 + '@types/uuid': 8.3.4 + '@types/ws': 8.5.12 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + /serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + dependencies: + randombytes: 2.1.0 + dev: true + + /snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.7.0 + dev: false + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + dependencies: + ansi-regex: 3.0.1 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + requiresBuild: true + dev: true + optional: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + dev: false + + /superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + dev: false + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + /ts-mocha@10.0.0(mocha@9.0.3): + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + dependencies: + mocha: 9.0.3 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + dev: true + + /ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + dev: true + + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + requiresBuild: true + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + optional: true + + /tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + /type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + dev: true + + /typescript@4.3.5: + resolution: {integrity: sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + /utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.2 + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wide-align@1.1.3: + resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} + dependencies: + string-width: 2.1.1 + dev: true + + /workerpool@6.1.5: + resolution: {integrity: sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==} + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + dev: true + + /yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + dev: true + + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + dev: true + + /yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/extensions/puppet/programs/puppet/Cargo.toml b/extensions/puppet/programs/puppet/Cargo.toml new file mode 100644 index 0000000..7abfd53 --- /dev/null +++ b/extensions/puppet/programs/puppet/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "puppet" +version = "0.1.0" +description = "Created with Anchor" +edition = "2021" + +[lib] +crate-type = ["cdylib", "lib"] +name = "puppet" + +[features] +default = [] +cpi = ["no-entrypoint"] +no-entrypoint = [] +no-idl = [] +no-log-ix-name = [] +idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"] + +[dependencies] +anchor-lang = {version = "0.30.1", features = ["init-if-needed"]} +anchor-spl = {version = "0.30.1", features = ["metadata"]} diff --git a/extensions/puppet/programs/puppet/Xargo.toml b/extensions/puppet/programs/puppet/Xargo.toml new file mode 100644 index 0000000..475fb71 --- /dev/null +++ b/extensions/puppet/programs/puppet/Xargo.toml @@ -0,0 +1,2 @@ +[target.bpfel-unknown-unknown.dependencies.std] +features = [] diff --git a/extensions/puppet/programs/puppet/src/errors.rs b/extensions/puppet/programs/puppet/src/errors.rs new file mode 100644 index 0000000..437af3a --- /dev/null +++ b/extensions/puppet/programs/puppet/src/errors.rs @@ -0,0 +1,22 @@ +use anchor_lang::error_code; + +#[error_code] +pub enum ErrorCode { + #[msg("The payer does not own the specified NFT.")] + PayerDoesNotOwnNFT, + + #[msg("The payer does not own the specified device.")] + PayerDoesNotOwnDevice, + + #[msg("The provided device has already bound.")] + DeviceAlreadyBound, + + #[msg("The provided nft has already bound.")] + NFTAlreadyBound, + + #[msg("The provided device does not match the binding.")] + DeviceDoesNotMatch, + + #[msg("The provided nft does not match the binding.")] + NFTDoesNotMatch, +} \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs new file mode 100644 index 0000000..7cbcc7f --- /dev/null +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -0,0 +1,51 @@ +use crate::errors::ErrorCode; +use crate::state::{DeviceBinding, NFTBinding}; +use anchor_lang::prelude::*; +use anchor_spl::token::TokenAccount; + +#[derive(Accounts)] +#[instruction( + params: BindParams +)] +pub struct Bind<'info> { + #[account( + constraint = nft_account.key() == params.nft, + constraint = nft_account.owner == payer.key() @ ErrorCode::PayerDoesNotOwnNFT + )] + pub nft_account: Account<'info, TokenAccount>, + #[account( + constraint = device_account.key() == params.device, + constraint = device_account.owner == payer.key() @ ErrorCode::PayerDoesNotOwnDevice + )] + pub device_account: Account<'info, TokenAccount>, + #[account( + init, + payer = payer, + space = 8 + 32 + 1, + seeds = [b"device_binding", payer.key().as_ref()], bump + )] + pub device_binding: Account<'info, DeviceBinding>, + #[account( + init, + payer = payer, + space = 8 + 32 + 1, seeds = [b"nft_binding", payer.key().as_ref()], bump + )] + pub nft_binding: Account<'info, NFTBinding>, + #[account(mut)] + pub payer: Signer<'info>, + pub rent: Sysvar<'info, Rent>, + pub system_program: Program<'info, System>, +} + +#[derive(AnchorSerialize, AnchorDeserialize, Debug, Clone)] +pub struct BindParams { + pub device: Pubkey, + pub nft: Pubkey, +} + +pub fn bind(ctx: Context, params: BindParams) -> Result<()> { + ctx.accounts.device_binding.nft = params.nft; + ctx.accounts.nft_binding.device = params.device; + + Ok(()) +} diff --git a/extensions/puppet/programs/puppet/src/instructions/check_bound_by_device.rs b/extensions/puppet/programs/puppet/src/instructions/check_bound_by_device.rs new file mode 100644 index 0000000..ef0ed52 --- /dev/null +++ b/extensions/puppet/programs/puppet/src/instructions/check_bound_by_device.rs @@ -0,0 +1,16 @@ +use crate::errors::ErrorCode; +use crate::state::{DeviceBinding, NFTBinding}; +use anchor_lang::prelude::*; + +#[derive(Accounts)] +pub struct Bound<'info> { + pub device_binding: Account<'info, DeviceBinding>, + pub nft_binding: Account<'info, NFTBinding>, +} + +pub fn check_bound_by_device(ctx: Context, device: Pubkey) -> Result { + if ctx.accounts.nft_binding.device != device { + return Err(ErrorCode::DeviceDoesNotMatch.into()); + } + Ok(ctx.accounts.device_binding.nft != Pubkey::default()) +} \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/instructions/check_bound_by_nft.rs b/extensions/puppet/programs/puppet/src/instructions/check_bound_by_nft.rs new file mode 100644 index 0000000..08aa238 --- /dev/null +++ b/extensions/puppet/programs/puppet/src/instructions/check_bound_by_nft.rs @@ -0,0 +1,10 @@ +use crate::errors::ErrorCode; +use anchor_lang::prelude::*; +use super::Bound; + +pub fn check_bound_by_nft(ctx: Context, nft: Pubkey) -> Result { + if ctx.accounts.device_binding.nft != nft { + return Err(ErrorCode::NFTDoesNotMatch.into()); + } + Ok(ctx.accounts.nft_binding.device != Pubkey::default()) +} \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/instructions/get_device_by_nft.rs b/extensions/puppet/programs/puppet/src/instructions/get_device_by_nft.rs new file mode 100644 index 0000000..09fb2a2 --- /dev/null +++ b/extensions/puppet/programs/puppet/src/instructions/get_device_by_nft.rs @@ -0,0 +1,10 @@ +use crate::errors::ErrorCode; +use anchor_lang::prelude::*; +use super::Bound; + +pub fn get_device_by_nft(ctx: Context, nft: Pubkey) -> Result { + if ctx.accounts.device_binding.nft != nft { + return Err(ErrorCode::NFTDoesNotMatch.into()); + } + Ok(ctx.accounts.nft_binding.device) +} \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/instructions/get_nft_by_device.rs b/extensions/puppet/programs/puppet/src/instructions/get_nft_by_device.rs new file mode 100644 index 0000000..2ccba17 --- /dev/null +++ b/extensions/puppet/programs/puppet/src/instructions/get_nft_by_device.rs @@ -0,0 +1,10 @@ +use crate::errors::ErrorCode; +use anchor_lang::prelude::*; +use super::Bound; + +pub fn get_nft_by_device(ctx: Context, device: Pubkey) -> Result { + if ctx.accounts.nft_binding.device != device { + return Err(ErrorCode::DeviceDoesNotMatch.into()); + } + Ok(ctx.accounts.device_binding.nft) +} \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/instructions/mod.rs b/extensions/puppet/programs/puppet/src/instructions/mod.rs new file mode 100644 index 0000000..f0f589e --- /dev/null +++ b/extensions/puppet/programs/puppet/src/instructions/mod.rs @@ -0,0 +1,11 @@ +pub use bind::*; +pub use check_bound_by_device::*; +pub use check_bound_by_nft::*; +pub use get_nft_by_device::*; +pub use get_device_by_nft::*; + +pub mod bind; +pub mod check_bound_by_device; +pub mod check_bound_by_nft; +pub mod get_nft_by_device; +pub mod get_device_by_nft; \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/lib.rs b/extensions/puppet/programs/puppet/src/lib.rs new file mode 100644 index 0000000..2b29d8d --- /dev/null +++ b/extensions/puppet/programs/puppet/src/lib.rs @@ -0,0 +1,33 @@ +use anchor_lang::prelude::*; +use instructions::*; + +pub mod instructions; +pub mod state; +pub mod errors; + +declare_id!("6nxvjh3D3kLkkb25sgRUdyomfYqeoUv7gfRFgcScy6jN"); + +#[program] +pub mod puppet { + use super::*; + + pub fn bind(ctx: Context, params: BindParams) -> Result<()> { + instructions::bind(ctx, params) + } + + pub fn check_bound_by_device(ctx: Context, device: Pubkey) -> Result { + instructions::check_bound_by_device(ctx, device) + } + + pub fn check_bound_by_nft(ctx: Context, nft: Pubkey) -> Result { + instructions::check_bound_by_nft(ctx, nft) + } + + pub fn get_nft_by_device(ctx: Context, device: Pubkey) -> Result { + instructions::get_nft_by_device(ctx, device) + } + + pub fn get_device_by_nft(ctx: Context, nft: Pubkey) -> Result { + instructions::get_device_by_nft(ctx, nft) + } +} diff --git a/extensions/puppet/programs/puppet/src/state/device_binding.rs b/extensions/puppet/programs/puppet/src/state/device_binding.rs new file mode 100644 index 0000000..9145745 --- /dev/null +++ b/extensions/puppet/programs/puppet/src/state/device_binding.rs @@ -0,0 +1,7 @@ +use anchor_lang::prelude::*; + +#[account] +pub struct DeviceBinding { + pub nft: Pubkey, + pub bump: u8, +} diff --git a/extensions/puppet/programs/puppet/src/state/mod.rs b/extensions/puppet/programs/puppet/src/state/mod.rs new file mode 100644 index 0000000..30cb379 --- /dev/null +++ b/extensions/puppet/programs/puppet/src/state/mod.rs @@ -0,0 +1,5 @@ +pub use device_binding::*; +pub use nft_binding::*; + +pub mod device_binding; +pub mod nft_binding; \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/state/nft_binding.rs b/extensions/puppet/programs/puppet/src/state/nft_binding.rs new file mode 100644 index 0000000..9c128ae --- /dev/null +++ b/extensions/puppet/programs/puppet/src/state/nft_binding.rs @@ -0,0 +1,7 @@ +use anchor_lang::prelude::*; + +#[account] +pub struct NFTBinding { + pub device: Pubkey, + pub bump: u8, +} diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts new file mode 100644 index 0000000..2fb22ec --- /dev/null +++ b/extensions/puppet/tests/puppet.ts @@ -0,0 +1,189 @@ +import * as anchor from "@coral-xyz/anchor"; +import { Program } from "@coral-xyz/anchor"; +import { PublicKey, Keypair } from "@solana/web3.js"; +import { + getOrCreateAssociatedTokenAccount, + createMint, +} from "@solana/spl-token"; +import { assert } from "chai"; +import { Puppet } from "../target/types/puppet"; + +describe("puppet program", () => { + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); + + const program = anchor.workspace.Puppet as Program; + + let payer = Keypair.generate(); + let deviceMint: PublicKey; + let nftMint: PublicKey; + let deviceAccount: PublicKey; + let nftAccount: PublicKey; + let deviceBindingPDA: PublicKey; + let nftBindingPDA: PublicKey; + + before(async () => { + await provider.connection.confirmTransaction( + await provider.connection.requestAirdrop( + payer.publicKey, + anchor.web3.LAMPORTS_PER_SOL + ) + ); + + const [deviceBindingPubkey] = PublicKey.findProgramAddressSync( + [Buffer.from("device_binding"), payer.publicKey.toBuffer()], + program.programId + ); + + const [nftBindingPubkey] = PublicKey.findProgramAddressSync( + [Buffer.from("nft_binding"), payer.publicKey.toBuffer()], + program.programId + ); + + deviceBindingPDA = deviceBindingPubkey; + nftBindingPDA = nftBindingPubkey; + + deviceMint = await createMint( + provider.connection, + payer, + payer.publicKey, // mint authority + null, // freeze authority + 0 // decimals (0 for NFTs) + ); + + nftMint = await createMint( + provider.connection, + payer, + payer.publicKey, + null, + 0 + ); + + deviceAccount = ( + await getOrCreateAssociatedTokenAccount( + provider.connection, + payer, + deviceMint, // deviceMint + payer.publicKey // owner + ) + ).address; + + nftAccount = ( + await getOrCreateAssociatedTokenAccount( + provider.connection, + payer, + nftMint, // nftMint + payer.publicKey // owner + ) + ).address; + }); + + it("binds NFT to device", async () => { + const tx = await program.methods + .bind({ + device: deviceAccount, + nft: nftAccount, + }) + .accounts({ + payer: payer.publicKey, + deviceAccount: deviceAccount, + nftAccount: nftAccount, + }) + .signers([payer]) + .rpc(); + + console.log("Your transaction signature", tx); + + const deviceBinding = await program.account.deviceBinding.fetch( + deviceBindingPDA + ); + const nftBinding = await program.account.nftBinding.fetch(nftBindingPDA); + + assert.equal(deviceBinding.nft.toString(), nftAccount.toString()); + assert.equal(nftBinding.device.toString(), deviceAccount.toString()); + }); + + it("fails to bind if payer does not own NFT", async () => { + let wrongOwner = Keypair.generate(); + await provider.connection.confirmTransaction( + await provider.connection.requestAirdrop( + wrongOwner.publicKey, + anchor.web3.LAMPORTS_PER_SOL + ) + ); + try { + await program.methods + .bind({ + device: deviceAccount, + nft: nftAccount, + }) + .accounts({ + payer: wrongOwner.publicKey, + deviceAccount: deviceAccount, + nftAccount: nftAccount, + }) + .signers([wrongOwner]) + .rpc(); + } catch (err) { + assert.equal(err.error.errorCode.code, "ConstraintRaw"); + } + }); + + it("fails to bind if device already bound", async () => { + const nftAccountUnbound = ( + await getOrCreateAssociatedTokenAccount( + provider.connection, + payer, + deviceMint, + payer.publicKey + ) + ).address; + try { + await program.methods + .bind({ + device: deviceAccount, + nft: nftAccountUnbound, + }) + .accounts({ + payer: payer.publicKey, + deviceAccount: deviceAccount, + nftAccount: nftAccountUnbound, + }) + .signers([payer]) + .rpc(); + assert.fail("Expected error but none was thrown"); + } catch (err) { + const logs = err.logs || []; + assert.isTrue(logs.some((log) => log.includes("already in use"))); + } + }); + + it("fails to bind if nft already bound", async () => { + const deviceAccountUnbound = ( + await getOrCreateAssociatedTokenAccount( + provider.connection, + payer, + deviceMint, + payer.publicKey + ) + ).address; + try { + await program.methods + .bind({ + device: deviceAccountUnbound, + nft: nftAccount, + }) + .accounts({ + payer: payer.publicKey, + deviceAccount: deviceAccountUnbound, + nftAccount: nftAccount, + }) + .signers([payer]) + .rpc(); + assert.fail("Expected error but none was thrown"); + } catch (err) { + const logs = err.logs || []; + assert.isTrue(logs.some((log) => log.includes("already in use"))); + } + }); +}); diff --git a/extensions/puppet/tsconfig.json b/extensions/puppet/tsconfig.json new file mode 100644 index 0000000..cd5d2e3 --- /dev/null +++ b/extensions/puppet/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} From 3b90ce7f633204a974bb91c365618f64c4b4625e Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Mon, 9 Sep 2024 21:15:27 +0800 Subject: [PATCH 02/29] feat: add tests --- Cargo.toml | 2 +- extensions/puppet/pnpm-lock.yaml | 1432 ----------------- .../puppet/programs/puppet/src/errors.rs | 6 - .../programs/puppet/src/instructions/bind.rs | 7 +- extensions/puppet/tests/puppet.ts | 114 +- 5 files changed, 93 insertions(+), 1468 deletions(-) delete mode 100644 extensions/puppet/pnpm-lock.yaml diff --git a/Cargo.toml b/Cargo.toml index 1a7c1ed..e6f9c59 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ members = [ "program", "clients/rust", "cli", - "examples/kwil", + "examples/kwil" ] [workspace.dependencies] diff --git a/extensions/puppet/pnpm-lock.yaml b/extensions/puppet/pnpm-lock.yaml deleted file mode 100644 index b199a5c..0000000 --- a/extensions/puppet/pnpm-lock.yaml +++ /dev/null @@ -1,1432 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@coral-xyz/anchor': - specifier: ^0.30.1 - version: 0.30.1 - -devDependencies: - '@solana/spl-token': - specifier: ^0.4.8 - version: 0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/web3.js': - specifier: ^1.95.3 - version: 1.95.3 - '@types/bn.js': - specifier: ^5.1.0 - version: 5.1.0 - '@types/chai': - specifier: ^4.3.0 - version: 4.3.0 - '@types/mocha': - specifier: ^9.0.0 - version: 9.0.0 - chai: - specifier: ^4.3.4 - version: 4.3.4 - mocha: - specifier: ^9.0.3 - version: 9.0.3 - prettier: - specifier: ^2.6.2 - version: 2.6.2 - ts-mocha: - specifier: ^10.0.0 - version: 10.0.0(mocha@9.0.3) - typescript: - specifier: ^4.3.5 - version: 4.3.5 - -packages: - - /@babel/runtime@7.25.6: - resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - - /@coral-xyz/anchor-errors@0.30.1: - resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} - engines: {node: '>=10'} - dev: false - - /@coral-xyz/anchor@0.30.1: - resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} - engines: {node: '>=11'} - dependencies: - '@coral-xyz/anchor-errors': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.3) - '@noble/hashes': 1.5.0 - '@solana/web3.js': 1.95.3 - bn.js: 5.2.1 - bs58: 4.0.1 - buffer-layout: 1.2.2 - camelcase: 6.3.0 - cross-fetch: 3.1.8 - crypto-hash: 1.3.0 - eventemitter3: 4.0.7 - pako: 2.1.0 - snake-case: 3.0.4 - superstruct: 0.15.5 - toml: 3.0.0 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - - /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.3): - resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} - engines: {node: '>=10'} - peerDependencies: - '@solana/web3.js': ^1.68.0 - dependencies: - '@solana/web3.js': 1.95.3 - bn.js: 5.2.1 - buffer-layout: 1.2.2 - dev: false - - /@noble/curves@1.6.0: - resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} - engines: {node: ^14.21.3 || >=16} - dependencies: - '@noble/hashes': 1.5.0 - - /@noble/hashes@1.5.0: - resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} - engines: {node: ^14.21.3 || >=16} - - /@solana/buffer-layout-utils@0.2.0: - resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} - engines: {node: '>= 10'} - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.3 - bigint-buffer: 1.1.5 - bignumber.js: 9.1.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - - /@solana/buffer-layout@4.0.1: - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} - dependencies: - buffer: 6.0.3 - - /@solana/codecs-core@2.0.0-preview.4(typescript@4.3.5): - resolution: {integrity: sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) - typescript: 4.3.5 - dev: true - - /@solana/codecs-core@2.0.0-rc.1(typescript@4.3.5): - resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) - typescript: 4.3.5 - dev: true - - /@solana/codecs-data-structures@2.0.0-preview.4(typescript@4.3.5): - resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) - typescript: 4.3.5 - dev: true - - /@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.3.5): - resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) - typescript: 4.3.5 - dev: true - - /@solana/codecs-numbers@2.0.0-preview.4(typescript@4.3.5): - resolution: {integrity: sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) - typescript: 4.3.5 - dev: true - - /@solana/codecs-numbers@2.0.0-rc.1(typescript@4.3.5): - resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) - typescript: 4.3.5 - dev: true - - /@solana/codecs-strings@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 4.3.5 - dev: true - - /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 4.3.5 - dev: true - - /@solana/codecs@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/options': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - typescript: 4.3.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: true - - /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - typescript: 4.3.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: true - - /@solana/errors@2.0.0-preview.4(typescript@4.3.5): - resolution: {integrity: sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA==} - hasBin: true - peerDependencies: - typescript: '>=5' - dependencies: - chalk: 5.3.0 - commander: 12.1.0 - typescript: 4.3.5 - dev: true - - /@solana/errors@2.0.0-rc.1(typescript@4.3.5): - resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} - hasBin: true - peerDependencies: - typescript: '>=5' - dependencies: - chalk: 5.3.0 - commander: 12.1.0 - typescript: 4.3.5 - dev: true - - /@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) - typescript: 4.3.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: true - - /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) - typescript: 4.3.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: true - - /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.94.0 - dependencies: - '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - dev: true - - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.95.3 - dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - dev: true - - /@solana/spl-token@0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.94.0 - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/web3.js': 1.95.3 - buffer: 6.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - typescript - - utf-8-validate - dev: true - - /@solana/spl-type-length-value@0.1.0: - resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} - engines: {node: '>=16'} - dependencies: - buffer: 6.0.3 - dev: true - - /@solana/web3.js@1.95.3: - resolution: {integrity: sha512-O6rPUN0w2fkNqx/Z3QJMB9L225Ex10PRDH8bTaIUPZXMPV0QP8ZpPvjQnXK+upUczlRgzHzd6SjKIha1p+I6og==} - dependencies: - '@babel/runtime': 7.25.6 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.2 - node-fetch: 2.7.0 - rpc-websockets: 9.0.2 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - - /@swc/helpers@0.5.13: - resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} - dependencies: - tslib: 2.7.0 - - /@types/bn.js@5.1.0: - resolution: {integrity: sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==} - dependencies: - '@types/node': 22.5.4 - dev: true - - /@types/chai@4.3.0: - resolution: {integrity: sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==} - dev: true - - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 22.5.4 - - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - requiresBuild: true - dev: true - optional: true - - /@types/mocha@9.0.0: - resolution: {integrity: sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==} - dev: true - - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - - /@types/node@22.5.4: - resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==} - dependencies: - undici-types: 6.19.8 - - /@types/uuid@8.3.4: - resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} - - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} - dependencies: - '@types/node': 22.5.4 - - /@types/ws@8.5.12: - resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} - dependencies: - '@types/node': 22.5.4 - - /@ungap/promise-all-settled@1.1.2: - resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} - dev: true - - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - - /agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} - dependencies: - humanize-ms: 1.2.1 - - /ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true - - /ansi-regex@3.0.1: - resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} - engines: {node: '>=4'} - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true - - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /base-x@3.0.10: - resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} - dependencies: - safe-buffer: 5.2.1 - - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - /bigint-buffer@1.1.5: - resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} - engines: {node: '>= 10.0.0'} - requiresBuild: true - dependencies: - bindings: 1.5.0 - - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: true - - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - dev: true - - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - dependencies: - file-uri-to-path: 1.0.0 - - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - - /borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} - dependencies: - bn.js: 5.2.1 - bs58: 4.0.1 - text-encoding-utf-8: 1.0.2 - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.1.1 - dev: true - - /browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - dev: true - - /bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} - dependencies: - base-x: 3.0.10 - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true - - /buffer-layout@1.2.2: - resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} - engines: {node: '>=4.5'} - dev: false - - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - /bufferutil@4.0.8: - resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} - engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.2 - - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - /chai@4.3.4: - resolution: {integrity: sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==} - engines: {node: '>=4'} - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 3.0.1 - get-func-name: 2.0.2 - pathval: 1.1.1 - type-detect: 4.1.0 - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - dependencies: - get-func-name: 2.0.2 - dev: true - - /chokidar@3.5.2: - resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - dev: true - - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: false - - /crypto-hash@1.3.0: - resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} - engines: {node: '>=8'} - dev: false - - /debug@4.3.1(supports-color@8.1.1): - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - supports-color: 8.1.1 - dev: true - - /decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - dev: true - - /deep-eql@3.0.1: - resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} - engines: {node: '>=0.12'} - dependencies: - type-detect: 4.1.0 - dev: true - - /delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} - - /diff@3.5.0: - resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} - engines: {node: '>=0.3.1'} - dev: true - - /diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - dev: true - - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.7.0 - dev: false - - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true - - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - - /es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} - dependencies: - es6-promise: 4.2.8 - - /escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false - - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - - /eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} - - /fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - - /fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - dev: true - - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true - - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.1.7: - resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} - deprecated: Glob versions prior to v9 are no longer supported - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.0.4 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /growl@1.10.5: - resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} - engines: {node: '>=4.x'} - dev: true - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true - - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - dependencies: - ms: 2.1.3 - - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.3.0 - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - dev: true - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: true - - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - - /isomorphic-ws@4.0.1(ws@7.5.10): - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' - dependencies: - ws: 7.5.10 - - /jayson@4.1.2: - resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@types/connect': 3.4.38 - '@types/node': 12.20.55 - '@types/ws': 7.4.7 - JSONStream: 1.3.5 - commander: 2.20.3 - delay: 5.0.0 - es6-promisify: 5.0.0 - eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.10) - json-stringify-safe: 5.0.1 - uuid: 8.3.2 - ws: 7.5.10 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - requiresBuild: true - dependencies: - minimist: 1.2.8 - dev: true - optional: true - - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - dev: true - - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.7.0 - dev: false - - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - - /minimatch@3.0.4: - resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - - /mocha@9.0.3: - resolution: {integrity: sha512-hnYFrSefHxYS2XFGtN01x8un0EwNu2bzKvhpRFhgoybIvMaOkkL60IVPmkb5h6XDmUl4IMSB+rT5cIO4/4bJgg==} - engines: {node: '>= 12.0.0'} - hasBin: true - dependencies: - '@ungap/promise-all-settled': 1.1.2 - ansi-colors: 4.1.1 - browser-stdout: 1.3.1 - chokidar: 3.5.2 - debug: 4.3.1(supports-color@8.1.1) - diff: 5.0.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 7.1.7 - growl: 1.10.5 - he: 1.2.0 - js-yaml: 4.1.0 - log-symbols: 4.1.0 - minimatch: 3.0.4 - ms: 2.1.3 - nanoid: 3.1.23 - serialize-javascript: 6.0.0 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - which: 2.0.2 - wide-align: 1.1.3 - workerpool: 6.1.5 - yargs: 16.2.0 - yargs-parser: 20.2.4 - yargs-unparser: 2.0.0 - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - /nanoid@3.1.23: - resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.7.0 - dev: false - - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - - /node-gyp-build@4.8.2: - resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} - hasBin: true - requiresBuild: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - - /pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - dev: false - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - - /prettier@2.6.2: - resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true - - /rpc-websockets@9.0.2: - resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==} - dependencies: - '@swc/helpers': 0.5.13 - '@types/uuid': 8.3.4 - '@types/ws': 8.5.12 - buffer: 6.0.3 - eventemitter3: 5.0.1 - uuid: 8.3.2 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - optionalDependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - /serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} - dependencies: - randombytes: 2.1.0 - dev: true - - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - dependencies: - dot-case: 3.0.4 - tslib: 2.7.0 - dev: false - - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true - - /string-width@2.1.1: - resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} - engines: {node: '>=4'} - dependencies: - is-fullwidth-code-point: 2.0.0 - strip-ansi: 4.0.0 - dev: true - - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: true - - /strip-ansi@4.0.0: - resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} - engines: {node: '>=4'} - dependencies: - ansi-regex: 3.0.1 - dev: true - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - requiresBuild: true - dev: true - optional: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /superstruct@0.15.5: - resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} - dev: false - - /superstruct@2.0.2: - resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} - engines: {node: '>=14.0.0'} - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - dev: true - - /text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - dev: false - - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - /ts-mocha@10.0.0(mocha@9.0.3): - resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} - engines: {node: '>= 6.X.X'} - hasBin: true - peerDependencies: - mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X - dependencies: - mocha: 9.0.3 - ts-node: 7.0.1 - optionalDependencies: - tsconfig-paths: 3.15.0 - dev: true - - /ts-node@7.0.1: - resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} - engines: {node: '>=4.2.0'} - hasBin: true - dependencies: - arrify: 1.0.1 - buffer-from: 1.1.2 - diff: 3.5.0 - make-error: 1.3.6 - minimist: 1.2.8 - mkdirp: 0.5.6 - source-map-support: 0.5.21 - yn: 2.0.0 - dev: true - - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - requiresBuild: true - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true - optional: true - - /tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - - /type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - dev: true - - /typescript@4.3.5: - resolution: {integrity: sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true - - /undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - - /utf-8-validate@5.0.10: - resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} - engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.2 - - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /wide-align@1.1.3: - resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} - dependencies: - string-width: 2.1.1 - dev: true - - /workerpool@6.1.5: - resolution: {integrity: sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==} - dev: true - - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true - - /yargs-parser@20.2.4: - resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} - engines: {node: '>=10'} - dev: true - - /yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} - dependencies: - camelcase: 6.3.0 - decamelize: 4.0.0 - flat: 5.0.2 - is-plain-obj: 2.1.0 - dev: true - - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.4 - dev: true - - /yn@2.0.0: - resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} - engines: {node: '>=4'} - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true diff --git a/extensions/puppet/programs/puppet/src/errors.rs b/extensions/puppet/programs/puppet/src/errors.rs index 437af3a..f7d906f 100644 --- a/extensions/puppet/programs/puppet/src/errors.rs +++ b/extensions/puppet/programs/puppet/src/errors.rs @@ -8,12 +8,6 @@ pub enum ErrorCode { #[msg("The payer does not own the specified device.")] PayerDoesNotOwnDevice, - #[msg("The provided device has already bound.")] - DeviceAlreadyBound, - - #[msg("The provided nft has already bound.")] - NFTAlreadyBound, - #[msg("The provided device does not match the binding.")] DeviceDoesNotMatch, diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs index 7cbcc7f..4c8e120 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -22,13 +22,16 @@ pub struct Bind<'info> { init, payer = payer, space = 8 + 32 + 1, - seeds = [b"device_binding", payer.key().as_ref()], bump + seeds = [b"device_binding", device_account.key().as_ref()], + bump )] pub device_binding: Account<'info, DeviceBinding>, #[account( init, payer = payer, - space = 8 + 32 + 1, seeds = [b"nft_binding", payer.key().as_ref()], bump + space = 8 + 32 + 1, + seeds = [b"nft_binding", nft_account.key().as_ref()], + bump )] pub nft_binding: Account<'info, NFTBinding>, #[account(mut)] diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index 2fb22ec..d6f996e 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -30,19 +30,6 @@ describe("puppet program", () => { ) ); - const [deviceBindingPubkey] = PublicKey.findProgramAddressSync( - [Buffer.from("device_binding"), payer.publicKey.toBuffer()], - program.programId - ); - - const [nftBindingPubkey] = PublicKey.findProgramAddressSync( - [Buffer.from("nft_binding"), payer.publicKey.toBuffer()], - program.programId - ); - - deviceBindingPDA = deviceBindingPubkey; - nftBindingPDA = nftBindingPubkey; - deviceMint = await createMint( provider.connection, payer, @@ -76,6 +63,19 @@ describe("puppet program", () => { payer.publicKey // owner ) ).address; + + const [deviceBindingPubkey] = PublicKey.findProgramAddressSync( + [Buffer.from("device_binding"), deviceAccount.toBuffer()], + program.programId + ); + + const [nftBindingPubkey] = PublicKey.findProgramAddressSync( + [Buffer.from("nft_binding"), nftAccount.toBuffer()], + program.programId + ); + + deviceBindingPDA = deviceBindingPubkey; + nftBindingPDA = nftBindingPubkey; }); it("binds NFT to device", async () => { @@ -103,29 +103,89 @@ describe("puppet program", () => { assert.equal(nftBinding.device.toString(), deviceAccount.toString()); }); - it("fails to bind if payer does not own NFT", async () => { - let wrongOwner = Keypair.generate(); - await provider.connection.confirmTransaction( - await provider.connection.requestAirdrop( - wrongOwner.publicKey, - anchor.web3.LAMPORTS_PER_SOL + it("fails to bind if payer does not own nft", async () => { + const unboundDeviceAccount = ( + await getOrCreateAssociatedTokenAccount( + provider.connection, + payer, + await createMint( + provider.connection, + payer, + payer.publicKey, + null, + 0 + ), + payer.publicKey ) - ); + ).address + const nftAccountNotOwned = ( + await getOrCreateAssociatedTokenAccount( + provider.connection, + payer, + nftMint, + Keypair.generate().publicKey + ) + ).address; + try { await program.methods .bind({ - device: deviceAccount, - nft: nftAccount, + device: unboundDeviceAccount, + nft: nftAccountNotOwned, }) .accounts({ - payer: wrongOwner.publicKey, - deviceAccount: deviceAccount, - nftAccount: nftAccount, + payer: payer.publicKey, + deviceAccount: unboundDeviceAccount, + nftAccount: nftAccountNotOwned, }) - .signers([wrongOwner]) + .signers([payer]) + .rpc(); + assert.fail("Expected error but none was thrown"); + } catch (err) { + assert.equal(err.error.errorCode.code, "PayerDoesNotOwnNFT"); + } + }); + + it("fails to bind if payer does not own device", async () => { + const unboundNftAccount = ( + await getOrCreateAssociatedTokenAccount( + provider.connection, + payer, + await createMint( + provider.connection, + payer, + payer.publicKey, + null, + 0 + ), + payer.publicKey + ) + ).address + const deviceAccountNotOwned = ( + await getOrCreateAssociatedTokenAccount( + provider.connection, + payer, + deviceMint, + Keypair.generate().publicKey + ) + ).address; + + try { + await program.methods + .bind({ + device: deviceAccountNotOwned, + nft: unboundNftAccount, + }) + .accounts({ + payer: payer.publicKey, + deviceAccount: deviceAccountNotOwned, + nftAccount: unboundNftAccount, + }) + .signers([payer]) .rpc(); + assert.fail("Expected error but none was thrown"); } catch (err) { - assert.equal(err.error.errorCode.code, "ConstraintRaw"); + assert.equal(err.error.errorCode.code, "PayerDoesNotOwnDevice"); } }); From 7fc163b5dfa24157057972611d247d365630fb87 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Mon, 9 Sep 2024 21:57:45 +0800 Subject: [PATCH 03/29] fix: yarn => pnpm --- extensions/puppet/.pnp.cjs | 13790 ---------------------------- extensions/puppet/.pnp.loader.mjs | 2047 ----- extensions/puppet/Anchor.toml | 3 +- extensions/puppet/package.json | 5 +- 4 files changed, 4 insertions(+), 15841 deletions(-) delete mode 100755 extensions/puppet/.pnp.cjs delete mode 100644 extensions/puppet/.pnp.loader.mjs diff --git a/extensions/puppet/.pnp.cjs b/extensions/puppet/.pnp.cjs deleted file mode 100755 index cb530c6..0000000 --- a/extensions/puppet/.pnp.cjs +++ /dev/null @@ -1,13790 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -"use strict"; - -function $$SETUP_STATE(hydrateRuntimeState, basePath) { - return hydrateRuntimeState(JSON.parse('{\ - "__info": [\ - "This file is automatically generated. Do not touch it, or risk",\ - "your modifications being lost. We also recommend you not to read",\ - "it either without using the @yarnpkg/pnp package, as the data layout",\ - "is entirely unspecified and WILL change from a version to another."\ - ],\ - "dependencyTreeRoots": [\ - {\ - "name": "root-workspace-0b6124",\ - "reference": "workspace:."\ - }\ - ],\ - "enableTopLevelFallback": true,\ - "ignorePatternData": "(^(?:\\\\.yarn\\\\/sdks(?:\\\\/(?!\\\\.{1,2}(?:\\\\/|$))(?:(?:(?!(?:^|\\\\/)\\\\.{1,2}(?:\\\\/|$)).)*?)|$))$)",\ - "fallbackExclusionList": [\ - ["root-workspace-0b6124", ["workspace:."]]\ - ],\ - "fallbackPool": [\ - ],\ - "packageRegistryData": [\ - [null, [\ - [null, {\ - "packageLocation": "./",\ - "packageDependencies": [\ - ["@coral-xyz/anchor", "npm:0.30.1"],\ - ["@solana/spl-token", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:0.4.8"],\ - ["@solana/web3.js", "npm:1.95.3"],\ - ["@types/bn.js", "npm:5.1.5"],\ - ["@types/chai", "npm:4.3.19"],\ - ["@types/mocha", "npm:9.1.1"],\ - ["chai", "npm:4.5.0"],\ - ["mocha", "npm:9.2.2"],\ - ["prettier", "npm:2.8.8"],\ - ["typescript", "patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587"]\ - ],\ - "linkType": "SOFT"\ - }]\ - ]],\ - ["@babel/runtime", [\ - ["npm:7.25.6", {\ - "packageLocation": "./.yarn/cache/@babel-runtime-npm-7.25.6-6725f0979a-ee1a69d3ac.zip/node_modules/@babel/runtime/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.25.6"],\ - ["regenerator-runtime", "npm:0.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@coral-xyz/anchor", [\ - ["npm:0.30.1", {\ - "packageLocation": "./.yarn/cache/@coral-xyz-anchor-npm-0.30.1-a611cfd278-eb23f65c81.zip/node_modules/@coral-xyz/anchor/",\ - "packageDependencies": [\ - ["@coral-xyz/anchor", "npm:0.30.1"],\ - ["@coral-xyz/anchor-errors", "npm:0.30.1"],\ - ["@coral-xyz/borsh", "virtual:a611cfd278c4d8a297b1ef0935be119209af2444e0d0255039fdb97aea2daf321ff934bb7d3fd8e0c029a9b8f22090f93f456cb99acfe4e696ec77fab8240b5f#npm:0.30.1"],\ - ["@noble/hashes", "npm:1.5.0"],\ - ["@solana/web3.js", "npm:1.95.3"],\ - ["bn.js", "npm:5.2.1"],\ - ["bs58", "npm:4.0.1"],\ - ["buffer-layout", "npm:1.2.2"],\ - ["camelcase", "npm:6.3.0"],\ - ["cross-fetch", "npm:3.1.8"],\ - ["crypto-hash", "npm:1.3.0"],\ - ["eventemitter3", "npm:4.0.7"],\ - ["pako", "npm:2.1.0"],\ - ["snake-case", "npm:3.0.4"],\ - ["superstruct", "npm:0.15.5"],\ - ["toml", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@coral-xyz/anchor-errors", [\ - ["npm:0.30.1", {\ - "packageLocation": "./.yarn/cache/@coral-xyz-anchor-errors-npm-0.30.1-3d4861734e-52efca5a9c.zip/node_modules/@coral-xyz/anchor-errors/",\ - "packageDependencies": [\ - ["@coral-xyz/anchor-errors", "npm:0.30.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@coral-xyz/borsh", [\ - ["npm:0.30.1", {\ - "packageLocation": "./.yarn/cache/@coral-xyz-borsh-npm-0.30.1-1493a86d3d-eefe1aebc4.zip/node_modules/@coral-xyz/borsh/",\ - "packageDependencies": [\ - ["@coral-xyz/borsh", "npm:0.30.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:a611cfd278c4d8a297b1ef0935be119209af2444e0d0255039fdb97aea2daf321ff934bb7d3fd8e0c029a9b8f22090f93f456cb99acfe4e696ec77fab8240b5f#npm:0.30.1", {\ - "packageLocation": "./.yarn/__virtual__/@coral-xyz-borsh-virtual-de6b9f6553/0/cache/@coral-xyz-borsh-npm-0.30.1-1493a86d3d-eefe1aebc4.zip/node_modules/@coral-xyz/borsh/",\ - "packageDependencies": [\ - ["@coral-xyz/borsh", "virtual:a611cfd278c4d8a297b1ef0935be119209af2444e0d0255039fdb97aea2daf321ff934bb7d3fd8e0c029a9b8f22090f93f456cb99acfe4e696ec77fab8240b5f#npm:0.30.1"],\ - ["@solana/web3.js", "npm:1.95.3"],\ - ["@types/solana__web3.js", null],\ - ["bn.js", "npm:5.2.1"],\ - ["buffer-layout", "npm:1.2.2"]\ - ],\ - "packagePeers": [\ - "@solana/web3.js",\ - "@types/solana__web3.js"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@isaacs/cliui", [\ - ["npm:8.0.2", {\ - "packageLocation": "./.yarn/cache/@isaacs-cliui-npm-8.0.2-f4364666d5-4a473b9b32.zip/node_modules/@isaacs/cliui/",\ - "packageDependencies": [\ - ["@isaacs/cliui", "npm:8.0.2"],\ - ["string-width", "npm:5.1.2"],\ - ["string-width-cjs", [\ - "string-width",\ - "npm:4.2.3"\ - ]],\ - ["strip-ansi", "npm:7.1.0"],\ - ["strip-ansi-cjs", [\ - "strip-ansi",\ - "npm:6.0.1"\ - ]],\ - ["wrap-ansi", "npm:8.1.0"],\ - ["wrap-ansi-cjs", [\ - "wrap-ansi",\ - "npm:7.0.0"\ - ]]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@noble/curves", [\ - ["npm:1.5.0", {\ - "packageLocation": "./.yarn/cache/@noble-curves-npm-1.5.0-0b83ccd02e-a43464c5db.zip/node_modules/@noble/curves/",\ - "packageDependencies": [\ - ["@noble/curves", "npm:1.5.0"],\ - ["@noble/hashes", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@noble/hashes", [\ - ["npm:1.4.0", {\ - "packageLocation": "./.yarn/cache/@noble-hashes-npm-1.4.0-9389282fd6-8ba816ae26.zip/node_modules/@noble/hashes/",\ - "packageDependencies": [\ - ["@noble/hashes", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.5.0", {\ - "packageLocation": "./.yarn/cache/@noble-hashes-npm-1.5.0-87c768d742-9cc031d5c8.zip/node_modules/@noble/hashes/",\ - "packageDependencies": [\ - ["@noble/hashes", "npm:1.5.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@npmcli/agent", [\ - ["npm:2.2.2", {\ - "packageLocation": "./.yarn/cache/@npmcli-agent-npm-2.2.2-e2f559d6c0-67de7b88cc.zip/node_modules/@npmcli/agent/",\ - "packageDependencies": [\ - ["@npmcli/agent", "npm:2.2.2"],\ - ["agent-base", "npm:7.1.1"],\ - ["http-proxy-agent", "npm:7.0.2"],\ - ["https-proxy-agent", "npm:7.0.5"],\ - ["lru-cache", "npm:10.4.3"],\ - ["socks-proxy-agent", "npm:8.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@npmcli/fs", [\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/@npmcli-fs-npm-3.1.1-c19bd09f3c-d960cab4b9.zip/node_modules/@npmcli/fs/",\ - "packageDependencies": [\ - ["@npmcli/fs", "npm:3.1.1"],\ - ["semver", "npm:7.6.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@pkgjs/parseargs", [\ - ["npm:0.11.0", {\ - "packageLocation": "./.yarn/cache/@pkgjs-parseargs-npm-0.11.0-cd2a3fe948-6ad6a00fc4.zip/node_modules/@pkgjs/parseargs/",\ - "packageDependencies": [\ - ["@pkgjs/parseargs", "npm:0.11.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/buffer-layout", [\ - ["npm:4.0.1", {\ - "packageLocation": "./.yarn/cache/@solana-buffer-layout-npm-4.0.1-4100001d9d-bf846888e8.zip/node_modules/@solana/buffer-layout/",\ - "packageDependencies": [\ - ["@solana/buffer-layout", "npm:4.0.1"],\ - ["buffer", "npm:6.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/buffer-layout-utils", [\ - ["npm:0.2.0", {\ - "packageLocation": "./.yarn/cache/@solana-buffer-layout-utils-npm-0.2.0-149b69c46e-9284242245.zip/node_modules/@solana/buffer-layout-utils/",\ - "packageDependencies": [\ - ["@solana/buffer-layout-utils", "npm:0.2.0"],\ - ["@solana/buffer-layout", "npm:4.0.1"],\ - ["@solana/web3.js", "npm:1.95.3"],\ - ["bigint-buffer", "npm:1.1.5"],\ - ["bignumber.js", "npm:9.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/codecs", [\ - ["npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/cache/@solana-codecs-npm-2.0.0-preview.4-02d9a7993a-fea7d819c3.zip/node_modules/@solana/codecs/",\ - "packageDependencies": [\ - ["@solana/codecs", "npm:2.0.0-preview.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/cache/@solana-codecs-npm-2.0.0-rc.1-7d3ba53573-8586abfd1e.zip/node_modules/@solana/codecs/",\ - "packageDependencies": [\ - ["@solana/codecs", "npm:2.0.0-rc.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9b4225e4633e43dc44aff00cedbb660c48f77f7c560429d814b54583a93dd5d29703f0e2d97269c25e0e1a8337fcee4b99470a0233779b7a46aeea61ec2fcdc6#npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/__virtual__/@solana-codecs-virtual-9270789288/0/cache/@solana-codecs-npm-2.0.0-rc.1-7d3ba53573-8586abfd1e.zip/node_modules/@solana/codecs/",\ - "packageDependencies": [\ - ["@solana/codecs", "virtual:9b4225e4633e43dc44aff00cedbb660c48f77f7c560429d814b54583a93dd5d29703f0e2d97269c25e0e1a8337fcee4b99470a0233779b7a46aeea61ec2fcdc6#npm:2.0.0-rc.1"],\ - ["@solana/codecs-core", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/codecs-data-structures", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/codecs-numbers", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/codecs-strings", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/options", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@types/typescript", null],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:df33a3bd679b894d89fd609f0e4e5cc08a3229047d378fff9b949b04dbf9378cdd55bd412319843af34ed168545952695d9518fb30810438b8ae6be5a534c1dc#npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/__virtual__/@solana-codecs-virtual-685e525d0c/0/cache/@solana-codecs-npm-2.0.0-preview.4-02d9a7993a-fea7d819c3.zip/node_modules/@solana/codecs/",\ - "packageDependencies": [\ - ["@solana/codecs", "virtual:df33a3bd679b894d89fd609f0e4e5cc08a3229047d378fff9b949b04dbf9378cdd55bd412319843af34ed168545952695d9518fb30810438b8ae6be5a534c1dc#npm:2.0.0-preview.4"],\ - ["@solana/codecs-core", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/codecs-data-structures", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/codecs-numbers", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/codecs-strings", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/options", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@types/typescript", null],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/codecs-core", [\ - ["npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/cache/@solana-codecs-core-npm-2.0.0-preview.4-21c3e46248-5dca4b46b0.zip/node_modules/@solana/codecs-core/",\ - "packageDependencies": [\ - ["@solana/codecs-core", "npm:2.0.0-preview.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/cache/@solana-codecs-core-npm-2.0.0-rc.1-5076cbaceb-e3a138cbdc.zip/node_modules/@solana/codecs-core/",\ - "packageDependencies": [\ - ["@solana/codecs-core", "npm:2.0.0-rc.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/__virtual__/@solana-codecs-core-virtual-1af88302b7/0/cache/@solana-codecs-core-npm-2.0.0-preview.4-21c3e46248-5dca4b46b0.zip/node_modules/@solana/codecs-core/",\ - "packageDependencies": [\ - ["@solana/codecs-core", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/errors", "virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4"],\ - ["@types/typescript", null],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/__virtual__/@solana-codecs-core-virtual-801b948eb0/0/cache/@solana-codecs-core-npm-2.0.0-rc.1-5076cbaceb-e3a138cbdc.zip/node_modules/@solana/codecs-core/",\ - "packageDependencies": [\ - ["@solana/codecs-core", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/errors", "virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1"],\ - ["@types/typescript", null],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/codecs-data-structures", [\ - ["npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/cache/@solana-codecs-data-structures-npm-2.0.0-preview.4-f90ffabb98-1af74509e9.zip/node_modules/@solana/codecs-data-structures/",\ - "packageDependencies": [\ - ["@solana/codecs-data-structures", "npm:2.0.0-preview.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/cache/@solana-codecs-data-structures-npm-2.0.0-rc.1-239d9704c0-7c24700be7.zip/node_modules/@solana/codecs-data-structures/",\ - "packageDependencies": [\ - ["@solana/codecs-data-structures", "npm:2.0.0-rc.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/__virtual__/@solana-codecs-data-structures-virtual-a937c3d3b4/0/cache/@solana-codecs-data-structures-npm-2.0.0-preview.4-f90ffabb98-1af74509e9.zip/node_modules/@solana/codecs-data-structures/",\ - "packageDependencies": [\ - ["@solana/codecs-data-structures", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/codecs-core", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/codecs-numbers", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/errors", "virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4"],\ - ["@types/typescript", null],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/__virtual__/@solana-codecs-data-structures-virtual-3214fc4540/0/cache/@solana-codecs-data-structures-npm-2.0.0-rc.1-239d9704c0-7c24700be7.zip/node_modules/@solana/codecs-data-structures/",\ - "packageDependencies": [\ - ["@solana/codecs-data-structures", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/codecs-core", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/codecs-numbers", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/errors", "virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1"],\ - ["@types/typescript", null],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/codecs-numbers", [\ - ["npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/cache/@solana-codecs-numbers-npm-2.0.0-preview.4-73ca84b919-f7eb51b70a.zip/node_modules/@solana/codecs-numbers/",\ - "packageDependencies": [\ - ["@solana/codecs-numbers", "npm:2.0.0-preview.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/cache/@solana-codecs-numbers-npm-2.0.0-rc.1-115b36782e-370c1f9497.zip/node_modules/@solana/codecs-numbers/",\ - "packageDependencies": [\ - ["@solana/codecs-numbers", "npm:2.0.0-rc.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/__virtual__/@solana-codecs-numbers-virtual-62ab57b7c3/0/cache/@solana-codecs-numbers-npm-2.0.0-preview.4-73ca84b919-f7eb51b70a.zip/node_modules/@solana/codecs-numbers/",\ - "packageDependencies": [\ - ["@solana/codecs-numbers", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/codecs-core", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/errors", "virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4"],\ - ["@types/typescript", null],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/__virtual__/@solana-codecs-numbers-virtual-38d67604ea/0/cache/@solana-codecs-numbers-npm-2.0.0-rc.1-115b36782e-370c1f9497.zip/node_modules/@solana/codecs-numbers/",\ - "packageDependencies": [\ - ["@solana/codecs-numbers", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/codecs-core", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/errors", "virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1"],\ - ["@types/typescript", null],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/codecs-strings", [\ - ["npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/cache/@solana-codecs-strings-npm-2.0.0-preview.4-71815c9c19-979503d496.zip/node_modules/@solana/codecs-strings/",\ - "packageDependencies": [\ - ["@solana/codecs-strings", "npm:2.0.0-preview.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/cache/@solana-codecs-strings-npm-2.0.0-rc.1-182be3c4d7-0706605311.zip/node_modules/@solana/codecs-strings/",\ - "packageDependencies": [\ - ["@solana/codecs-strings", "npm:2.0.0-rc.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/__virtual__/@solana-codecs-strings-virtual-5636a140b5/0/cache/@solana-codecs-strings-npm-2.0.0-preview.4-71815c9c19-979503d496.zip/node_modules/@solana/codecs-strings/",\ - "packageDependencies": [\ - ["@solana/codecs-strings", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/codecs-core", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/codecs-numbers", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/errors", "virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4"],\ - ["@types/fastestsmallesttextencoderdecoder", null],\ - ["@types/typescript", null],\ - ["fastestsmallesttextencoderdecoder", null],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/fastestsmallesttextencoderdecoder",\ - "@types/typescript",\ - "fastestsmallesttextencoderdecoder",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/__virtual__/@solana-codecs-strings-virtual-f02205ddab/0/cache/@solana-codecs-strings-npm-2.0.0-rc.1-182be3c4d7-0706605311.zip/node_modules/@solana/codecs-strings/",\ - "packageDependencies": [\ - ["@solana/codecs-strings", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/codecs-core", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/codecs-numbers", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/errors", "virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1"],\ - ["@types/fastestsmallesttextencoderdecoder", null],\ - ["@types/typescript", null],\ - ["fastestsmallesttextencoderdecoder", null],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/fastestsmallesttextencoderdecoder",\ - "@types/typescript",\ - "fastestsmallesttextencoderdecoder",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/errors", [\ - ["npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/cache/@solana-errors-npm-2.0.0-preview.4-088b5752c5-e7e4b3a395.zip/node_modules/@solana/errors/",\ - "packageDependencies": [\ - ["@solana/errors", "npm:2.0.0-preview.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/cache/@solana-errors-npm-2.0.0-rc.1-99b9f45244-906892a892.zip/node_modules/@solana/errors/",\ - "packageDependencies": [\ - ["@solana/errors", "npm:2.0.0-rc.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/__virtual__/@solana-errors-virtual-c47126f070/0/cache/@solana-errors-npm-2.0.0-preview.4-088b5752c5-e7e4b3a395.zip/node_modules/@solana/errors/",\ - "packageDependencies": [\ - ["@solana/errors", "virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4"],\ - ["@types/typescript", null],\ - ["chalk", "npm:5.3.0"],\ - ["commander", "npm:12.1.0"],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/__virtual__/@solana-errors-virtual-09ad96cf3a/0/cache/@solana-errors-npm-2.0.0-rc.1-99b9f45244-906892a892.zip/node_modules/@solana/errors/",\ - "packageDependencies": [\ - ["@solana/errors", "virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1"],\ - ["@types/typescript", null],\ - ["chalk", "npm:5.3.0"],\ - ["commander", "npm:12.1.0"],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/options", [\ - ["npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/cache/@solana-options-npm-2.0.0-preview.4-661d6401ae-d6da97a14b.zip/node_modules/@solana/options/",\ - "packageDependencies": [\ - ["@solana/options", "npm:2.0.0-preview.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/cache/@solana-options-npm-2.0.0-rc.1-fce3f9ae7e-63f3ed04e5.zip/node_modules/@solana/options/",\ - "packageDependencies": [\ - ["@solana/options", "npm:2.0.0-rc.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4", {\ - "packageLocation": "./.yarn/__virtual__/@solana-options-virtual-a3c45a08bb/0/cache/@solana-options-npm-2.0.0-preview.4-661d6401ae-d6da97a14b.zip/node_modules/@solana/options/",\ - "packageDependencies": [\ - ["@solana/options", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/codecs-core", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/codecs-data-structures", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/codecs-numbers", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/codecs-strings", "virtual:685e525d0ce281de660e323a623fd82d3ec4bff2d2bce421905f96781cf25155358daa347526bfba8048f5ac0b8cfb5c13555fbb1d776445cc56d6464bccf63c#npm:2.0.0-preview.4"],\ - ["@solana/errors", "virtual:1af88302b7180b78fb26dbf0b66ba664b1cd014db127dabf5729d366caa399fa63418223aaf2c568dd5e2dd29d924c98f400c5f1c75270f15463d30e83868058#npm:2.0.0-preview.4"],\ - ["@types/typescript", null],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1", {\ - "packageLocation": "./.yarn/__virtual__/@solana-options-virtual-d7fe290a11/0/cache/@solana-options-npm-2.0.0-rc.1-fce3f9ae7e-63f3ed04e5.zip/node_modules/@solana/options/",\ - "packageDependencies": [\ - ["@solana/options", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/codecs-core", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/codecs-data-structures", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/codecs-numbers", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/codecs-strings", "virtual:9270789288fd369b7366c0bda3c19c0dc9966adfc0474df2f326c58530cc41c250c17800144c28797389c3a51f90a563be9e0e8fc4baf3315c5e0107d033d120#npm:2.0.0-rc.1"],\ - ["@solana/errors", "virtual:801b948eb05655f060857c014d8876ddcf989ca62637c52d4e8cf232607d11bf090ec811d5cf77787479abb1881322a0fa41ba8c541417fe6066b35589b95413#npm:2.0.0-rc.1"],\ - ["@types/typescript", null],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/spl-token", [\ - ["npm:0.4.8", {\ - "packageLocation": "./.yarn/cache/@solana-spl-token-npm-0.4.8-e1313fe791-85c48b2bae.zip/node_modules/@solana/spl-token/",\ - "packageDependencies": [\ - ["@solana/spl-token", "npm:0.4.8"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:0.4.8", {\ - "packageLocation": "./.yarn/__virtual__/@solana-spl-token-virtual-b70f378881/0/cache/@solana-spl-token-npm-0.4.8-e1313fe791-85c48b2bae.zip/node_modules/@solana/spl-token/",\ - "packageDependencies": [\ - ["@solana/spl-token", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:0.4.8"],\ - ["@solana/buffer-layout", "npm:4.0.1"],\ - ["@solana/buffer-layout-utils", "npm:0.2.0"],\ - ["@solana/spl-token-group", "virtual:b70f3788819cba1fffc3b84924c6d5a03086b8a48628d8cb3ffbfd7ca1fa2b6e5e2890e2652120bede49e2b26601ae80004706656d5b0e05e9d9cab4de635cd3#npm:0.0.5"],\ - ["@solana/spl-token-metadata", "virtual:b70f3788819cba1fffc3b84924c6d5a03086b8a48628d8cb3ffbfd7ca1fa2b6e5e2890e2652120bede49e2b26601ae80004706656d5b0e05e9d9cab4de635cd3#npm:0.1.5"],\ - ["@solana/web3.js", "npm:1.95.3"],\ - ["@types/solana__web3.js", null],\ - ["buffer", "npm:6.0.3"]\ - ],\ - "packagePeers": [\ - "@solana/web3.js",\ - "@types/solana__web3.js"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/spl-token-group", [\ - ["npm:0.0.5", {\ - "packageLocation": "./.yarn/cache/@solana-spl-token-group-npm-0.0.5-48e9de023b-0bfe93e467.zip/node_modules/@solana/spl-token-group/",\ - "packageDependencies": [\ - ["@solana/spl-token-group", "npm:0.0.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:b70f3788819cba1fffc3b84924c6d5a03086b8a48628d8cb3ffbfd7ca1fa2b6e5e2890e2652120bede49e2b26601ae80004706656d5b0e05e9d9cab4de635cd3#npm:0.0.5", {\ - "packageLocation": "./.yarn/__virtual__/@solana-spl-token-group-virtual-df33a3bd67/0/cache/@solana-spl-token-group-npm-0.0.5-48e9de023b-0bfe93e467.zip/node_modules/@solana/spl-token-group/",\ - "packageDependencies": [\ - ["@solana/spl-token-group", "virtual:b70f3788819cba1fffc3b84924c6d5a03086b8a48628d8cb3ffbfd7ca1fa2b6e5e2890e2652120bede49e2b26601ae80004706656d5b0e05e9d9cab4de635cd3#npm:0.0.5"],\ - ["@solana/codecs", "virtual:df33a3bd679b894d89fd609f0e4e5cc08a3229047d378fff9b949b04dbf9378cdd55bd412319843af34ed168545952695d9518fb30810438b8ae6be5a534c1dc#npm:2.0.0-preview.4"],\ - ["@solana/spl-type-length-value", "npm:0.1.0"],\ - ["@solana/web3.js", "npm:1.95.3"],\ - ["@types/solana__web3.js", null]\ - ],\ - "packagePeers": [\ - "@solana/web3.js",\ - "@types/solana__web3.js"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/spl-token-metadata", [\ - ["npm:0.1.5", {\ - "packageLocation": "./.yarn/cache/@solana-spl-token-metadata-npm-0.1.5-3e43b1c467-dffe1bf05c.zip/node_modules/@solana/spl-token-metadata/",\ - "packageDependencies": [\ - ["@solana/spl-token-metadata", "npm:0.1.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:b70f3788819cba1fffc3b84924c6d5a03086b8a48628d8cb3ffbfd7ca1fa2b6e5e2890e2652120bede49e2b26601ae80004706656d5b0e05e9d9cab4de635cd3#npm:0.1.5", {\ - "packageLocation": "./.yarn/__virtual__/@solana-spl-token-metadata-virtual-9b4225e463/0/cache/@solana-spl-token-metadata-npm-0.1.5-3e43b1c467-dffe1bf05c.zip/node_modules/@solana/spl-token-metadata/",\ - "packageDependencies": [\ - ["@solana/spl-token-metadata", "virtual:b70f3788819cba1fffc3b84924c6d5a03086b8a48628d8cb3ffbfd7ca1fa2b6e5e2890e2652120bede49e2b26601ae80004706656d5b0e05e9d9cab4de635cd3#npm:0.1.5"],\ - ["@solana/codecs", "virtual:9b4225e4633e43dc44aff00cedbb660c48f77f7c560429d814b54583a93dd5d29703f0e2d97269c25e0e1a8337fcee4b99470a0233779b7a46aeea61ec2fcdc6#npm:2.0.0-rc.1"],\ - ["@solana/spl-type-length-value", "npm:0.1.0"],\ - ["@solana/web3.js", "npm:1.95.3"],\ - ["@types/solana__web3.js", null]\ - ],\ - "packagePeers": [\ - "@solana/web3.js",\ - "@types/solana__web3.js"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/spl-type-length-value", [\ - ["npm:0.1.0", {\ - "packageLocation": "./.yarn/cache/@solana-spl-type-length-value-npm-0.1.0-ca9d32fb55-9bea6d9638.zip/node_modules/@solana/spl-type-length-value/",\ - "packageDependencies": [\ - ["@solana/spl-type-length-value", "npm:0.1.0"],\ - ["buffer", "npm:6.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@solana/web3.js", [\ - ["npm:1.95.3", {\ - "packageLocation": "./.yarn/cache/@solana-web3.js-npm-1.95.3-8970ebf295-6951eb1227.zip/node_modules/@solana/web3.js/",\ - "packageDependencies": [\ - ["@solana/web3.js", "npm:1.95.3"],\ - ["@babel/runtime", "npm:7.25.6"],\ - ["@noble/curves", "npm:1.5.0"],\ - ["@noble/hashes", "npm:1.5.0"],\ - ["@solana/buffer-layout", "npm:4.0.1"],\ - ["agentkeepalive", "npm:4.5.0"],\ - ["bigint-buffer", "npm:1.1.5"],\ - ["bn.js", "npm:5.2.1"],\ - ["borsh", "npm:0.7.0"],\ - ["bs58", "npm:4.0.1"],\ - ["buffer", "npm:6.0.3"],\ - ["fast-stable-stringify", "npm:1.0.0"],\ - ["jayson", "npm:4.1.2"],\ - ["node-fetch", "virtual:8970ebf2951b774bae22c19f886b18bd69eadd91cfae0adaae1cc534c141455e70a4695fdc1ca30ba2b550374110aabc3fa5bec15cda285b125c397b8a51f498#npm:2.7.0"],\ - ["rpc-websockets", "npm:9.0.2"],\ - ["superstruct", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@swc/helpers", [\ - ["npm:0.5.13", {\ - "packageLocation": "./.yarn/cache/@swc-helpers-npm-0.5.13-763e72c536-d50c2c10da.zip/node_modules/@swc/helpers/",\ - "packageDependencies": [\ - ["@swc/helpers", "npm:0.5.13"],\ - ["tslib", "npm:2.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/bn.js", [\ - ["npm:5.1.5", {\ - "packageLocation": "./.yarn/cache/@types-bn.js-npm-5.1.5-c2195eccd3-c87b28c4af.zip/node_modules/@types/bn.js/",\ - "packageDependencies": [\ - ["@types/bn.js", "npm:5.1.5"],\ - ["@types/node", "npm:22.5.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/chai", [\ - ["npm:4.3.19", {\ - "packageLocation": "./.yarn/cache/@types-chai-npm-4.3.19-6ae19a8f2e-abd4d32397.zip/node_modules/@types/chai/",\ - "packageDependencies": [\ - ["@types/chai", "npm:4.3.19"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/connect", [\ - ["npm:3.4.38", {\ - "packageLocation": "./.yarn/cache/@types-connect-npm-3.4.38-a8a4c38337-7eb1bc5342.zip/node_modules/@types/connect/",\ - "packageDependencies": [\ - ["@types/connect", "npm:3.4.38"],\ - ["@types/node", "npm:22.5.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/mocha", [\ - ["npm:9.1.1", {\ - "packageLocation": "./.yarn/cache/@types-mocha-npm-9.1.1-9646576ed0-516077c0ac.zip/node_modules/@types/mocha/",\ - "packageDependencies": [\ - ["@types/mocha", "npm:9.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/node", [\ - ["npm:12.20.55", {\ - "packageLocation": "./.yarn/cache/@types-node-npm-12.20.55-88487587a4-e4f86785f4.zip/node_modules/@types/node/",\ - "packageDependencies": [\ - ["@types/node", "npm:12.20.55"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:22.5.2", {\ - "packageLocation": "./.yarn/cache/@types-node-npm-22.5.2-430cf418f9-5e47839dd1.zip/node_modules/@types/node/",\ - "packageDependencies": [\ - ["@types/node", "npm:22.5.2"],\ - ["undici-types", "npm:6.19.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/uuid", [\ - ["npm:8.3.4", {\ - "packageLocation": "./.yarn/cache/@types-uuid-npm-8.3.4-7547f4402c-6f11f3ff70.zip/node_modules/@types/uuid/",\ - "packageDependencies": [\ - ["@types/uuid", "npm:8.3.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/ws", [\ - ["npm:7.4.7", {\ - "packageLocation": "./.yarn/cache/@types-ws-npm-7.4.7-d0c95c0958-b4c9b8ad20.zip/node_modules/@types/ws/",\ - "packageDependencies": [\ - ["@types/ws", "npm:7.4.7"],\ - ["@types/node", "npm:22.5.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.5.12", {\ - "packageLocation": "./.yarn/cache/@types-ws-npm-8.5.12-90c42288cf-ddefb6ad16.zip/node_modules/@types/ws/",\ - "packageDependencies": [\ - ["@types/ws", "npm:8.5.12"],\ - ["@types/node", "npm:22.5.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@ungap/promise-all-settled", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/@ungap-promise-all-settled-npm-1.1.2-c0f42e147b-08d37fdfa2.zip/node_modules/@ungap/promise-all-settled/",\ - "packageDependencies": [\ - ["@ungap/promise-all-settled", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["JSONStream", [\ - ["npm:1.3.5", {\ - "packageLocation": "./.yarn/cache/JSONStream-npm-1.3.5-1987f2e6dd-2605fa1242.zip/node_modules/JSONStream/",\ - "packageDependencies": [\ - ["JSONStream", "npm:1.3.5"],\ - ["jsonparse", "npm:1.3.1"],\ - ["through", "npm:2.3.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["abbrev", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/abbrev-npm-2.0.0-0eb38a17e5-0e994ad2aa.zip/node_modules/abbrev/",\ - "packageDependencies": [\ - ["abbrev", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["agent-base", [\ - ["npm:7.1.1", {\ - "packageLocation": "./.yarn/cache/agent-base-npm-7.1.1-c9e1a4b59e-51c158769c.zip/node_modules/agent-base/",\ - "packageDependencies": [\ - ["agent-base", "npm:7.1.1"],\ - ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["agentkeepalive", [\ - ["npm:4.5.0", {\ - "packageLocation": "./.yarn/cache/agentkeepalive-npm-4.5.0-f237b580b2-13278cd5b1.zip/node_modules/agentkeepalive/",\ - "packageDependencies": [\ - ["agentkeepalive", "npm:4.5.0"],\ - ["humanize-ms", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["aggregate-error", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/aggregate-error-npm-3.1.0-415a406f4e-1101a33f21.zip/node_modules/aggregate-error/",\ - "packageDependencies": [\ - ["aggregate-error", "npm:3.1.0"],\ - ["clean-stack", "npm:2.2.0"],\ - ["indent-string", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ansi-colors", [\ - ["npm:4.1.1", {\ - "packageLocation": "./.yarn/cache/ansi-colors-npm-4.1.1-97ad42f223-138d04a510.zip/node_modules/ansi-colors/",\ - "packageDependencies": [\ - ["ansi-colors", "npm:4.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ansi-regex", [\ - ["npm:5.0.1", {\ - "packageLocation": "./.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip/node_modules/ansi-regex/",\ - "packageDependencies": [\ - ["ansi-regex", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.0.1", {\ - "packageLocation": "./.yarn/cache/ansi-regex-npm-6.0.1-8d663a607d-1ff8b7667c.zip/node_modules/ansi-regex/",\ - "packageDependencies": [\ - ["ansi-regex", "npm:6.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ansi-styles", [\ - ["npm:4.3.0", {\ - "packageLocation": "./.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-513b44c3b2.zip/node_modules/ansi-styles/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:4.3.0"],\ - ["color-convert", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.2.1", {\ - "packageLocation": "./.yarn/cache/ansi-styles-npm-6.2.1-d43647018c-ef940f2f0c.zip/node_modules/ansi-styles/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:6.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["anymatch", [\ - ["npm:3.1.3", {\ - "packageLocation": "./.yarn/cache/anymatch-npm-3.1.3-bc81d103b1-3e044fd6d1.zip/node_modules/anymatch/",\ - "packageDependencies": [\ - ["anymatch", "npm:3.1.3"],\ - ["normalize-path", "npm:3.0.0"],\ - ["picomatch", "npm:2.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["argparse", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/argparse-npm-2.0.1-faff7999e6-83644b5649.zip/node_modules/argparse/",\ - "packageDependencies": [\ - ["argparse", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["assertion-error", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/assertion-error-npm-1.1.0-66b893015e-fd9429d3a3.zip/node_modules/assertion-error/",\ - "packageDependencies": [\ - ["assertion-error", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["balanced-match", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip/node_modules/balanced-match/",\ - "packageDependencies": [\ - ["balanced-match", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["base-x", [\ - ["npm:3.0.10", {\ - "packageLocation": "./.yarn/cache/base-x-npm-3.0.10-2d05c06792-5230773955.zip/node_modules/base-x/",\ - "packageDependencies": [\ - ["base-x", "npm:3.0.10"],\ - ["safe-buffer", "npm:5.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["base64-js", [\ - ["npm:1.5.1", {\ - "packageLocation": "./.yarn/cache/base64-js-npm-1.5.1-b2f7275641-669632eb37.zip/node_modules/base64-js/",\ - "packageDependencies": [\ - ["base64-js", "npm:1.5.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bigint-buffer", [\ - ["npm:1.1.5", {\ - "packageLocation": "./.yarn/unplugged/bigint-buffer-npm-1.1.5-785f4ccd92/node_modules/bigint-buffer/",\ - "packageDependencies": [\ - ["bigint-buffer", "npm:1.1.5"],\ - ["bindings", "npm:1.5.0"],\ - ["node-gyp", "npm:10.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bignumber.js", [\ - ["npm:9.1.2", {\ - "packageLocation": "./.yarn/cache/bignumber.js-npm-9.1.2-c2228c6a4a-582c03af77.zip/node_modules/bignumber.js/",\ - "packageDependencies": [\ - ["bignumber.js", "npm:9.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["binary-extensions", [\ - ["npm:2.3.0", {\ - "packageLocation": "./.yarn/cache/binary-extensions-npm-2.3.0-bd3f20d865-bcad01494e.zip/node_modules/binary-extensions/",\ - "packageDependencies": [\ - ["binary-extensions", "npm:2.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bindings", [\ - ["npm:1.5.0", {\ - "packageLocation": "./.yarn/cache/bindings-npm-1.5.0-77ce1d213c-65b6b48095.zip/node_modules/bindings/",\ - "packageDependencies": [\ - ["bindings", "npm:1.5.0"],\ - ["file-uri-to-path", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bn.js", [\ - ["npm:5.2.1", {\ - "packageLocation": "./.yarn/cache/bn.js-npm-5.2.1-dc952b1965-3dd8c8d380.zip/node_modules/bn.js/",\ - "packageDependencies": [\ - ["bn.js", "npm:5.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["borsh", [\ - ["npm:0.7.0", {\ - "packageLocation": "./.yarn/cache/borsh-npm-0.7.0-c3e1c21bb3-e98bfb5f7c.zip/node_modules/borsh/",\ - "packageDependencies": [\ - ["borsh", "npm:0.7.0"],\ - ["bn.js", "npm:5.2.1"],\ - ["bs58", "npm:4.0.1"],\ - ["text-encoding-utf-8", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["brace-expansion", [\ - ["npm:1.1.11", {\ - "packageLocation": "./.yarn/cache/brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip/node_modules/brace-expansion/",\ - "packageDependencies": [\ - ["brace-expansion", "npm:1.1.11"],\ - ["balanced-match", "npm:1.0.2"],\ - ["concat-map", "npm:0.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/brace-expansion-npm-2.0.1-17aa2616f9-a61e7cd2e8.zip/node_modules/brace-expansion/",\ - "packageDependencies": [\ - ["brace-expansion", "npm:2.0.1"],\ - ["balanced-match", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["braces", [\ - ["npm:3.0.3", {\ - "packageLocation": "./.yarn/cache/braces-npm-3.0.3-582c14023c-b95aa0b3bd.zip/node_modules/braces/",\ - "packageDependencies": [\ - ["braces", "npm:3.0.3"],\ - ["fill-range", "npm:7.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["browser-stdout", [\ - ["npm:1.3.1", {\ - "packageLocation": "./.yarn/cache/browser-stdout-npm-1.3.1-6b2376bf3f-b717b19b25.zip/node_modules/browser-stdout/",\ - "packageDependencies": [\ - ["browser-stdout", "npm:1.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bs58", [\ - ["npm:4.0.1", {\ - "packageLocation": "./.yarn/cache/bs58-npm-4.0.1-8d2a7822b1-b3c5365bb9.zip/node_modules/bs58/",\ - "packageDependencies": [\ - ["bs58", "npm:4.0.1"],\ - ["base-x", "npm:3.0.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["buffer", [\ - ["npm:6.0.3", {\ - "packageLocation": "./.yarn/cache/buffer-npm-6.0.3-cd90dfedfe-5ad23293d9.zip/node_modules/buffer/",\ - "packageDependencies": [\ - ["buffer", "npm:6.0.3"],\ - ["base64-js", "npm:1.5.1"],\ - ["ieee754", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["buffer-layout", [\ - ["npm:1.2.2", {\ - "packageLocation": "./.yarn/unplugged/buffer-layout-npm-1.2.2-aac897d21a/node_modules/buffer-layout/",\ - "packageDependencies": [\ - ["buffer-layout", "npm:1.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bufferutil", [\ - ["npm:4.0.8", {\ - "packageLocation": "./.yarn/unplugged/bufferutil-npm-4.0.8-8005ed6210/node_modules/bufferutil/",\ - "packageDependencies": [\ - ["bufferutil", "npm:4.0.8"],\ - ["node-gyp", "npm:10.2.0"],\ - ["node-gyp-build", "npm:4.8.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cacache", [\ - ["npm:18.0.4", {\ - "packageLocation": "./.yarn/cache/cacache-npm-18.0.4-3dc4edc849-b7422c113b.zip/node_modules/cacache/",\ - "packageDependencies": [\ - ["cacache", "npm:18.0.4"],\ - ["@npmcli/fs", "npm:3.1.1"],\ - ["fs-minipass", "npm:3.0.3"],\ - ["glob", "npm:10.4.5"],\ - ["lru-cache", "npm:10.4.3"],\ - ["minipass", "npm:7.1.2"],\ - ["minipass-collect", "npm:2.0.1"],\ - ["minipass-flush", "npm:1.0.5"],\ - ["minipass-pipeline", "npm:1.2.4"],\ - ["p-map", "npm:4.0.0"],\ - ["ssri", "npm:10.0.6"],\ - ["tar", "npm:6.2.1"],\ - ["unique-filename", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["camelcase", [\ - ["npm:6.3.0", {\ - "packageLocation": "./.yarn/cache/camelcase-npm-6.3.0-e5e42a0d15-8c96818a90.zip/node_modules/camelcase/",\ - "packageDependencies": [\ - ["camelcase", "npm:6.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["chai", [\ - ["npm:4.5.0", {\ - "packageLocation": "./.yarn/cache/chai-npm-4.5.0-428447e206-70e5a8418a.zip/node_modules/chai/",\ - "packageDependencies": [\ - ["chai", "npm:4.5.0"],\ - ["assertion-error", "npm:1.1.0"],\ - ["check-error", "npm:1.0.3"],\ - ["deep-eql", "npm:4.1.4"],\ - ["get-func-name", "npm:2.0.2"],\ - ["loupe", "npm:2.3.7"],\ - ["pathval", "npm:1.1.1"],\ - ["type-detect", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["chalk", [\ - ["npm:4.1.2", {\ - "packageLocation": "./.yarn/cache/chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip/node_modules/chalk/",\ - "packageDependencies": [\ - ["chalk", "npm:4.1.2"],\ - ["ansi-styles", "npm:4.3.0"],\ - ["supports-color", "npm:7.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.3.0", {\ - "packageLocation": "./.yarn/cache/chalk-npm-5.3.0-d181999efb-623922e077.zip/node_modules/chalk/",\ - "packageDependencies": [\ - ["chalk", "npm:5.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["check-error", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/check-error-npm-1.0.3-137994eabc-e2131025cf.zip/node_modules/check-error/",\ - "packageDependencies": [\ - ["check-error", "npm:1.0.3"],\ - ["get-func-name", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["chokidar", [\ - ["npm:3.5.3", {\ - "packageLocation": "./.yarn/cache/chokidar-npm-3.5.3-c5f9b0a56a-b49fcde401.zip/node_modules/chokidar/",\ - "packageDependencies": [\ - ["chokidar", "npm:3.5.3"],\ - ["anymatch", "npm:3.1.3"],\ - ["braces", "npm:3.0.3"],\ - ["fsevents", "patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1"],\ - ["glob-parent", "npm:5.1.2"],\ - ["is-binary-path", "npm:2.1.0"],\ - ["is-glob", "npm:4.0.3"],\ - ["normalize-path", "npm:3.0.0"],\ - ["readdirp", "npm:3.6.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["chownr", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/chownr-npm-2.0.0-638f1c9c61-c57cf9dd07.zip/node_modules/chownr/",\ - "packageDependencies": [\ - ["chownr", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["clean-stack", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/clean-stack-npm-2.2.0-a8ce435a5c-2ac8cd2b2f.zip/node_modules/clean-stack/",\ - "packageDependencies": [\ - ["clean-stack", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cliui", [\ - ["npm:7.0.4", {\ - "packageLocation": "./.yarn/cache/cliui-npm-7.0.4-d6b8a9edb6-ce2e8f578a.zip/node_modules/cliui/",\ - "packageDependencies": [\ - ["cliui", "npm:7.0.4"],\ - ["string-width", "npm:4.2.3"],\ - ["strip-ansi", "npm:6.0.1"],\ - ["wrap-ansi", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["color-convert", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip/node_modules/color-convert/",\ - "packageDependencies": [\ - ["color-convert", "npm:2.0.1"],\ - ["color-name", "npm:1.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["color-name", [\ - ["npm:1.1.4", {\ - "packageLocation": "./.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip/node_modules/color-name/",\ - "packageDependencies": [\ - ["color-name", "npm:1.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["commander", [\ - ["npm:12.1.0", {\ - "packageLocation": "./.yarn/cache/commander-npm-12.1.0-65c868e907-68e9818b00.zip/node_modules/commander/",\ - "packageDependencies": [\ - ["commander", "npm:12.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.20.3", {\ - "packageLocation": "./.yarn/cache/commander-npm-2.20.3-d8dcbaa39b-ab8c07884e.zip/node_modules/commander/",\ - "packageDependencies": [\ - ["commander", "npm:2.20.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["concat-map", [\ - ["npm:0.0.1", {\ - "packageLocation": "./.yarn/cache/concat-map-npm-0.0.1-85a921b7ee-902a9f5d89.zip/node_modules/concat-map/",\ - "packageDependencies": [\ - ["concat-map", "npm:0.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cross-fetch", [\ - ["npm:3.1.8", {\ - "packageLocation": "./.yarn/cache/cross-fetch-npm-3.1.8-71c3c05709-78f993fa09.zip/node_modules/cross-fetch/",\ - "packageDependencies": [\ - ["cross-fetch", "npm:3.1.8"],\ - ["node-fetch", "virtual:8970ebf2951b774bae22c19f886b18bd69eadd91cfae0adaae1cc534c141455e70a4695fdc1ca30ba2b550374110aabc3fa5bec15cda285b125c397b8a51f498#npm:2.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cross-spawn", [\ - ["npm:7.0.3", {\ - "packageLocation": "./.yarn/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-671cc7c728.zip/node_modules/cross-spawn/",\ - "packageDependencies": [\ - ["cross-spawn", "npm:7.0.3"],\ - ["path-key", "npm:3.1.1"],\ - ["shebang-command", "npm:2.0.0"],\ - ["which", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["crypto-hash", [\ - ["npm:1.3.0", {\ - "packageLocation": "./.yarn/cache/crypto-hash-npm-1.3.0-8ec42184ed-a3a507e0d2.zip/node_modules/crypto-hash/",\ - "packageDependencies": [\ - ["crypto-hash", "npm:1.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["debug", [\ - ["npm:4.3.3", {\ - "packageLocation": "./.yarn/cache/debug-npm-4.3.3-710fd4cc7f-14472d56fe.zip/node_modules/debug/",\ - "packageDependencies": [\ - ["debug", "npm:4.3.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:4.3.6", {\ - "packageLocation": "./.yarn/cache/debug-npm-4.3.6-ecb233d831-1630b748de.zip/node_modules/debug/",\ - "packageDependencies": [\ - ["debug", "npm:4.3.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6", {\ - "packageLocation": "./.yarn/__virtual__/debug-virtual-5ebbdf5dd4/0/cache/debug-npm-4.3.6-ecb233d831-1630b748de.zip/node_modules/debug/",\ - "packageDependencies": [\ - ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"],\ - ["@types/supports-color", null],\ - ["ms", "npm:2.1.2"],\ - ["supports-color", null]\ - ],\ - "packagePeers": [\ - "@types/supports-color",\ - "supports-color"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:f7735febb87b1fbb8215178a6f0b0bc1e3e251c18455c0481843aea1b7aa4c7d6fbdbd3eeee04078e2e2e368e4d4b513dd87411eb2f12aa6ea556f640295bc68#npm:4.3.3", {\ - "packageLocation": "./.yarn/__virtual__/debug-virtual-0dd0b2b0b9/0/cache/debug-npm-4.3.3-710fd4cc7f-14472d56fe.zip/node_modules/debug/",\ - "packageDependencies": [\ - ["debug", "virtual:f7735febb87b1fbb8215178a6f0b0bc1e3e251c18455c0481843aea1b7aa4c7d6fbdbd3eeee04078e2e2e368e4d4b513dd87411eb2f12aa6ea556f640295bc68#npm:4.3.3"],\ - ["@types/supports-color", null],\ - ["ms", "npm:2.1.2"],\ - ["supports-color", "npm:8.1.1"]\ - ],\ - "packagePeers": [\ - "@types/supports-color",\ - "supports-color"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["decamelize", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/decamelize-npm-4.0.0-12410e3409-b7d09b8265.zip/node_modules/decamelize/",\ - "packageDependencies": [\ - ["decamelize", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["deep-eql", [\ - ["npm:4.1.4", {\ - "packageLocation": "./.yarn/cache/deep-eql-npm-4.1.4-bc4d39c2ca-01c3ca78ff.zip/node_modules/deep-eql/",\ - "packageDependencies": [\ - ["deep-eql", "npm:4.1.4"],\ - ["type-detect", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["delay", [\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/delay-npm-5.0.0-1d1c758b46-62f151151e.zip/node_modules/delay/",\ - "packageDependencies": [\ - ["delay", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["diff", [\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/diff-npm-5.0.0-ad6900db18-f19fe29284.zip/node_modules/diff/",\ - "packageDependencies": [\ - ["diff", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dot-case", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/dot-case-npm-3.0.4-09675b5521-a65e351941.zip/node_modules/dot-case/",\ - "packageDependencies": [\ - ["dot-case", "npm:3.0.4"],\ - ["no-case", "npm:3.0.4"],\ - ["tslib", "npm:2.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eastasianwidth", [\ - ["npm:0.2.0", {\ - "packageLocation": "./.yarn/cache/eastasianwidth-npm-0.2.0-c37eb16bd1-7d00d7cd8e.zip/node_modules/eastasianwidth/",\ - "packageDependencies": [\ - ["eastasianwidth", "npm:0.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["emoji-regex", [\ - ["npm:8.0.0", {\ - "packageLocation": "./.yarn/cache/emoji-regex-npm-8.0.0-213764015c-d4c5c39d5a.zip/node_modules/emoji-regex/",\ - "packageDependencies": [\ - ["emoji-regex", "npm:8.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:9.2.2", {\ - "packageLocation": "./.yarn/cache/emoji-regex-npm-9.2.2-e6fac8d058-8487182da7.zip/node_modules/emoji-regex/",\ - "packageDependencies": [\ - ["emoji-regex", "npm:9.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["encoding", [\ - ["npm:0.1.13", {\ - "packageLocation": "./.yarn/cache/encoding-npm-0.1.13-82a1837d30-bb98632f8f.zip/node_modules/encoding/",\ - "packageDependencies": [\ - ["encoding", "npm:0.1.13"],\ - ["iconv-lite", "npm:0.6.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["env-paths", [\ - ["npm:2.2.1", {\ - "packageLocation": "./.yarn/cache/env-paths-npm-2.2.1-7c7577428c-65b5df55a8.zip/node_modules/env-paths/",\ - "packageDependencies": [\ - ["env-paths", "npm:2.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["err-code", [\ - ["npm:2.0.3", {\ - "packageLocation": "./.yarn/cache/err-code-npm-2.0.3-082e0ff9a7-8b7b1be20d.zip/node_modules/err-code/",\ - "packageDependencies": [\ - ["err-code", "npm:2.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["es6-promise", [\ - ["npm:4.2.8", {\ - "packageLocation": "./.yarn/cache/es6-promise-npm-4.2.8-c9f5b11f66-95614a8887.zip/node_modules/es6-promise/",\ - "packageDependencies": [\ - ["es6-promise", "npm:4.2.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["es6-promisify", [\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/es6-promisify-npm-5.0.0-3726550934-fbed9d7915.zip/node_modules/es6-promisify/",\ - "packageDependencies": [\ - ["es6-promisify", "npm:5.0.0"],\ - ["es6-promise", "npm:4.2.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["escalade", [\ - ["npm:3.2.0", {\ - "packageLocation": "./.yarn/cache/escalade-npm-3.2.0-19b50dd48f-47b029c83d.zip/node_modules/escalade/",\ - "packageDependencies": [\ - ["escalade", "npm:3.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["escape-string-regexp", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/escape-string-regexp-npm-4.0.0-4b531d8d59-98b48897d9.zip/node_modules/escape-string-regexp/",\ - "packageDependencies": [\ - ["escape-string-regexp", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eventemitter3", [\ - ["npm:4.0.7", {\ - "packageLocation": "./.yarn/cache/eventemitter3-npm-4.0.7-7afcdd74ae-1875311c42.zip/node_modules/eventemitter3/",\ - "packageDependencies": [\ - ["eventemitter3", "npm:4.0.7"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.1", {\ - "packageLocation": "./.yarn/cache/eventemitter3-npm-5.0.1-5e423b7df3-543d6c858a.zip/node_modules/eventemitter3/",\ - "packageDependencies": [\ - ["eventemitter3", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["exponential-backoff", [\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/exponential-backoff-npm-3.1.1-04df458b30-3d21519a4f.zip/node_modules/exponential-backoff/",\ - "packageDependencies": [\ - ["exponential-backoff", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eyes", [\ - ["npm:0.1.8", {\ - "packageLocation": "./.yarn/cache/eyes-npm-0.1.8-4f28ed333f-c31703a92b.zip/node_modules/eyes/",\ - "packageDependencies": [\ - ["eyes", "npm:0.1.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fast-stable-stringify", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/fast-stable-stringify-npm-1.0.0-040fa045a5-ef1203d246.zip/node_modules/fast-stable-stringify/",\ - "packageDependencies": [\ - ["fast-stable-stringify", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["file-uri-to-path", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/file-uri-to-path-npm-1.0.0-1043ac6206-b648580bdd.zip/node_modules/file-uri-to-path/",\ - "packageDependencies": [\ - ["file-uri-to-path", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fill-range", [\ - ["npm:7.1.1", {\ - "packageLocation": "./.yarn/cache/fill-range-npm-7.1.1-bf491486db-b4abfbca38.zip/node_modules/fill-range/",\ - "packageDependencies": [\ - ["fill-range", "npm:7.1.1"],\ - ["to-regex-range", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["find-up", [\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/find-up-npm-5.0.0-e03e9b796d-07955e3573.zip/node_modules/find-up/",\ - "packageDependencies": [\ - ["find-up", "npm:5.0.0"],\ - ["locate-path", "npm:6.0.0"],\ - ["path-exists", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["flat", [\ - ["npm:5.0.2", {\ - "packageLocation": "./.yarn/cache/flat-npm-5.0.2-12748102a5-12a1536ac7.zip/node_modules/flat/",\ - "packageDependencies": [\ - ["flat", "npm:5.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["foreground-child", [\ - ["npm:3.3.0", {\ - "packageLocation": "./.yarn/cache/foreground-child-npm-3.3.0-b8be745271-1989698488.zip/node_modules/foreground-child/",\ - "packageDependencies": [\ - ["foreground-child", "npm:3.3.0"],\ - ["cross-spawn", "npm:7.0.3"],\ - ["signal-exit", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fs-minipass", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip/node_modules/fs-minipass/",\ - "packageDependencies": [\ - ["fs-minipass", "npm:2.1.0"],\ - ["minipass", "npm:3.3.6"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.3", {\ - "packageLocation": "./.yarn/cache/fs-minipass-npm-3.0.3-d148d6ac19-8722a41109.zip/node_modules/fs-minipass/",\ - "packageDependencies": [\ - ["fs-minipass", "npm:3.0.3"],\ - ["minipass", "npm:7.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fs.realpath", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip/node_modules/fs.realpath/",\ - "packageDependencies": [\ - ["fs.realpath", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fsevents", [\ - ["patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1", {\ - "packageLocation": "./.yarn/unplugged/fsevents-patch-21ad2b1333/node_modules/fsevents/",\ - "packageDependencies": [\ - ["fsevents", "patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1"],\ - ["node-gyp", "npm:10.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["get-caller-file", [\ - ["npm:2.0.5", {\ - "packageLocation": "./.yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-b9769a836d.zip/node_modules/get-caller-file/",\ - "packageDependencies": [\ - ["get-caller-file", "npm:2.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["get-func-name", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/get-func-name-npm-2.0.2-409dbe3703-3f62f4c236.zip/node_modules/get-func-name/",\ - "packageDependencies": [\ - ["get-func-name", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["glob", [\ - ["npm:10.4.5", {\ - "packageLocation": "./.yarn/cache/glob-npm-10.4.5-8c63175f05-0bc725de5e.zip/node_modules/glob/",\ - "packageDependencies": [\ - ["glob", "npm:10.4.5"],\ - ["foreground-child", "npm:3.3.0"],\ - ["jackspeak", "npm:3.4.3"],\ - ["minimatch", "npm:9.0.5"],\ - ["minipass", "npm:7.1.2"],\ - ["package-json-from-dist", "npm:1.0.0"],\ - ["path-scurry", "npm:1.11.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.2.0", {\ - "packageLocation": "./.yarn/cache/glob-npm-7.2.0-bb4644d239-78a8ea9423.zip/node_modules/glob/",\ - "packageDependencies": [\ - ["glob", "npm:7.2.0"],\ - ["fs.realpath", "npm:1.0.0"],\ - ["inflight", "npm:1.0.6"],\ - ["inherits", "npm:2.0.4"],\ - ["minimatch", "npm:3.1.2"],\ - ["once", "npm:1.4.0"],\ - ["path-is-absolute", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["glob-parent", [\ - ["npm:5.1.2", {\ - "packageLocation": "./.yarn/cache/glob-parent-npm-5.1.2-021ab32634-f4f2bfe242.zip/node_modules/glob-parent/",\ - "packageDependencies": [\ - ["glob-parent", "npm:5.1.2"],\ - ["is-glob", "npm:4.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["graceful-fs", [\ - ["npm:4.2.11", {\ - "packageLocation": "./.yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-ac85f94da9.zip/node_modules/graceful-fs/",\ - "packageDependencies": [\ - ["graceful-fs", "npm:4.2.11"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["growl", [\ - ["npm:1.10.5", {\ - "packageLocation": "./.yarn/cache/growl-npm-1.10.5-2d1da54198-4b86685de6.zip/node_modules/growl/",\ - "packageDependencies": [\ - ["growl", "npm:1.10.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["has-flag", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip/node_modules/has-flag/",\ - "packageDependencies": [\ - ["has-flag", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["he", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/he-npm-1.2.0-3b73a2ff07-3d4d6babcc.zip/node_modules/he/",\ - "packageDependencies": [\ - ["he", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["http-cache-semantics", [\ - ["npm:4.1.1", {\ - "packageLocation": "./.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-83ac0bc60b.zip/node_modules/http-cache-semantics/",\ - "packageDependencies": [\ - ["http-cache-semantics", "npm:4.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["http-proxy-agent", [\ - ["npm:7.0.2", {\ - "packageLocation": "./.yarn/cache/http-proxy-agent-npm-7.0.2-643ed7cc33-670858c8f8.zip/node_modules/http-proxy-agent/",\ - "packageDependencies": [\ - ["http-proxy-agent", "npm:7.0.2"],\ - ["agent-base", "npm:7.1.1"],\ - ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["https-proxy-agent", [\ - ["npm:7.0.5", {\ - "packageLocation": "./.yarn/cache/https-proxy-agent-npm-7.0.5-94c14d4619-2e1a28960f.zip/node_modules/https-proxy-agent/",\ - "packageDependencies": [\ - ["https-proxy-agent", "npm:7.0.5"],\ - ["agent-base", "npm:7.1.1"],\ - ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["humanize-ms", [\ - ["npm:1.2.1", {\ - "packageLocation": "./.yarn/cache/humanize-ms-npm-1.2.1-e942bd7329-9c7a74a282.zip/node_modules/humanize-ms/",\ - "packageDependencies": [\ - ["humanize-ms", "npm:1.2.1"],\ - ["ms", "npm:2.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["iconv-lite", [\ - ["npm:0.6.3", {\ - "packageLocation": "./.yarn/cache/iconv-lite-npm-0.6.3-24b8aae27e-3f60d47a5c.zip/node_modules/iconv-lite/",\ - "packageDependencies": [\ - ["iconv-lite", "npm:0.6.3"],\ - ["safer-buffer", "npm:2.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ieee754", [\ - ["npm:1.2.1", {\ - "packageLocation": "./.yarn/cache/ieee754-npm-1.2.1-fb63b3caeb-5144c0c981.zip/node_modules/ieee754/",\ - "packageDependencies": [\ - ["ieee754", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["imurmurhash", [\ - ["npm:0.1.4", {\ - "packageLocation": "./.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-7cae75c8cd.zip/node_modules/imurmurhash/",\ - "packageDependencies": [\ - ["imurmurhash", "npm:0.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["indent-string", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/indent-string-npm-4.0.0-7b717435b2-824cfb9929.zip/node_modules/indent-string/",\ - "packageDependencies": [\ - ["indent-string", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["inflight", [\ - ["npm:1.0.6", {\ - "packageLocation": "./.yarn/cache/inflight-npm-1.0.6-ccedb4b908-f4f76aa072.zip/node_modules/inflight/",\ - "packageDependencies": [\ - ["inflight", "npm:1.0.6"],\ - ["once", "npm:1.4.0"],\ - ["wrappy", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["inherits", [\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip/node_modules/inherits/",\ - "packageDependencies": [\ - ["inherits", "npm:2.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ip-address", [\ - ["npm:9.0.5", {\ - "packageLocation": "./.yarn/cache/ip-address-npm-9.0.5-9fa024d42a-aa15f12cfd.zip/node_modules/ip-address/",\ - "packageDependencies": [\ - ["ip-address", "npm:9.0.5"],\ - ["jsbn", "npm:1.1.0"],\ - ["sprintf-js", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-binary-path", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/is-binary-path-npm-2.1.0-e61d46f557-84192eb88c.zip/node_modules/is-binary-path/",\ - "packageDependencies": [\ - ["is-binary-path", "npm:2.1.0"],\ - ["binary-extensions", "npm:2.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-extglob", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip/node_modules/is-extglob/",\ - "packageDependencies": [\ - ["is-extglob", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-fullwidth-code-point", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip/node_modules/is-fullwidth-code-point/",\ - "packageDependencies": [\ - ["is-fullwidth-code-point", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-glob", [\ - ["npm:4.0.3", {\ - "packageLocation": "./.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-d381c1319f.zip/node_modules/is-glob/",\ - "packageDependencies": [\ - ["is-glob", "npm:4.0.3"],\ - ["is-extglob", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-lambda", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/is-lambda-npm-1.0.1-7ab55bc8a8-93a32f0194.zip/node_modules/is-lambda/",\ - "packageDependencies": [\ - ["is-lambda", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-number", [\ - ["npm:7.0.0", {\ - "packageLocation": "./.yarn/cache/is-number-npm-7.0.0-060086935c-456ac6f8e0.zip/node_modules/is-number/",\ - "packageDependencies": [\ - ["is-number", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-plain-obj", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/is-plain-obj-npm-2.1.0-8dffd7ae9c-cec9100678.zip/node_modules/is-plain-obj/",\ - "packageDependencies": [\ - ["is-plain-obj", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-unicode-supported", [\ - ["npm:0.1.0", {\ - "packageLocation": "./.yarn/cache/is-unicode-supported-npm-0.1.0-0833e1bbfb-a2aab86ee7.zip/node_modules/is-unicode-supported/",\ - "packageDependencies": [\ - ["is-unicode-supported", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["isexe", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip/node_modules/isexe/",\ - "packageDependencies": [\ - ["isexe", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/isexe-npm-3.1.1-9c0061eead-7fe1931ee4.zip/node_modules/isexe/",\ - "packageDependencies": [\ - ["isexe", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["isomorphic-ws", [\ - ["npm:4.0.1", {\ - "packageLocation": "./.yarn/cache/isomorphic-ws-npm-4.0.1-aa39192848-d7190eadef.zip/node_modules/isomorphic-ws/",\ - "packageDependencies": [\ - ["isomorphic-ws", "npm:4.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:4.0.1", {\ - "packageLocation": "./.yarn/__virtual__/isomorphic-ws-virtual-d15e13c579/0/cache/isomorphic-ws-npm-4.0.1-aa39192848-d7190eadef.zip/node_modules/isomorphic-ws/",\ - "packageDependencies": [\ - ["isomorphic-ws", "virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:4.0.1"],\ - ["@types/ws", "npm:7.4.7"],\ - ["ws", "virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:7.5.10"]\ - ],\ - "packagePeers": [\ - "@types/ws",\ - "ws"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jackspeak", [\ - ["npm:3.4.3", {\ - "packageLocation": "./.yarn/cache/jackspeak-npm-3.4.3-546bfad080-be31027fc7.zip/node_modules/jackspeak/",\ - "packageDependencies": [\ - ["jackspeak", "npm:3.4.3"],\ - ["@isaacs/cliui", "npm:8.0.2"],\ - ["@pkgjs/parseargs", "npm:0.11.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jayson", [\ - ["npm:4.1.2", {\ - "packageLocation": "./.yarn/cache/jayson-npm-4.1.2-fce0868acb-10d6a0ce55.zip/node_modules/jayson/",\ - "packageDependencies": [\ - ["jayson", "npm:4.1.2"],\ - ["@types/connect", "npm:3.4.38"],\ - ["@types/node", "npm:12.20.55"],\ - ["@types/ws", "npm:7.4.7"],\ - ["JSONStream", "npm:1.3.5"],\ - ["commander", "npm:2.20.3"],\ - ["delay", "npm:5.0.0"],\ - ["es6-promisify", "npm:5.0.0"],\ - ["eyes", "npm:0.1.8"],\ - ["isomorphic-ws", "virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:4.0.1"],\ - ["json-stringify-safe", "npm:5.0.1"],\ - ["uuid", "npm:8.3.2"],\ - ["ws", "virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:7.5.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["js-yaml", [\ - ["npm:4.1.0", {\ - "packageLocation": "./.yarn/cache/js-yaml-npm-4.1.0-3606f32312-c7830dfd45.zip/node_modules/js-yaml/",\ - "packageDependencies": [\ - ["js-yaml", "npm:4.1.0"],\ - ["argparse", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jsbn", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/jsbn-npm-1.1.0-1da0181838-944f924f2b.zip/node_modules/jsbn/",\ - "packageDependencies": [\ - ["jsbn", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["json-stringify-safe", [\ - ["npm:5.0.1", {\ - "packageLocation": "./.yarn/cache/json-stringify-safe-npm-5.0.1-064ddd6ab4-48ec0adad5.zip/node_modules/json-stringify-safe/",\ - "packageDependencies": [\ - ["json-stringify-safe", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jsonparse", [\ - ["npm:1.3.1", {\ - "packageLocation": "./.yarn/cache/jsonparse-npm-1.3.1-b6fde74828-6514a7be46.zip/node_modules/jsonparse/",\ - "packageDependencies": [\ - ["jsonparse", "npm:1.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["locate-path", [\ - ["npm:6.0.0", {\ - "packageLocation": "./.yarn/cache/locate-path-npm-6.0.0-06a1e4c528-72eb661788.zip/node_modules/locate-path/",\ - "packageDependencies": [\ - ["locate-path", "npm:6.0.0"],\ - ["p-locate", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["log-symbols", [\ - ["npm:4.1.0", {\ - "packageLocation": "./.yarn/cache/log-symbols-npm-4.1.0-0a13492d8b-fce1497b31.zip/node_modules/log-symbols/",\ - "packageDependencies": [\ - ["log-symbols", "npm:4.1.0"],\ - ["chalk", "npm:4.1.2"],\ - ["is-unicode-supported", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["loupe", [\ - ["npm:2.3.7", {\ - "packageLocation": "./.yarn/cache/loupe-npm-2.3.7-f294c2ef33-96c058ec71.zip/node_modules/loupe/",\ - "packageDependencies": [\ - ["loupe", "npm:2.3.7"],\ - ["get-func-name", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lower-case", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/lower-case-npm-2.0.2-151055f1c2-83a0a5f159.zip/node_modules/lower-case/",\ - "packageDependencies": [\ - ["lower-case", "npm:2.0.2"],\ - ["tslib", "npm:2.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lru-cache", [\ - ["npm:10.4.3", {\ - "packageLocation": "./.yarn/cache/lru-cache-npm-10.4.3-30c10b861a-6476138d21.zip/node_modules/lru-cache/",\ - "packageDependencies": [\ - ["lru-cache", "npm:10.4.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["make-fetch-happen", [\ - ["npm:13.0.1", {\ - "packageLocation": "./.yarn/cache/make-fetch-happen-npm-13.0.1-4180f2aaa8-5c9fad6955.zip/node_modules/make-fetch-happen/",\ - "packageDependencies": [\ - ["make-fetch-happen", "npm:13.0.1"],\ - ["@npmcli/agent", "npm:2.2.2"],\ - ["cacache", "npm:18.0.4"],\ - ["http-cache-semantics", "npm:4.1.1"],\ - ["is-lambda", "npm:1.0.1"],\ - ["minipass", "npm:7.1.2"],\ - ["minipass-fetch", "npm:3.0.5"],\ - ["minipass-flush", "npm:1.0.5"],\ - ["minipass-pipeline", "npm:1.2.4"],\ - ["negotiator", "npm:0.6.3"],\ - ["proc-log", "npm:4.2.0"],\ - ["promise-retry", "npm:2.0.1"],\ - ["ssri", "npm:10.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minimatch", [\ - ["npm:3.1.2", {\ - "packageLocation": "./.yarn/cache/minimatch-npm-3.1.2-9405269906-c154e56640.zip/node_modules/minimatch/",\ - "packageDependencies": [\ - ["minimatch", "npm:3.1.2"],\ - ["brace-expansion", "npm:1.1.11"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.2.1", {\ - "packageLocation": "./.yarn/cache/minimatch-npm-4.2.1-558ec7f418-2b1514e3d0.zip/node_modules/minimatch/",\ - "packageDependencies": [\ - ["minimatch", "npm:4.2.1"],\ - ["brace-expansion", "npm:1.1.11"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:9.0.5", {\ - "packageLocation": "./.yarn/cache/minimatch-npm-9.0.5-9aa93d97fa-2c035575ed.zip/node_modules/minimatch/",\ - "packageDependencies": [\ - ["minimatch", "npm:9.0.5"],\ - ["brace-expansion", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minipass", [\ - ["npm:3.3.6", {\ - "packageLocation": "./.yarn/cache/minipass-npm-3.3.6-b8d93a945b-a30d083c80.zip/node_modules/minipass/",\ - "packageDependencies": [\ - ["minipass", "npm:3.3.6"],\ - ["yallist", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/minipass-npm-5.0.0-c64fb63c92-425dab2887.zip/node_modules/minipass/",\ - "packageDependencies": [\ - ["minipass", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.1.2", {\ - "packageLocation": "./.yarn/cache/minipass-npm-7.1.2-3a5327d36d-2bfd325b95.zip/node_modules/minipass/",\ - "packageDependencies": [\ - ["minipass", "npm:7.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minipass-collect", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/minipass-collect-npm-2.0.1-73d3907e40-b251bceea6.zip/node_modules/minipass-collect/",\ - "packageDependencies": [\ - ["minipass-collect", "npm:2.0.1"],\ - ["minipass", "npm:7.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minipass-fetch", [\ - ["npm:3.0.5", {\ - "packageLocation": "./.yarn/cache/minipass-fetch-npm-3.0.5-ed78529694-8047d27323.zip/node_modules/minipass-fetch/",\ - "packageDependencies": [\ - ["minipass-fetch", "npm:3.0.5"],\ - ["encoding", "npm:0.1.13"],\ - ["minipass", "npm:7.1.2"],\ - ["minipass-sized", "npm:1.0.3"],\ - ["minizlib", "npm:2.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minipass-flush", [\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/cache/minipass-flush-npm-1.0.5-efe79d9826-56269a0b22.zip/node_modules/minipass-flush/",\ - "packageDependencies": [\ - ["minipass-flush", "npm:1.0.5"],\ - ["minipass", "npm:3.3.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minipass-pipeline", [\ - ["npm:1.2.4", {\ - "packageLocation": "./.yarn/cache/minipass-pipeline-npm-1.2.4-5924cb077f-b14240dac0.zip/node_modules/minipass-pipeline/",\ - "packageDependencies": [\ - ["minipass-pipeline", "npm:1.2.4"],\ - ["minipass", "npm:3.3.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minipass-sized", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/minipass-sized-npm-1.0.3-306d86f432-79076749fc.zip/node_modules/minipass-sized/",\ - "packageDependencies": [\ - ["minipass-sized", "npm:1.0.3"],\ - ["minipass", "npm:3.3.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minizlib", [\ - ["npm:2.1.2", {\ - "packageLocation": "./.yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-f1fdeac0b0.zip/node_modules/minizlib/",\ - "packageDependencies": [\ - ["minizlib", "npm:2.1.2"],\ - ["minipass", "npm:3.3.6"],\ - ["yallist", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mkdirp", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/mkdirp-npm-1.0.4-37f6ef56b9-a96865108c.zip/node_modules/mkdirp/",\ - "packageDependencies": [\ - ["mkdirp", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mocha", [\ - ["npm:9.2.2", {\ - "packageLocation": "./.yarn/cache/mocha-npm-9.2.2-f7735febb8-4d5ca4ce33.zip/node_modules/mocha/",\ - "packageDependencies": [\ - ["mocha", "npm:9.2.2"],\ - ["@ungap/promise-all-settled", "npm:1.1.2"],\ - ["ansi-colors", "npm:4.1.1"],\ - ["browser-stdout", "npm:1.3.1"],\ - ["chokidar", "npm:3.5.3"],\ - ["debug", "virtual:f7735febb87b1fbb8215178a6f0b0bc1e3e251c18455c0481843aea1b7aa4c7d6fbdbd3eeee04078e2e2e368e4d4b513dd87411eb2f12aa6ea556f640295bc68#npm:4.3.3"],\ - ["diff", "npm:5.0.0"],\ - ["escape-string-regexp", "npm:4.0.0"],\ - ["find-up", "npm:5.0.0"],\ - ["glob", "npm:7.2.0"],\ - ["growl", "npm:1.10.5"],\ - ["he", "npm:1.2.0"],\ - ["js-yaml", "npm:4.1.0"],\ - ["log-symbols", "npm:4.1.0"],\ - ["minimatch", "npm:4.2.1"],\ - ["ms", "npm:2.1.3"],\ - ["nanoid", "npm:3.3.1"],\ - ["serialize-javascript", "npm:6.0.0"],\ - ["strip-json-comments", "npm:3.1.1"],\ - ["supports-color", "npm:8.1.1"],\ - ["which", "npm:2.0.2"],\ - ["workerpool", "npm:6.2.0"],\ - ["yargs", "npm:16.2.0"],\ - ["yargs-parser", "npm:20.2.4"],\ - ["yargs-unparser", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ms", [\ - ["npm:2.1.2", {\ - "packageLocation": "./.yarn/cache/ms-npm-2.1.2-ec0c1512ff-673cdb2c31.zip/node_modules/ms/",\ - "packageDependencies": [\ - ["ms", "npm:2.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.1.3", {\ - "packageLocation": "./.yarn/cache/ms-npm-2.1.3-81ff3cfac1-aa92de6080.zip/node_modules/ms/",\ - "packageDependencies": [\ - ["ms", "npm:2.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["nanoid", [\ - ["npm:3.3.1", {\ - "packageLocation": "./.yarn/cache/nanoid-npm-3.3.1-bdd760bee0-4ef0969e1b.zip/node_modules/nanoid/",\ - "packageDependencies": [\ - ["nanoid", "npm:3.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["negotiator", [\ - ["npm:0.6.3", {\ - "packageLocation": "./.yarn/cache/negotiator-npm-0.6.3-9d50e36171-b8ffeb1e26.zip/node_modules/negotiator/",\ - "packageDependencies": [\ - ["negotiator", "npm:0.6.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["no-case", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/no-case-npm-3.0.4-12884c3d98-0b2ebc113d.zip/node_modules/no-case/",\ - "packageDependencies": [\ - ["no-case", "npm:3.0.4"],\ - ["lower-case", "npm:2.0.2"],\ - ["tslib", "npm:2.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["node-fetch", [\ - ["npm:2.7.0", {\ - "packageLocation": "./.yarn/cache/node-fetch-npm-2.7.0-587d57004e-d76d2f5edb.zip/node_modules/node-fetch/",\ - "packageDependencies": [\ - ["node-fetch", "npm:2.7.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:8970ebf2951b774bae22c19f886b18bd69eadd91cfae0adaae1cc534c141455e70a4695fdc1ca30ba2b550374110aabc3fa5bec15cda285b125c397b8a51f498#npm:2.7.0", {\ - "packageLocation": "./.yarn/__virtual__/node-fetch-virtual-784a3aeb8d/0/cache/node-fetch-npm-2.7.0-587d57004e-d76d2f5edb.zip/node_modules/node-fetch/",\ - "packageDependencies": [\ - ["node-fetch", "virtual:8970ebf2951b774bae22c19f886b18bd69eadd91cfae0adaae1cc534c141455e70a4695fdc1ca30ba2b550374110aabc3fa5bec15cda285b125c397b8a51f498#npm:2.7.0"],\ - ["@types/encoding", null],\ - ["encoding", null],\ - ["whatwg-url", "npm:5.0.0"]\ - ],\ - "packagePeers": [\ - "@types/encoding",\ - "encoding"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["node-gyp", [\ - ["npm:10.2.0", {\ - "packageLocation": "./.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/",\ - "packageDependencies": [\ - ["node-gyp", "npm:10.2.0"],\ - ["env-paths", "npm:2.2.1"],\ - ["exponential-backoff", "npm:3.1.1"],\ - ["glob", "npm:10.4.5"],\ - ["graceful-fs", "npm:4.2.11"],\ - ["make-fetch-happen", "npm:13.0.1"],\ - ["nopt", "npm:7.2.1"],\ - ["proc-log", "npm:4.2.0"],\ - ["semver", "npm:7.6.3"],\ - ["tar", "npm:6.2.1"],\ - ["which", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["node-gyp-build", [\ - ["npm:4.8.2", {\ - "packageLocation": "./.yarn/cache/node-gyp-build-npm-4.8.2-892437a2f1-1a57bba8c4.zip/node_modules/node-gyp-build/",\ - "packageDependencies": [\ - ["node-gyp-build", "npm:4.8.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["nopt", [\ - ["npm:7.2.1", {\ - "packageLocation": "./.yarn/cache/nopt-npm-7.2.1-635b7da949-6fa729cc77.zip/node_modules/nopt/",\ - "packageDependencies": [\ - ["nopt", "npm:7.2.1"],\ - ["abbrev", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["normalize-path", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip/node_modules/normalize-path/",\ - "packageDependencies": [\ - ["normalize-path", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["once", [\ - ["npm:1.4.0", {\ - "packageLocation": "./.yarn/cache/once-npm-1.4.0-ccf03ef07a-cd0a885013.zip/node_modules/once/",\ - "packageDependencies": [\ - ["once", "npm:1.4.0"],\ - ["wrappy", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["p-limit", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/p-limit-npm-3.1.0-05d2ede37f-7c3690c4db.zip/node_modules/p-limit/",\ - "packageDependencies": [\ - ["p-limit", "npm:3.1.0"],\ - ["yocto-queue", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["p-locate", [\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/p-locate-npm-5.0.0-92cc7c7a3e-1623088f36.zip/node_modules/p-locate/",\ - "packageDependencies": [\ - ["p-locate", "npm:5.0.0"],\ - ["p-limit", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["p-map", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/p-map-npm-4.0.0-4677ae07c7-cb0ab21ec0.zip/node_modules/p-map/",\ - "packageDependencies": [\ - ["p-map", "npm:4.0.0"],\ - ["aggregate-error", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["package-json-from-dist", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/package-json-from-dist-npm-1.0.0-961f0fcb3b-ac706ec856.zip/node_modules/package-json-from-dist/",\ - "packageDependencies": [\ - ["package-json-from-dist", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pako", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/pako-npm-2.1.0-78df11948c-7166654864.zip/node_modules/pako/",\ - "packageDependencies": [\ - ["pako", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-exists", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip/node_modules/path-exists/",\ - "packageDependencies": [\ - ["path-exists", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-is-absolute", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip/node_modules/path-is-absolute/",\ - "packageDependencies": [\ - ["path-is-absolute", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-key", [\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/path-key-npm-3.1.1-0e66ea8321-55cd7a9dd4.zip/node_modules/path-key/",\ - "packageDependencies": [\ - ["path-key", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-scurry", [\ - ["npm:1.11.1", {\ - "packageLocation": "./.yarn/cache/path-scurry-npm-1.11.1-aaf8c339af-890d5abcd5.zip/node_modules/path-scurry/",\ - "packageDependencies": [\ - ["path-scurry", "npm:1.11.1"],\ - ["lru-cache", "npm:10.4.3"],\ - ["minipass", "npm:7.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pathval", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/pathval-npm-1.1.1-ce0311d7e0-090e314771.zip/node_modules/pathval/",\ - "packageDependencies": [\ - ["pathval", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["picomatch", [\ - ["npm:2.3.1", {\ - "packageLocation": "./.yarn/cache/picomatch-npm-2.3.1-c782cfd986-050c865ce8.zip/node_modules/picomatch/",\ - "packageDependencies": [\ - ["picomatch", "npm:2.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["prettier", [\ - ["npm:2.8.8", {\ - "packageLocation": "./.yarn/cache/prettier-npm-2.8.8-430828a36c-b49e409431.zip/node_modules/prettier/",\ - "packageDependencies": [\ - ["prettier", "npm:2.8.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["proc-log", [\ - ["npm:4.2.0", {\ - "packageLocation": "./.yarn/cache/proc-log-npm-4.2.0-4d65296a9d-98f6cd012d.zip/node_modules/proc-log/",\ - "packageDependencies": [\ - ["proc-log", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["promise-retry", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/promise-retry-npm-2.0.1-871f0b01b7-f96a3f6d90.zip/node_modules/promise-retry/",\ - "packageDependencies": [\ - ["promise-retry", "npm:2.0.1"],\ - ["err-code", "npm:2.0.3"],\ - ["retry", "npm:0.12.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["randombytes", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/randombytes-npm-2.1.0-e3da76bccf-d779499376.zip/node_modules/randombytes/",\ - "packageDependencies": [\ - ["randombytes", "npm:2.1.0"],\ - ["safe-buffer", "npm:5.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["readdirp", [\ - ["npm:3.6.0", {\ - "packageLocation": "./.yarn/cache/readdirp-npm-3.6.0-f950cc74ab-1ced032e6e.zip/node_modules/readdirp/",\ - "packageDependencies": [\ - ["readdirp", "npm:3.6.0"],\ - ["picomatch", "npm:2.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["regenerator-runtime", [\ - ["npm:0.14.1", {\ - "packageLocation": "./.yarn/cache/regenerator-runtime-npm-0.14.1-a6c97c609a-9f57c93277.zip/node_modules/regenerator-runtime/",\ - "packageDependencies": [\ - ["regenerator-runtime", "npm:0.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["require-directory", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/require-directory-npm-2.1.1-8608aee50b-fb47e70bf0.zip/node_modules/require-directory/",\ - "packageDependencies": [\ - ["require-directory", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["retry", [\ - ["npm:0.12.0", {\ - "packageLocation": "./.yarn/cache/retry-npm-0.12.0-72ac7fb4cc-623bd7d2e5.zip/node_modules/retry/",\ - "packageDependencies": [\ - ["retry", "npm:0.12.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["root-workspace-0b6124", [\ - ["workspace:.", {\ - "packageLocation": "./",\ - "packageDependencies": [\ - ["root-workspace-0b6124", "workspace:."],\ - ["@coral-xyz/anchor", "npm:0.30.1"],\ - ["@solana/spl-token", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:0.4.8"],\ - ["@solana/web3.js", "npm:1.95.3"],\ - ["@types/bn.js", "npm:5.1.5"],\ - ["@types/chai", "npm:4.3.19"],\ - ["@types/mocha", "npm:9.1.1"],\ - ["chai", "npm:4.5.0"],\ - ["mocha", "npm:9.2.2"],\ - ["prettier", "npm:2.8.8"],\ - ["typescript", "patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587"]\ - ],\ - "linkType": "SOFT"\ - }]\ - ]],\ - ["rpc-websockets", [\ - ["npm:9.0.2", {\ - "packageLocation": "./.yarn/cache/rpc-websockets-npm-9.0.2-dc49a5f774-c93cd2e5b3.zip/node_modules/rpc-websockets/",\ - "packageDependencies": [\ - ["rpc-websockets", "npm:9.0.2"],\ - ["@swc/helpers", "npm:0.5.13"],\ - ["@types/uuid", "npm:8.3.4"],\ - ["@types/ws", "npm:8.5.12"],\ - ["buffer", "npm:6.0.3"],\ - ["bufferutil", "npm:4.0.8"],\ - ["eventemitter3", "npm:5.0.1"],\ - ["utf-8-validate", "npm:5.0.10"],\ - ["uuid", "npm:8.3.2"],\ - ["ws", "virtual:dc49a5f774a6dfdc204dee2056dda8ad1e9e8b7e69ea88feeed0433a26ade57eb298157610f1c578e678a9dc677a55fdf8bb80cecdb2646496ba448cda26b126#npm:8.18.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["safe-buffer", [\ - ["npm:5.2.1", {\ - "packageLocation": "./.yarn/cache/safe-buffer-npm-5.2.1-3481c8aa9b-b99c4b41fd.zip/node_modules/safe-buffer/",\ - "packageDependencies": [\ - ["safe-buffer", "npm:5.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["safer-buffer", [\ - ["npm:2.1.2", {\ - "packageLocation": "./.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-cab8f25ae6.zip/node_modules/safer-buffer/",\ - "packageDependencies": [\ - ["safer-buffer", "npm:2.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["semver", [\ - ["npm:7.6.3", {\ - "packageLocation": "./.yarn/cache/semver-npm-7.6.3-57e82c14d5-4110ec5d01.zip/node_modules/semver/",\ - "packageDependencies": [\ - ["semver", "npm:7.6.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["serialize-javascript", [\ - ["npm:6.0.0", {\ - "packageLocation": "./.yarn/cache/serialize-javascript-npm-6.0.0-0bb8a3c88d-56f90b562a.zip/node_modules/serialize-javascript/",\ - "packageDependencies": [\ - ["serialize-javascript", "npm:6.0.0"],\ - ["randombytes", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["shebang-command", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/shebang-command-npm-2.0.0-eb2b01921d-6b52fe8727.zip/node_modules/shebang-command/",\ - "packageDependencies": [\ - ["shebang-command", "npm:2.0.0"],\ - ["shebang-regex", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["shebang-regex", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/shebang-regex-npm-3.0.0-899a0cd65e-1a2bcae50d.zip/node_modules/shebang-regex/",\ - "packageDependencies": [\ - ["shebang-regex", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["signal-exit", [\ - ["npm:4.1.0", {\ - "packageLocation": "./.yarn/cache/signal-exit-npm-4.1.0-61fb957687-64c757b498.zip/node_modules/signal-exit/",\ - "packageDependencies": [\ - ["signal-exit", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["smart-buffer", [\ - ["npm:4.2.0", {\ - "packageLocation": "./.yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-b5167a7142.zip/node_modules/smart-buffer/",\ - "packageDependencies": [\ - ["smart-buffer", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["snake-case", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/snake-case-npm-3.0.4-67f447c30d-0a7a79900b.zip/node_modules/snake-case/",\ - "packageDependencies": [\ - ["snake-case", "npm:3.0.4"],\ - ["dot-case", "npm:3.0.4"],\ - ["tslib", "npm:2.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["socks", [\ - ["npm:2.8.3", {\ - "packageLocation": "./.yarn/cache/socks-npm-2.8.3-3532b59899-7a6b7f6eed.zip/node_modules/socks/",\ - "packageDependencies": [\ - ["socks", "npm:2.8.3"],\ - ["ip-address", "npm:9.0.5"],\ - ["smart-buffer", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["socks-proxy-agent", [\ - ["npm:8.0.4", {\ - "packageLocation": "./.yarn/cache/socks-proxy-agent-npm-8.0.4-991722041a-b2ec5051d8.zip/node_modules/socks-proxy-agent/",\ - "packageDependencies": [\ - ["socks-proxy-agent", "npm:8.0.4"],\ - ["agent-base", "npm:7.1.1"],\ - ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"],\ - ["socks", "npm:2.8.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["sprintf-js", [\ - ["npm:1.1.3", {\ - "packageLocation": "./.yarn/cache/sprintf-js-npm-1.1.3-b99efd75b2-a3fdac7b49.zip/node_modules/sprintf-js/",\ - "packageDependencies": [\ - ["sprintf-js", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ssri", [\ - ["npm:10.0.6", {\ - "packageLocation": "./.yarn/cache/ssri-npm-10.0.6-6b8eaec5ce-4603d53a05.zip/node_modules/ssri/",\ - "packageDependencies": [\ - ["ssri", "npm:10.0.6"],\ - ["minipass", "npm:7.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["string-width", [\ - ["npm:4.2.3", {\ - "packageLocation": "./.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip/node_modules/string-width/",\ - "packageDependencies": [\ - ["string-width", "npm:4.2.3"],\ - ["emoji-regex", "npm:8.0.0"],\ - ["is-fullwidth-code-point", "npm:3.0.0"],\ - ["strip-ansi", "npm:6.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.1.2", {\ - "packageLocation": "./.yarn/cache/string-width-npm-5.1.2-bf60531341-7369deaa29.zip/node_modules/string-width/",\ - "packageDependencies": [\ - ["string-width", "npm:5.1.2"],\ - ["eastasianwidth", "npm:0.2.0"],\ - ["emoji-regex", "npm:9.2.2"],\ - ["strip-ansi", "npm:7.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["strip-ansi", [\ - ["npm:6.0.1", {\ - "packageLocation": "./.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-f3cd25890a.zip/node_modules/strip-ansi/",\ - "packageDependencies": [\ - ["strip-ansi", "npm:6.0.1"],\ - ["ansi-regex", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.1.0", {\ - "packageLocation": "./.yarn/cache/strip-ansi-npm-7.1.0-7453b80b79-859c73fcf2.zip/node_modules/strip-ansi/",\ - "packageDependencies": [\ - ["strip-ansi", "npm:7.1.0"],\ - ["ansi-regex", "npm:6.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["strip-json-comments", [\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/strip-json-comments-npm-3.1.1-dcb2324823-492f73e272.zip/node_modules/strip-json-comments/",\ - "packageDependencies": [\ - ["strip-json-comments", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["superstruct", [\ - ["npm:0.15.5", {\ - "packageLocation": "./.yarn/cache/superstruct-npm-0.15.5-25c6f7b4d6-6d1f5249fe.zip/node_modules/superstruct/",\ - "packageDependencies": [\ - ["superstruct", "npm:0.15.5"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/superstruct-npm-2.0.2-105f89beae-a5f75b72cb.zip/node_modules/superstruct/",\ - "packageDependencies": [\ - ["superstruct", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["supports-color", [\ - ["npm:7.2.0", {\ - "packageLocation": "./.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-3dda818de0.zip/node_modules/supports-color/",\ - "packageDependencies": [\ - ["supports-color", "npm:7.2.0"],\ - ["has-flag", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.1.1", {\ - "packageLocation": "./.yarn/cache/supports-color-npm-8.1.1-289e937149-c052193a7e.zip/node_modules/supports-color/",\ - "packageDependencies": [\ - ["supports-color", "npm:8.1.1"],\ - ["has-flag", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tar", [\ - ["npm:6.2.1", {\ - "packageLocation": "./.yarn/cache/tar-npm-6.2.1-237800bb20-f1322768c9.zip/node_modules/tar/",\ - "packageDependencies": [\ - ["tar", "npm:6.2.1"],\ - ["chownr", "npm:2.0.0"],\ - ["fs-minipass", "npm:2.1.0"],\ - ["minipass", "npm:5.0.0"],\ - ["minizlib", "npm:2.1.2"],\ - ["mkdirp", "npm:1.0.4"],\ - ["yallist", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["text-encoding-utf-8", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/text-encoding-utf-8-npm-1.0.2-d3a9fb552b-ec4c15d50e.zip/node_modules/text-encoding-utf-8/",\ - "packageDependencies": [\ - ["text-encoding-utf-8", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["through", [\ - ["npm:2.3.8", {\ - "packageLocation": "./.yarn/cache/through-npm-2.3.8-df5f72a16e-a38c3e0598.zip/node_modules/through/",\ - "packageDependencies": [\ - ["through", "npm:2.3.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["to-regex-range", [\ - ["npm:5.0.1", {\ - "packageLocation": "./.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-f76fa01b3d.zip/node_modules/to-regex-range/",\ - "packageDependencies": [\ - ["to-regex-range", "npm:5.0.1"],\ - ["is-number", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["toml", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/toml-npm-3.0.0-f993270804-5d7f1d8413.zip/node_modules/toml/",\ - "packageDependencies": [\ - ["toml", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tr46", [\ - ["npm:0.0.3", {\ - "packageLocation": "./.yarn/cache/tr46-npm-0.0.3-de53018915-726321c5ea.zip/node_modules/tr46/",\ - "packageDependencies": [\ - ["tr46", "npm:0.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tslib", [\ - ["npm:2.7.0", {\ - "packageLocation": "./.yarn/cache/tslib-npm-2.7.0-21668f5c21-1606d5c89f.zip/node_modules/tslib/",\ - "packageDependencies": [\ - ["tslib", "npm:2.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["type-detect", [\ - ["npm:4.1.0", {\ - "packageLocation": "./.yarn/cache/type-detect-npm-4.1.0-171d011a73-3b32f873cd.zip/node_modules/type-detect/",\ - "packageDependencies": [\ - ["type-detect", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["typescript", [\ - ["patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587", {\ - "packageLocation": "./.yarn/cache/typescript-patch-f8edcd7439-1f8f3b6aae.zip/node_modules/typescript/",\ - "packageDependencies": [\ - ["typescript", "patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["undici-types", [\ - ["npm:6.19.8", {\ - "packageLocation": "./.yarn/cache/undici-types-npm-6.19.8-9f12285b7a-de51f1b447.zip/node_modules/undici-types/",\ - "packageDependencies": [\ - ["undici-types", "npm:6.19.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unique-filename", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/unique-filename-npm-3.0.0-77d68e0a45-8e2f59b356.zip/node_modules/unique-filename/",\ - "packageDependencies": [\ - ["unique-filename", "npm:3.0.0"],\ - ["unique-slug", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unique-slug", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/unique-slug-npm-4.0.0-e6b08f28aa-0884b58365.zip/node_modules/unique-slug/",\ - "packageDependencies": [\ - ["unique-slug", "npm:4.0.0"],\ - ["imurmurhash", "npm:0.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["utf-8-validate", [\ - ["npm:5.0.10", {\ - "packageLocation": "./.yarn/unplugged/utf-8-validate-npm-5.0.10-93e9b6f750/node_modules/utf-8-validate/",\ - "packageDependencies": [\ - ["utf-8-validate", "npm:5.0.10"],\ - ["node-gyp", "npm:10.2.0"],\ - ["node-gyp-build", "npm:4.8.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["uuid", [\ - ["npm:8.3.2", {\ - "packageLocation": "./.yarn/cache/uuid-npm-8.3.2-eca0baba53-5575a8a75c.zip/node_modules/uuid/",\ - "packageDependencies": [\ - ["uuid", "npm:8.3.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["webidl-conversions", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/webidl-conversions-npm-3.0.1-60310f6a2b-c92a0a6ab9.zip/node_modules/webidl-conversions/",\ - "packageDependencies": [\ - ["webidl-conversions", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["whatwg-url", [\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/whatwg-url-npm-5.0.0-374fb45e60-b8daed4ad3.zip/node_modules/whatwg-url/",\ - "packageDependencies": [\ - ["whatwg-url", "npm:5.0.0"],\ - ["tr46", "npm:0.0.3"],\ - ["webidl-conversions", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["which", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip/node_modules/which/",\ - "packageDependencies": [\ - ["which", "npm:2.0.2"],\ - ["isexe", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/which-npm-4.0.0-dd31cd4928-f17e84c042.zip/node_modules/which/",\ - "packageDependencies": [\ - ["which", "npm:4.0.0"],\ - ["isexe", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workerpool", [\ - ["npm:6.2.0", {\ - "packageLocation": "./.yarn/cache/workerpool-npm-6.2.0-d2a722f6bb-3493b4f0ef.zip/node_modules/workerpool/",\ - "packageDependencies": [\ - ["workerpool", "npm:6.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["wrap-ansi", [\ - ["npm:7.0.0", {\ - "packageLocation": "./.yarn/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-a790b846fd.zip/node_modules/wrap-ansi/",\ - "packageDependencies": [\ - ["wrap-ansi", "npm:7.0.0"],\ - ["ansi-styles", "npm:4.3.0"],\ - ["string-width", "npm:4.2.3"],\ - ["strip-ansi", "npm:6.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.1.0", {\ - "packageLocation": "./.yarn/cache/wrap-ansi-npm-8.1.0-26a4e6ae28-371733296d.zip/node_modules/wrap-ansi/",\ - "packageDependencies": [\ - ["wrap-ansi", "npm:8.1.0"],\ - ["ansi-styles", "npm:6.2.1"],\ - ["string-width", "npm:5.1.2"],\ - ["strip-ansi", "npm:7.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["wrappy", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip/node_modules/wrappy/",\ - "packageDependencies": [\ - ["wrappy", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ws", [\ - ["npm:7.5.10", {\ - "packageLocation": "./.yarn/cache/ws-npm-7.5.10-878ccb886b-f9bb062abf.zip/node_modules/ws/",\ - "packageDependencies": [\ - ["ws", "npm:7.5.10"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:8.18.0", {\ - "packageLocation": "./.yarn/cache/ws-npm-8.18.0-56f68bc4d6-91d4d35bc9.zip/node_modules/ws/",\ - "packageDependencies": [\ - ["ws", "npm:8.18.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:dc49a5f774a6dfdc204dee2056dda8ad1e9e8b7e69ea88feeed0433a26ade57eb298157610f1c578e678a9dc677a55fdf8bb80cecdb2646496ba448cda26b126#npm:8.18.0", {\ - "packageLocation": "./.yarn/__virtual__/ws-virtual-216446dedb/0/cache/ws-npm-8.18.0-56f68bc4d6-91d4d35bc9.zip/node_modules/ws/",\ - "packageDependencies": [\ - ["ws", "virtual:dc49a5f774a6dfdc204dee2056dda8ad1e9e8b7e69ea88feeed0433a26ade57eb298157610f1c578e678a9dc677a55fdf8bb80cecdb2646496ba448cda26b126#npm:8.18.0"],\ - ["@types/bufferutil", null],\ - ["@types/utf-8-validate", null],\ - ["bufferutil", "npm:4.0.8"],\ - ["utf-8-validate", "npm:5.0.10"]\ - ],\ - "packagePeers": [\ - "@types/bufferutil",\ - "@types/utf-8-validate",\ - "bufferutil",\ - "utf-8-validate"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:7.5.10", {\ - "packageLocation": "./.yarn/__virtual__/ws-virtual-d53d93d9c0/0/cache/ws-npm-7.5.10-878ccb886b-f9bb062abf.zip/node_modules/ws/",\ - "packageDependencies": [\ - ["ws", "virtual:fce0868acb07a93993a057fa714694d1e63a57afd3a3fb6a133667a8faa6f7c3094a325494d0603b217c30c8d9652075eb462d9842bc14b80571e7b86dd68cba#npm:7.5.10"],\ - ["@types/bufferutil", null],\ - ["@types/utf-8-validate", null],\ - ["bufferutil", null],\ - ["utf-8-validate", null]\ - ],\ - "packagePeers": [\ - "@types/bufferutil",\ - "@types/utf-8-validate",\ - "bufferutil",\ - "utf-8-validate"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["y18n", [\ - ["npm:5.0.8", {\ - "packageLocation": "./.yarn/cache/y18n-npm-5.0.8-5f3a0a7e62-54f0fb9562.zip/node_modules/y18n/",\ - "packageDependencies": [\ - ["y18n", "npm:5.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yallist", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip/node_modules/yallist/",\ - "packageDependencies": [\ - ["yallist", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yargs", [\ - ["npm:16.2.0", {\ - "packageLocation": "./.yarn/cache/yargs-npm-16.2.0-547873d425-b14afbb51e.zip/node_modules/yargs/",\ - "packageDependencies": [\ - ["yargs", "npm:16.2.0"],\ - ["cliui", "npm:7.0.4"],\ - ["escalade", "npm:3.2.0"],\ - ["get-caller-file", "npm:2.0.5"],\ - ["require-directory", "npm:2.1.1"],\ - ["string-width", "npm:4.2.3"],\ - ["y18n", "npm:5.0.8"],\ - ["yargs-parser", "npm:20.2.9"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yargs-parser", [\ - ["npm:20.2.4", {\ - "packageLocation": "./.yarn/cache/yargs-parser-npm-20.2.4-1de20916a6-d251998a37.zip/node_modules/yargs-parser/",\ - "packageDependencies": [\ - ["yargs-parser", "npm:20.2.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:20.2.9", {\ - "packageLocation": "./.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-8bb69015f2.zip/node_modules/yargs-parser/",\ - "packageDependencies": [\ - ["yargs-parser", "npm:20.2.9"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yargs-unparser", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/yargs-unparser-npm-2.0.0-930f3ff3f6-68f9a542c6.zip/node_modules/yargs-unparser/",\ - "packageDependencies": [\ - ["yargs-unparser", "npm:2.0.0"],\ - ["camelcase", "npm:6.3.0"],\ - ["decamelize", "npm:4.0.0"],\ - ["flat", "npm:5.0.2"],\ - ["is-plain-obj", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yocto-queue", [\ - ["npm:0.1.0", {\ - "packageLocation": "./.yarn/cache/yocto-queue-npm-0.1.0-c6c9a7db29-f77b3d8d00.zip/node_modules/yocto-queue/",\ - "packageDependencies": [\ - ["yocto-queue", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]]\ - ]\ - }'), {basePath: basePath || __dirname}); - } - -const fs = require('fs'); -const path = require('path'); -const require$$0 = require('module'); -const StringDecoder = require('string_decoder'); -const url = require('url'); -const os = require('os'); -const nodeUtils = require('util'); -const readline = require('readline'); -const assert = require('assert'); -const stream = require('stream'); -const zlib = require('zlib'); -const events = require('events'); - -const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e }; - -function _interopNamespace(e) { - if (e && e.__esModule) return e; - const n = Object.create(null); - if (e) { - for (const k in e) { - if (k !== 'default') { - const d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - n.default = e; - return Object.freeze(n); -} - -const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); -const path__default = /*#__PURE__*/_interopDefaultLegacy(path); -const require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0); -const StringDecoder__default = /*#__PURE__*/_interopDefaultLegacy(StringDecoder); -const nodeUtils__namespace = /*#__PURE__*/_interopNamespace(nodeUtils); -const assert__default = /*#__PURE__*/_interopDefaultLegacy(assert); -const zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib); - -const S_IFMT = 61440; -const S_IFDIR = 16384; -const S_IFREG = 32768; -const S_IFLNK = 40960; -const SAFE_TIME = 456789e3; - -const DEFAULT_MODE = S_IFREG | 420; -class StatEntry { - constructor() { - this.uid = 0; - this.gid = 0; - this.size = 0; - this.blksize = 0; - this.atimeMs = 0; - this.mtimeMs = 0; - this.ctimeMs = 0; - this.birthtimeMs = 0; - this.atime = new Date(0); - this.mtime = new Date(0); - this.ctime = new Date(0); - this.birthtime = new Date(0); - this.dev = 0; - this.ino = 0; - this.mode = DEFAULT_MODE; - this.nlink = 1; - this.rdev = 0; - this.blocks = 1; - } - isBlockDevice() { - return false; - } - isCharacterDevice() { - return false; - } - isDirectory() { - return (this.mode & S_IFMT) === S_IFDIR; - } - isFIFO() { - return false; - } - isFile() { - return (this.mode & S_IFMT) === S_IFREG; - } - isSocket() { - return false; - } - isSymbolicLink() { - return (this.mode & S_IFMT) === S_IFLNK; - } -} -class BigIntStatsEntry { - constructor() { - this.uid = BigInt(0); - this.gid = BigInt(0); - this.size = BigInt(0); - this.blksize = BigInt(0); - this.atimeMs = BigInt(0); - this.mtimeMs = BigInt(0); - this.ctimeMs = BigInt(0); - this.birthtimeMs = BigInt(0); - this.atimeNs = BigInt(0); - this.mtimeNs = BigInt(0); - this.ctimeNs = BigInt(0); - this.birthtimeNs = BigInt(0); - this.atime = new Date(0); - this.mtime = new Date(0); - this.ctime = new Date(0); - this.birthtime = new Date(0); - this.dev = BigInt(0); - this.ino = BigInt(0); - this.mode = BigInt(DEFAULT_MODE); - this.nlink = BigInt(1); - this.rdev = BigInt(0); - this.blocks = BigInt(1); - } - isBlockDevice() { - return false; - } - isCharacterDevice() { - return false; - } - isDirectory() { - return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFDIR); - } - isFIFO() { - return false; - } - isFile() { - return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFREG); - } - isSocket() { - return false; - } - isSymbolicLink() { - return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFLNK); - } -} -function makeDefaultStats() { - return new StatEntry(); -} -function clearStats(stats) { - for (const key in stats) { - if (Object.prototype.hasOwnProperty.call(stats, key)) { - const element = stats[key]; - if (typeof element === `number`) { - stats[key] = 0; - } else if (typeof element === `bigint`) { - stats[key] = BigInt(0); - } else if (nodeUtils__namespace.types.isDate(element)) { - stats[key] = new Date(0); - } - } - } - return stats; -} -function convertToBigIntStats(stats) { - const bigintStats = new BigIntStatsEntry(); - for (const key in stats) { - if (Object.prototype.hasOwnProperty.call(stats, key)) { - const element = stats[key]; - if (typeof element === `number`) { - bigintStats[key] = BigInt(element); - } else if (nodeUtils__namespace.types.isDate(element)) { - bigintStats[key] = new Date(element); - } - } - } - bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6); - bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6); - bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6); - bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6); - return bigintStats; -} -function areStatsEqual(a, b) { - if (a.atimeMs !== b.atimeMs) - return false; - if (a.birthtimeMs !== b.birthtimeMs) - return false; - if (a.blksize !== b.blksize) - return false; - if (a.blocks !== b.blocks) - return false; - if (a.ctimeMs !== b.ctimeMs) - return false; - if (a.dev !== b.dev) - return false; - if (a.gid !== b.gid) - return false; - if (a.ino !== b.ino) - return false; - if (a.isBlockDevice() !== b.isBlockDevice()) - return false; - if (a.isCharacterDevice() !== b.isCharacterDevice()) - return false; - if (a.isDirectory() !== b.isDirectory()) - return false; - if (a.isFIFO() !== b.isFIFO()) - return false; - if (a.isFile() !== b.isFile()) - return false; - if (a.isSocket() !== b.isSocket()) - return false; - if (a.isSymbolicLink() !== b.isSymbolicLink()) - return false; - if (a.mode !== b.mode) - return false; - if (a.mtimeMs !== b.mtimeMs) - return false; - if (a.nlink !== b.nlink) - return false; - if (a.rdev !== b.rdev) - return false; - if (a.size !== b.size) - return false; - if (a.uid !== b.uid) - return false; - const aN = a; - const bN = b; - if (aN.atimeNs !== bN.atimeNs) - return false; - if (aN.mtimeNs !== bN.mtimeNs) - return false; - if (aN.ctimeNs !== bN.ctimeNs) - return false; - if (aN.birthtimeNs !== bN.birthtimeNs) - return false; - return true; -} - -const PortablePath = { - root: `/`, - dot: `.`, - parent: `..` -}; -const Filename = { - nodeModules: `node_modules`, - manifest: `package.json`, - lockfile: `yarn.lock`, - virtual: `__virtual__`, - pnpJs: `.pnp.js`, - pnpCjs: `.pnp.cjs`, - rc: `.yarnrc.yml` -}; -const npath = Object.create(path__default.default); -const ppath = Object.create(path__default.default.posix); -npath.cwd = () => process.cwd(); -ppath.cwd = () => toPortablePath(process.cwd()); -ppath.resolve = (...segments) => { - if (segments.length > 0 && ppath.isAbsolute(segments[0])) { - return path__default.default.posix.resolve(...segments); - } else { - return path__default.default.posix.resolve(ppath.cwd(), ...segments); - } -}; -const contains = function(pathUtils, from, to) { - from = pathUtils.normalize(from); - to = pathUtils.normalize(to); - if (from === to) - return `.`; - if (!from.endsWith(pathUtils.sep)) - from = from + pathUtils.sep; - if (to.startsWith(from)) { - return to.slice(from.length); - } else { - return null; - } -}; -npath.fromPortablePath = fromPortablePath; -npath.toPortablePath = toPortablePath; -npath.contains = (from, to) => contains(npath, from, to); -ppath.contains = (from, to) => contains(ppath, from, to); -const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; -const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; -const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; -const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; -function fromPortablePath(p) { - if (process.platform !== `win32`) - return p; - let portablePathMatch, uncPortablePathMatch; - if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) - p = portablePathMatch[1]; - else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) - p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; - else - return p; - return p.replace(/\//g, `\\`); -} -function toPortablePath(p) { - if (process.platform !== `win32`) - return p; - p = p.replace(/\\/g, `/`); - let windowsPathMatch, uncWindowsPathMatch; - if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) - p = `/${windowsPathMatch[1]}`; - else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) - p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; - return p; -} -function convertPath(targetPathUtils, sourcePath) { - return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); -} - -const defaultTime = new Date(SAFE_TIME * 1e3); -async function copyPromise(destinationFs, destination, sourceFs, source, opts) { - const normalizedDestination = destinationFs.pathUtils.normalize(destination); - const normalizedSource = sourceFs.pathUtils.normalize(source); - const prelayout = []; - const postlayout = []; - const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); - await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); - const updateTime = typeof destinationFs.lutimesPromise === `function` ? destinationFs.lutimesPromise.bind(destinationFs) : destinationFs.utimesPromise.bind(destinationFs); - await copyImpl(prelayout, postlayout, updateTime, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); - for (const operation of prelayout) - await operation(); - await Promise.all(postlayout.map((operation) => { - return operation(); - })); -} -async function copyImpl(prelayout, postlayout, updateTime, destinationFs, destination, sourceFs, source, opts) { - var _a, _b; - const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; - const sourceStat = await sourceFs.lstatPromise(source); - const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; - let updated; - switch (true) { - case sourceStat.isDirectory(): - { - updated = await copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } - break; - case sourceStat.isFile(): - { - updated = await copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } - break; - case sourceStat.isSymbolicLink(): - { - updated = await copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } - break; - default: - { - throw new Error(`Unsupported file type (${sourceStat.mode})`); - } - } - if (updated || ((_a = destinationStat == null ? void 0 : destinationStat.mtime) == null ? void 0 : _a.getTime()) !== mtime.getTime() || ((_b = destinationStat == null ? void 0 : destinationStat.atime) == null ? void 0 : _b.getTime()) !== atime.getTime()) { - postlayout.push(() => updateTime(destination, atime, mtime)); - updated = true; - } - if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { - postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); - updated = true; - } - return updated; -} -async function maybeLStat(baseFs, p) { - try { - return await baseFs.lstatPromise(p); - } catch (e) { - return null; - } -} -async function copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - if (destinationStat !== null && !destinationStat.isDirectory()) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - let updated = false; - if (destinationStat === null) { - prelayout.push(async () => { - try { - await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); - } catch (err) { - if (err.code !== `EEXIST`) { - throw err; - } - } - }); - updated = true; - } - const entries = await sourceFs.readdirPromise(source); - const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; - if (opts.stableSort) { - for (const entry of entries.sort()) { - if (await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { - updated = true; - } - } - } else { - const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { - await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); - })); - if (entriesUpdateStatus.some((status) => status)) { - updated = true; - } - } - return updated; -} -const isCloneSupportedCache = /* @__PURE__ */ new WeakMap(); -function makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy) { - return async () => { - await opFs.linkPromise(source, destination); - if (linkStrategy === "readOnly" /* ReadOnly */) { - sourceStat.mode &= ~146; - await opFs.chmodPromise(destination, sourceStat.mode); - } - }; -} -function makeCloneLinkOperation(opFs, destination, source, sourceStat, linkStrategy) { - const isCloneSupported = isCloneSupportedCache.get(opFs); - if (typeof isCloneSupported === `undefined`) { - return async () => { - try { - await opFs.copyFilePromise(source, destination, fs__default.default.constants.COPYFILE_FICLONE_FORCE); - isCloneSupportedCache.set(opFs, true); - } catch (err) { - if (err.code === `ENOSYS` || err.code === `ENOTSUP`) { - isCloneSupportedCache.set(opFs, false); - await makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy)(); - } else { - throw err; - } - } - }; - } else { - if (isCloneSupported) { - return async () => opFs.copyFilePromise(source, destination, fs__default.default.constants.COPYFILE_FICLONE_FORCE); - } else { - return makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy); - } - } -} -async function copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - var _a; - if (destinationStat !== null) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - const linkStrategy = (_a = opts.linkStrategy) != null ? _a : null; - const op = destinationFs === sourceFs ? linkStrategy !== null ? makeCloneLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.copyFilePromise(source, destination, fs__default.default.constants.COPYFILE_FICLONE) : linkStrategy !== null ? makeLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.writeFilePromise(destination, await sourceFs.readFilePromise(source)); - prelayout.push(async () => op()); - return true; -} -async function copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - if (destinationStat !== null) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - prelayout.push(async () => { - await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); - }); - return true; -} - -function makeError$1(code, message) { - return Object.assign(new Error(`${code}: ${message}`), { code }); -} -function EBUSY(message) { - return makeError$1(`EBUSY`, message); -} -function ENOSYS(message, reason) { - return makeError$1(`ENOSYS`, `${message}, ${reason}`); -} -function EINVAL(reason) { - return makeError$1(`EINVAL`, `invalid argument, ${reason}`); -} -function EBADF(reason) { - return makeError$1(`EBADF`, `bad file descriptor, ${reason}`); -} -function ENOENT(reason) { - return makeError$1(`ENOENT`, `no such file or directory, ${reason}`); -} -function ENOTDIR(reason) { - return makeError$1(`ENOTDIR`, `not a directory, ${reason}`); -} -function EISDIR(reason) { - return makeError$1(`EISDIR`, `illegal operation on a directory, ${reason}`); -} -function EEXIST(reason) { - return makeError$1(`EEXIST`, `file already exists, ${reason}`); -} -function EROFS(reason) { - return makeError$1(`EROFS`, `read-only filesystem, ${reason}`); -} -function ENOTEMPTY(reason) { - return makeError$1(`ENOTEMPTY`, `directory not empty, ${reason}`); -} -function EOPNOTSUPP(reason) { - return makeError$1(`EOPNOTSUPP`, `operation not supported, ${reason}`); -} -function ERR_DIR_CLOSED() { - return makeError$1(`ERR_DIR_CLOSED`, `Directory handle was closed`); -} -class LibzipError extends Error { - constructor(message, code) { - super(message); - this.name = `Libzip Error`; - this.code = code; - } -} - -class CustomDir { - constructor(path, nextDirent, opts = {}) { - this.path = path; - this.nextDirent = nextDirent; - this.opts = opts; - this.closed = false; - } - throwIfClosed() { - if (this.closed) { - throw ERR_DIR_CLOSED(); - } - } - async *[Symbol.asyncIterator]() { - try { - let dirent; - while ((dirent = await this.read()) !== null) { - yield dirent; - } - } finally { - await this.close(); - } - } - read(cb) { - const dirent = this.readSync(); - if (typeof cb !== `undefined`) - return cb(null, dirent); - return Promise.resolve(dirent); - } - readSync() { - this.throwIfClosed(); - return this.nextDirent(); - } - close(cb) { - this.closeSync(); - if (typeof cb !== `undefined`) - return cb(null); - return Promise.resolve(); - } - closeSync() { - var _a, _b; - this.throwIfClosed(); - (_b = (_a = this.opts).onClose) == null ? void 0 : _b.call(_a); - this.closed = true; - } -} -function opendir(fakeFs, path, entries, opts) { - const nextDirent = () => { - const filename = entries.shift(); - if (typeof filename === `undefined`) - return null; - return Object.assign(fakeFs.statSync(fakeFs.pathUtils.join(path, filename)), { - name: filename - }); - }; - return new CustomDir(path, nextDirent, opts); -} - -class FakeFS { - constructor(pathUtils) { - this.pathUtils = pathUtils; - } - async *genTraversePromise(init, { stableSort = false } = {}) { - const stack = [init]; - while (stack.length > 0) { - const p = stack.shift(); - const entry = await this.lstatPromise(p); - if (entry.isDirectory()) { - const entries = await this.readdirPromise(p); - if (stableSort) { - for (const entry2 of entries.sort()) { - stack.push(this.pathUtils.join(p, entry2)); - } - } else { - throw new Error(`Not supported`); - } - } else { - yield p; - } - } - } - async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { - let stat; - try { - stat = await this.lstatPromise(p); - } catch (error) { - if (error.code === `ENOENT`) { - return; - } else { - throw error; - } - } - if (stat.isDirectory()) { - if (recursive) { - const entries = await this.readdirPromise(p); - await Promise.all(entries.map((entry) => { - return this.removePromise(this.pathUtils.resolve(p, entry)); - })); - } - for (let t = 0; t <= maxRetries; t++) { - try { - await this.rmdirPromise(p); - break; - } catch (error) { - if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { - throw error; - } else if (t < maxRetries) { - await new Promise((resolve) => setTimeout(resolve, t * 100)); - } - } - } - } else { - await this.unlinkPromise(p); - } - } - removeSync(p, { recursive = true } = {}) { - let stat; - try { - stat = this.lstatSync(p); - } catch (error) { - if (error.code === `ENOENT`) { - return; - } else { - throw error; - } - } - if (stat.isDirectory()) { - if (recursive) - for (const entry of this.readdirSync(p)) - this.removeSync(this.pathUtils.resolve(p, entry)); - this.rmdirSync(p); - } else { - this.unlinkSync(p); - } - } - async mkdirpPromise(p, { chmod, utimes } = {}) { - p = this.resolve(p); - if (p === this.pathUtils.dirname(p)) - return void 0; - const parts = p.split(this.pathUtils.sep); - let createdDirectory; - for (let u = 2; u <= parts.length; ++u) { - const subPath = parts.slice(0, u).join(this.pathUtils.sep); - if (!this.existsSync(subPath)) { - try { - await this.mkdirPromise(subPath); - } catch (error) { - if (error.code === `EEXIST`) { - continue; - } else { - throw error; - } - } - createdDirectory != null ? createdDirectory : createdDirectory = subPath; - if (chmod != null) - await this.chmodPromise(subPath, chmod); - if (utimes != null) { - await this.utimesPromise(subPath, utimes[0], utimes[1]); - } else { - const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); - await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); - } - } - } - return createdDirectory; - } - mkdirpSync(p, { chmod, utimes } = {}) { - p = this.resolve(p); - if (p === this.pathUtils.dirname(p)) - return void 0; - const parts = p.split(this.pathUtils.sep); - let createdDirectory; - for (let u = 2; u <= parts.length; ++u) { - const subPath = parts.slice(0, u).join(this.pathUtils.sep); - if (!this.existsSync(subPath)) { - try { - this.mkdirSync(subPath); - } catch (error) { - if (error.code === `EEXIST`) { - continue; - } else { - throw error; - } - } - createdDirectory != null ? createdDirectory : createdDirectory = subPath; - if (chmod != null) - this.chmodSync(subPath, chmod); - if (utimes != null) { - this.utimesSync(subPath, utimes[0], utimes[1]); - } else { - const parentStat = this.statSync(this.pathUtils.dirname(subPath)); - this.utimesSync(subPath, parentStat.atime, parentStat.mtime); - } - } - } - return createdDirectory; - } - async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { - return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); - } - copySync(destination, source, { baseFs = this, overwrite = true } = {}) { - const stat = baseFs.lstatSync(source); - const exists = this.existsSync(destination); - if (stat.isDirectory()) { - this.mkdirpSync(destination); - const directoryListing = baseFs.readdirSync(source); - for (const entry of directoryListing) { - this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); - } - } else if (stat.isFile()) { - if (!exists || overwrite) { - if (exists) - this.removeSync(destination); - const content = baseFs.readFileSync(source); - this.writeFileSync(destination, content); - } - } else if (stat.isSymbolicLink()) { - if (!exists || overwrite) { - if (exists) - this.removeSync(destination); - const target = baseFs.readlinkSync(source); - this.symlinkSync(convertPath(this.pathUtils, target), destination); - } - } else { - throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); - } - const mode = stat.mode & 511; - this.chmodSync(destination, mode); - } - async changeFilePromise(p, content, opts = {}) { - if (Buffer.isBuffer(content)) { - return this.changeFileBufferPromise(p, content, opts); - } else { - return this.changeFileTextPromise(p, content, opts); - } - } - async changeFileBufferPromise(p, content, { mode } = {}) { - let current = Buffer.alloc(0); - try { - current = await this.readFilePromise(p); - } catch (error) { - } - if (Buffer.compare(current, content) === 0) - return; - await this.writeFilePromise(p, content, { mode }); - } - async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { - let current = ``; - try { - current = await this.readFilePromise(p, `utf8`); - } catch (error) { - } - const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; - if (current === normalizedContent) - return; - await this.writeFilePromise(p, normalizedContent, { mode }); - } - changeFileSync(p, content, opts = {}) { - if (Buffer.isBuffer(content)) { - return this.changeFileBufferSync(p, content, opts); - } else { - return this.changeFileTextSync(p, content, opts); - } - } - changeFileBufferSync(p, content, { mode } = {}) { - let current = Buffer.alloc(0); - try { - current = this.readFileSync(p); - } catch (error) { - } - if (Buffer.compare(current, content) === 0) - return; - this.writeFileSync(p, content, { mode }); - } - changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { - let current = ``; - try { - current = this.readFileSync(p, `utf8`); - } catch (error) { - } - const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; - if (current === normalizedContent) - return; - this.writeFileSync(p, normalizedContent, { mode }); - } - async movePromise(fromP, toP) { - try { - await this.renamePromise(fromP, toP); - } catch (error) { - if (error.code === `EXDEV`) { - await this.copyPromise(toP, fromP); - await this.removePromise(fromP); - } else { - throw error; - } - } - } - moveSync(fromP, toP) { - try { - this.renameSync(fromP, toP); - } catch (error) { - if (error.code === `EXDEV`) { - this.copySync(toP, fromP); - this.removeSync(fromP); - } else { - throw error; - } - } - } - async lockPromise(affectedPath, callback) { - const lockPath = `${affectedPath}.flock`; - const interval = 1e3 / 60; - const startTime = Date.now(); - let fd = null; - const isAlive = async () => { - let pid; - try { - [pid] = await this.readJsonPromise(lockPath); - } catch (error) { - return Date.now() - startTime < 500; - } - try { - process.kill(pid, 0); - return true; - } catch (error) { - return false; - } - }; - while (fd === null) { - try { - fd = await this.openPromise(lockPath, `wx`); - } catch (error) { - if (error.code === `EEXIST`) { - if (!await isAlive()) { - try { - await this.unlinkPromise(lockPath); - continue; - } catch (error2) { - } - } - if (Date.now() - startTime < 60 * 1e3) { - await new Promise((resolve) => setTimeout(resolve, interval)); - } else { - throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); - } - } else { - throw error; - } - } - } - await this.writePromise(fd, JSON.stringify([process.pid])); - try { - return await callback(); - } finally { - try { - await this.closePromise(fd); - await this.unlinkPromise(lockPath); - } catch (error) { - } - } - } - async readJsonPromise(p) { - const content = await this.readFilePromise(p, `utf8`); - try { - return JSON.parse(content); - } catch (error) { - error.message += ` (in ${p})`; - throw error; - } - } - readJsonSync(p) { - const content = this.readFileSync(p, `utf8`); - try { - return JSON.parse(content); - } catch (error) { - error.message += ` (in ${p})`; - throw error; - } - } - async writeJsonPromise(p, data) { - return await this.writeFilePromise(p, `${JSON.stringify(data, null, 2)} -`); - } - writeJsonSync(p, data) { - return this.writeFileSync(p, `${JSON.stringify(data, null, 2)} -`); - } - async preserveTimePromise(p, cb) { - const stat = await this.lstatPromise(p); - const result = await cb(); - if (typeof result !== `undefined`) - p = result; - if (this.lutimesPromise) { - await this.lutimesPromise(p, stat.atime, stat.mtime); - } else if (!stat.isSymbolicLink()) { - await this.utimesPromise(p, stat.atime, stat.mtime); - } - } - async preserveTimeSync(p, cb) { - const stat = this.lstatSync(p); - const result = cb(); - if (typeof result !== `undefined`) - p = result; - if (this.lutimesSync) { - this.lutimesSync(p, stat.atime, stat.mtime); - } else if (!stat.isSymbolicLink()) { - this.utimesSync(p, stat.atime, stat.mtime); - } - } -} -class BasePortableFakeFS extends FakeFS { - constructor() { - super(ppath); - } -} -function getEndOfLine(content) { - const matches = content.match(/\r?\n/g); - if (matches === null) - return os.EOL; - const crlf = matches.filter((nl) => nl === `\r -`).length; - const lf = matches.length - crlf; - return crlf > lf ? `\r -` : ` -`; -} -function normalizeLineEndings(originalContent, newContent) { - return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); -} - -class NodeFS extends BasePortableFakeFS { - constructor(realFs = fs__default.default) { - super(); - this.realFs = realFs; - if (typeof this.realFs.lutimes !== `undefined`) { - this.lutimesPromise = this.lutimesPromiseImpl; - this.lutimesSync = this.lutimesSyncImpl; - } - } - getExtractHint() { - return false; - } - getRealPath() { - return PortablePath.root; - } - resolve(p) { - return ppath.resolve(p); - } - async openPromise(p, flags, mode) { - return await new Promise((resolve, reject) => { - this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); - }); - } - openSync(p, flags, mode) { - return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); - } - async opendirPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (typeof opts !== `undefined`) { - this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }).then((dir) => { - return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true }); - }); - } - opendirSync(p, opts) { - const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); - return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true }); - } - async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { - return await new Promise((resolve, reject) => { - this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { - if (error) { - reject(error); - } else { - resolve(bytesRead); - } - }); - }); - } - readSync(fd, buffer, offset, length, position) { - return this.realFs.readSync(fd, buffer, offset, length, position); - } - async writePromise(fd, buffer, offset, length, position) { - return await new Promise((resolve, reject) => { - if (typeof buffer === `string`) { - return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); - } else { - return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); - } - }); - } - writeSync(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return this.realFs.writeSync(fd, buffer, offset); - } else { - return this.realFs.writeSync(fd, buffer, offset, length, position); - } - } - async closePromise(fd) { - await new Promise((resolve, reject) => { - this.realFs.close(fd, this.makeCallback(resolve, reject)); - }); - } - closeSync(fd) { - this.realFs.closeSync(fd); - } - createReadStream(p, opts) { - const realPath = p !== null ? npath.fromPortablePath(p) : p; - return this.realFs.createReadStream(realPath, opts); - } - createWriteStream(p, opts) { - const realPath = p !== null ? npath.fromPortablePath(p) : p; - return this.realFs.createWriteStream(realPath, opts); - } - async realpathPromise(p) { - return await new Promise((resolve, reject) => { - this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); - }).then((path) => { - return npath.toPortablePath(path); - }); - } - realpathSync(p) { - return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); - } - async existsPromise(p) { - return await new Promise((resolve) => { - this.realFs.exists(npath.fromPortablePath(p), resolve); - }); - } - accessSync(p, mode) { - return this.realFs.accessSync(npath.fromPortablePath(p), mode); - } - async accessPromise(p, mode) { - return await new Promise((resolve, reject) => { - this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); - }); - } - existsSync(p) { - return this.realFs.existsSync(npath.fromPortablePath(p)); - } - async statPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - statSync(p, opts) { - if (opts) { - return this.realFs.statSync(npath.fromPortablePath(p), opts); - } else { - return this.realFs.statSync(npath.fromPortablePath(p)); - } - } - async fstatPromise(fd, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.fstat(fd, this.makeCallback(resolve, reject)); - } - }); - } - fstatSync(fd, opts) { - if (opts) { - return this.realFs.fstatSync(fd, opts); - } else { - return this.realFs.fstatSync(fd); - } - } - async lstatPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - lstatSync(p, opts) { - if (opts) { - return this.realFs.lstatSync(npath.fromPortablePath(p), opts); - } else { - return this.realFs.lstatSync(npath.fromPortablePath(p)); - } - } - async fchmodPromise(fd, mask) { - return await new Promise((resolve, reject) => { - this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); - }); - } - fchmodSync(fd, mask) { - return this.realFs.fchmodSync(fd, mask); - } - async chmodPromise(p, mask) { - return await new Promise((resolve, reject) => { - this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); - }); - } - chmodSync(p, mask) { - return this.realFs.chmodSync(npath.fromPortablePath(p), mask); - } - async fchownPromise(fd, uid, gid) { - return await new Promise((resolve, reject) => { - this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); - }); - } - fchownSync(fd, uid, gid) { - return this.realFs.fchownSync(fd, uid, gid); - } - async chownPromise(p, uid, gid) { - return await new Promise((resolve, reject) => { - this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); - }); - } - chownSync(p, uid, gid) { - return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); - } - async renamePromise(oldP, newP) { - return await new Promise((resolve, reject) => { - this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); - }); - } - renameSync(oldP, newP) { - return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); - } - async copyFilePromise(sourceP, destP, flags = 0) { - return await new Promise((resolve, reject) => { - this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); - }); - } - copyFileSync(sourceP, destP, flags = 0) { - return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); - } - async appendFilePromise(p, content, opts) { - return await new Promise((resolve, reject) => { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); - } - }); - } - appendFileSync(p, content, opts) { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.appendFileSync(fsNativePath, content, opts); - } else { - this.realFs.appendFileSync(fsNativePath, content); - } - } - async writeFilePromise(p, content, opts) { - return await new Promise((resolve, reject) => { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); - } - }); - } - writeFileSync(p, content, opts) { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.writeFileSync(fsNativePath, content, opts); - } else { - this.realFs.writeFileSync(fsNativePath, content); - } - } - async unlinkPromise(p) { - return await new Promise((resolve, reject) => { - this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - }); - } - unlinkSync(p) { - return this.realFs.unlinkSync(npath.fromPortablePath(p)); - } - async utimesPromise(p, atime, mtime) { - return await new Promise((resolve, reject) => { - this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); - }); - } - utimesSync(p, atime, mtime) { - this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); - } - async lutimesPromiseImpl(p, atime, mtime) { - const lutimes = this.realFs.lutimes; - if (typeof lutimes === `undefined`) - throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`); - return await new Promise((resolve, reject) => { - lutimes.call(this.realFs, npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); - }); - } - lutimesSyncImpl(p, atime, mtime) { - const lutimesSync = this.realFs.lutimesSync; - if (typeof lutimesSync === `undefined`) - throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`); - lutimesSync.call(this.realFs, npath.fromPortablePath(p), atime, mtime); - } - async mkdirPromise(p, opts) { - return await new Promise((resolve, reject) => { - this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - }); - } - mkdirSync(p, opts) { - return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); - } - async rmdirPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - rmdirSync(p, opts) { - return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); - } - async linkPromise(existingP, newP) { - return await new Promise((resolve, reject) => { - this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); - }); - } - linkSync(existingP, newP) { - return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); - } - async symlinkPromise(target, p, type) { - return await new Promise((resolve, reject) => { - this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); - }); - } - symlinkSync(target, p, type) { - return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); - } - async readFilePromise(p, encoding) { - return await new Promise((resolve, reject) => { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); - }); - } - readFileSync(p, encoding) { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - return this.realFs.readFileSync(fsNativePath, encoding); - } - async readdirPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts == null ? void 0 : opts.withFileTypes) { - this.realFs.readdir(npath.fromPortablePath(p), { withFileTypes: true }, this.makeCallback(resolve, reject)); - } else { - this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback((value) => resolve(value), reject)); - } - }); - } - readdirSync(p, opts) { - if (opts == null ? void 0 : opts.withFileTypes) { - return this.realFs.readdirSync(npath.fromPortablePath(p), { withFileTypes: true }); - } else { - return this.realFs.readdirSync(npath.fromPortablePath(p)); - } - } - async readlinkPromise(p) { - return await new Promise((resolve, reject) => { - this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - }).then((path) => { - return npath.toPortablePath(path); - }); - } - readlinkSync(p) { - return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); - } - async truncatePromise(p, len) { - return await new Promise((resolve, reject) => { - this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); - }); - } - truncateSync(p, len) { - return this.realFs.truncateSync(npath.fromPortablePath(p), len); - } - async ftruncatePromise(fd, len) { - return await new Promise((resolve, reject) => { - this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); - }); - } - ftruncateSync(fd, len) { - return this.realFs.ftruncateSync(fd, len); - } - watch(p, a, b) { - return this.realFs.watch( - npath.fromPortablePath(p), - a, - b - ); - } - watchFile(p, a, b) { - return this.realFs.watchFile( - npath.fromPortablePath(p), - a, - b - ); - } - unwatchFile(p, cb) { - return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); - } - makeCallback(resolve, reject) { - return (err, result) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }; - } -} - -function assertStatus(current, expected) { - if (current !== expected) { - throw new Error(`Invalid StatWatcher status: expected '${expected}', got '${current}'`); - } -} -class CustomStatWatcher extends events.EventEmitter { - constructor(fakeFs, path, { bigint = false } = {}) { - super(); - this.status = "ready" /* Ready */; - this.changeListeners = /* @__PURE__ */ new Map(); - this.startTimeout = null; - this.fakeFs = fakeFs; - this.path = path; - this.bigint = bigint; - this.lastStats = this.stat(); - } - static create(fakeFs, path, opts) { - const statWatcher = new CustomStatWatcher(fakeFs, path, opts); - statWatcher.start(); - return statWatcher; - } - start() { - assertStatus(this.status, "ready" /* Ready */); - this.status = "running" /* Running */; - this.startTimeout = setTimeout(() => { - this.startTimeout = null; - if (!this.fakeFs.existsSync(this.path)) { - this.emit("change" /* Change */, this.lastStats, this.lastStats); - } - }, 3); - } - stop() { - assertStatus(this.status, "running" /* Running */); - this.status = "stopped" /* Stopped */; - if (this.startTimeout !== null) { - clearTimeout(this.startTimeout); - this.startTimeout = null; - } - this.emit("stop" /* Stop */); - } - stat() { - try { - return this.fakeFs.statSync(this.path, { bigint: this.bigint }); - } catch (error) { - const statInstance = this.bigint ? new BigIntStatsEntry() : new StatEntry(); - return clearStats(statInstance); - } - } - makeInterval(opts) { - const interval = setInterval(() => { - const currentStats = this.stat(); - const previousStats = this.lastStats; - if (areStatsEqual(currentStats, previousStats)) - return; - this.lastStats = currentStats; - this.emit("change" /* Change */, currentStats, previousStats); - }, opts.interval); - return opts.persistent ? interval : interval.unref(); - } - registerChangeListener(listener, opts) { - this.addListener("change" /* Change */, listener); - this.changeListeners.set(listener, this.makeInterval(opts)); - } - unregisterChangeListener(listener) { - this.removeListener("change" /* Change */, listener); - const interval = this.changeListeners.get(listener); - if (typeof interval !== `undefined`) - clearInterval(interval); - this.changeListeners.delete(listener); - } - unregisterAllChangeListeners() { - for (const listener of this.changeListeners.keys()) { - this.unregisterChangeListener(listener); - } - } - hasChangeListeners() { - return this.changeListeners.size > 0; - } - ref() { - for (const interval of this.changeListeners.values()) - interval.ref(); - return this; - } - unref() { - for (const interval of this.changeListeners.values()) - interval.unref(); - return this; - } -} - -const statWatchersByFakeFS = /* @__PURE__ */ new WeakMap(); -function watchFile(fakeFs, path, a, b) { - let bigint; - let persistent; - let interval; - let listener; - switch (typeof a) { - case `function`: - { - bigint = false; - persistent = true; - interval = 5007; - listener = a; - } - break; - default: - { - ({ - bigint = false, - persistent = true, - interval = 5007 - } = a); - listener = b; - } - break; - } - let statWatchers = statWatchersByFakeFS.get(fakeFs); - if (typeof statWatchers === `undefined`) - statWatchersByFakeFS.set(fakeFs, statWatchers = /* @__PURE__ */ new Map()); - let statWatcher = statWatchers.get(path); - if (typeof statWatcher === `undefined`) { - statWatcher = CustomStatWatcher.create(fakeFs, path, { bigint }); - statWatchers.set(path, statWatcher); - } - statWatcher.registerChangeListener(listener, { persistent, interval }); - return statWatcher; -} -function unwatchFile(fakeFs, path, cb) { - const statWatchers = statWatchersByFakeFS.get(fakeFs); - if (typeof statWatchers === `undefined`) - return; - const statWatcher = statWatchers.get(path); - if (typeof statWatcher === `undefined`) - return; - if (typeof cb === `undefined`) - statWatcher.unregisterAllChangeListeners(); - else - statWatcher.unregisterChangeListener(cb); - if (!statWatcher.hasChangeListeners()) { - statWatcher.stop(); - statWatchers.delete(path); - } -} -function unwatchAllFiles(fakeFs) { - const statWatchers = statWatchersByFakeFS.get(fakeFs); - if (typeof statWatchers === `undefined`) - return; - for (const path of statWatchers.keys()) { - unwatchFile(fakeFs, path); - } -} - -const DEFAULT_COMPRESSION_LEVEL = `mixed`; -function toUnixTimestamp(time) { - if (typeof time === `string` && String(+time) === time) - return +time; - if (typeof time === `number` && Number.isFinite(time)) { - if (time < 0) { - return Date.now() / 1e3; - } else { - return time; - } - } - if (nodeUtils.types.isDate(time)) - return time.getTime() / 1e3; - throw new Error(`Invalid time`); -} -function makeEmptyArchive() { - return Buffer.from([ - 80, - 75, - 5, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ]); -} -class ZipFS extends BasePortableFakeFS { - constructor(source, opts) { - super(); - this.lzSource = null; - this.listings = /* @__PURE__ */ new Map(); - this.entries = /* @__PURE__ */ new Map(); - this.fileSources = /* @__PURE__ */ new Map(); - this.fds = /* @__PURE__ */ new Map(); - this.nextFd = 0; - this.ready = false; - this.readOnly = false; - this.libzip = opts.libzip; - const pathOptions = opts; - this.level = typeof pathOptions.level !== `undefined` ? pathOptions.level : DEFAULT_COMPRESSION_LEVEL; - source != null ? source : source = makeEmptyArchive(); - if (typeof source === `string`) { - const { baseFs = new NodeFS() } = pathOptions; - this.baseFs = baseFs; - this.path = source; - } else { - this.path = null; - this.baseFs = null; - } - if (opts.stats) { - this.stats = opts.stats; - } else { - if (typeof source === `string`) { - try { - this.stats = this.baseFs.statSync(source); - } catch (error) { - if (error.code === `ENOENT` && pathOptions.create) { - this.stats = makeDefaultStats(); - } else { - throw error; - } - } - } else { - this.stats = makeDefaultStats(); - } - } - const errPtr = this.libzip.malloc(4); - try { - let flags = 0; - if (typeof source === `string` && pathOptions.create) - flags |= this.libzip.ZIP_CREATE | this.libzip.ZIP_TRUNCATE; - if (opts.readOnly) { - flags |= this.libzip.ZIP_RDONLY; - this.readOnly = true; - } - if (typeof source === `string`) { - this.zip = this.libzip.open(npath.fromPortablePath(source), flags, errPtr); - } else { - const lzSource = this.allocateUnattachedSource(source); - try { - this.zip = this.libzip.openFromSource(lzSource, flags, errPtr); - this.lzSource = lzSource; - } catch (error) { - this.libzip.source.free(lzSource); - throw error; - } - } - if (this.zip === 0) { - const error = this.libzip.struct.errorS(); - this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`)); - throw this.makeLibzipError(error); - } - } finally { - this.libzip.free(errPtr); - } - this.listings.set(PortablePath.root, /* @__PURE__ */ new Set()); - const entryCount = this.libzip.getNumEntries(this.zip, 0); - for (let t = 0; t < entryCount; ++t) { - const raw = this.libzip.getName(this.zip, t, 0); - if (ppath.isAbsolute(raw)) - continue; - const p = ppath.resolve(PortablePath.root, raw); - this.registerEntry(p, t); - if (raw.endsWith(`/`)) { - this.registerListing(p); - } - } - this.symlinkCount = this.libzip.ext.countSymlinks(this.zip); - if (this.symlinkCount === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - this.ready = true; - } - makeLibzipError(error) { - const errorCode = this.libzip.struct.errorCodeZip(error); - const strerror = this.libzip.error.strerror(error); - const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]); - if (errorCode === this.libzip.errors.ZIP_ER_CHANGED) - throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`); - return libzipError; - } - getExtractHint(hints) { - for (const fileName of this.entries.keys()) { - const ext = this.pathUtils.extname(fileName); - if (hints.relevantExtensions.has(ext)) { - return true; - } - } - return false; - } - getAllFiles() { - return Array.from(this.entries.keys()); - } - getRealPath() { - if (!this.path) - throw new Error(`ZipFS don't have real paths when loaded from a buffer`); - return this.path; - } - getBufferAndClose() { - this.prepareClose(); - if (!this.lzSource) - throw new Error(`ZipFS was not created from a Buffer`); - if (this.entries.size === 0) { - this.discardAndClose(); - return makeEmptyArchive(); - } - try { - this.libzip.source.keep(this.lzSource); - if (this.libzip.close(this.zip) === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - if (this.libzip.source.open(this.lzSource) === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - const size = this.libzip.source.tell(this.lzSource); - if (size === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - const buffer = this.libzip.malloc(size); - if (!buffer) - throw new Error(`Couldn't allocate enough memory`); - try { - const rc = this.libzip.source.read(this.lzSource, buffer, size); - if (rc === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - else if (rc < size) - throw new Error(`Incomplete read`); - else if (rc > size) - throw new Error(`Overread`); - const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size); - return Buffer.from(memory); - } finally { - this.libzip.free(buffer); - } - } finally { - this.libzip.source.close(this.lzSource); - this.libzip.source.free(this.lzSource); - this.ready = false; - } - } - prepareClose() { - if (!this.ready) - throw EBUSY(`archive closed, close`); - unwatchAllFiles(this); - } - saveAndClose() { - if (!this.path || !this.baseFs) - throw new Error(`ZipFS cannot be saved and must be discarded when loaded from a buffer`); - this.prepareClose(); - if (this.readOnly) { - this.discardAndClose(); - return; - } - const newMode = this.baseFs.existsSync(this.path) || this.stats.mode === DEFAULT_MODE ? void 0 : this.stats.mode; - if (this.entries.size === 0) { - this.discardAndClose(); - this.baseFs.writeFileSync(this.path, makeEmptyArchive(), { mode: newMode }); - } else { - const rc = this.libzip.close(this.zip); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - if (typeof newMode !== `undefined`) { - this.baseFs.chmodSync(this.path, newMode); - } - } - this.ready = false; - } - discardAndClose() { - this.prepareClose(); - this.libzip.discard(this.zip); - this.ready = false; - } - resolve(p) { - return ppath.resolve(PortablePath.root, p); - } - async openPromise(p, flags, mode) { - return this.openSync(p, flags, mode); - } - openSync(p, flags, mode) { - const fd = this.nextFd++; - this.fds.set(fd, { cursor: 0, p }); - return fd; - } - hasOpenFileHandles() { - return !!this.fds.size; - } - async opendirPromise(p, opts) { - return this.opendirSync(p, opts); - } - opendirSync(p, opts = {}) { - const resolvedP = this.resolveFilename(`opendir '${p}'`, p); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`opendir '${p}'`); - const directoryListing = this.listings.get(resolvedP); - if (!directoryListing) - throw ENOTDIR(`opendir '${p}'`); - const entries = [...directoryListing]; - const fd = this.openSync(resolvedP, `r`); - const onClose = () => { - this.closeSync(fd); - }; - return opendir(this, resolvedP, entries, { onClose }); - } - async readPromise(fd, buffer, offset, length, position) { - return this.readSync(fd, buffer, offset, length, position); - } - readSync(fd, buffer, offset = 0, length = buffer.byteLength, position = -1) { - const entry = this.fds.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`read`); - const realPosition = position === -1 || position === null ? entry.cursor : position; - const source = this.readFileSync(entry.p); - source.copy(buffer, offset, realPosition, realPosition + length); - const bytesRead = Math.max(0, Math.min(source.length - realPosition, length)); - if (position === -1 || position === null) - entry.cursor += bytesRead; - return bytesRead; - } - async writePromise(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return this.writeSync(fd, buffer, position); - } else { - return this.writeSync(fd, buffer, offset, length, position); - } - } - writeSync(fd, buffer, offset, length, position) { - const entry = this.fds.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`read`); - throw new Error(`Unimplemented`); - } - async closePromise(fd) { - return this.closeSync(fd); - } - closeSync(fd) { - const entry = this.fds.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`read`); - this.fds.delete(fd); - } - createReadStream(p, { encoding } = {}) { - if (p === null) - throw new Error(`Unimplemented`); - const fd = this.openSync(p, `r`); - const stream$1 = Object.assign( - new stream.PassThrough({ - emitClose: true, - autoDestroy: true, - destroy: (error, callback) => { - clearImmediate(immediate); - this.closeSync(fd); - callback(error); - } - }), - { - close() { - stream$1.destroy(); - }, - bytesRead: 0, - path: p - } - ); - const immediate = setImmediate(async () => { - try { - const data = await this.readFilePromise(p, encoding); - stream$1.bytesRead = data.length; - stream$1.end(data); - } catch (error) { - stream$1.destroy(error); - } - }); - return stream$1; - } - createWriteStream(p, { encoding } = {}) { - if (this.readOnly) - throw EROFS(`open '${p}'`); - if (p === null) - throw new Error(`Unimplemented`); - const chunks = []; - const fd = this.openSync(p, `w`); - const stream$1 = Object.assign( - new stream.PassThrough({ - autoDestroy: true, - emitClose: true, - destroy: (error, callback) => { - try { - if (error) { - callback(error); - } else { - this.writeFileSync(p, Buffer.concat(chunks), encoding); - callback(null); - } - } catch (err) { - callback(err); - } finally { - this.closeSync(fd); - } - } - }), - { - bytesWritten: 0, - path: p, - close() { - stream$1.destroy(); - } - } - ); - stream$1.on(`data`, (chunk) => { - const chunkBuffer = Buffer.from(chunk); - stream$1.bytesWritten += chunkBuffer.length; - chunks.push(chunkBuffer); - }); - return stream$1; - } - async realpathPromise(p) { - return this.realpathSync(p); - } - realpathSync(p) { - const resolvedP = this.resolveFilename(`lstat '${p}'`, p); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`lstat '${p}'`); - return resolvedP; - } - async existsPromise(p) { - return this.existsSync(p); - } - existsSync(p) { - if (!this.ready) - throw EBUSY(`archive closed, existsSync '${p}'`); - if (this.symlinkCount === 0) { - const resolvedP2 = ppath.resolve(PortablePath.root, p); - return this.entries.has(resolvedP2) || this.listings.has(resolvedP2); - } - let resolvedP; - try { - resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, false); - } catch (error) { - return false; - } - if (resolvedP === void 0) - return false; - return this.entries.has(resolvedP) || this.listings.has(resolvedP); - } - async accessPromise(p, mode) { - return this.accessSync(p, mode); - } - accessSync(p, mode = fs.constants.F_OK) { - const resolvedP = this.resolveFilename(`access '${p}'`, p); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`access '${p}'`); - if (this.readOnly && mode & fs.constants.W_OK) { - throw EROFS(`access '${p}'`); - } - } - async statPromise(p, opts = { bigint: false }) { - if (opts.bigint) - return this.statSync(p, { bigint: true }); - return this.statSync(p); - } - statSync(p, opts = { bigint: false, throwIfNoEntry: true }) { - const resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, opts.throwIfNoEntry); - if (resolvedP === void 0) - return void 0; - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { - if (opts.throwIfNoEntry === false) - return void 0; - throw ENOENT(`stat '${p}'`); - } - if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) - throw ENOTDIR(`stat '${p}'`); - return this.statImpl(`stat '${p}'`, resolvedP, opts); - } - async fstatPromise(fd, opts) { - return this.fstatSync(fd, opts); - } - fstatSync(fd, opts) { - const entry = this.fds.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fstatSync`); - const { p } = entry; - const resolvedP = this.resolveFilename(`stat '${p}'`, p); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`stat '${p}'`); - if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) - throw ENOTDIR(`stat '${p}'`); - return this.statImpl(`fstat '${p}'`, resolvedP, opts); - } - async lstatPromise(p, opts = { bigint: false }) { - if (opts.bigint) - return this.lstatSync(p, { bigint: true }); - return this.lstatSync(p); - } - lstatSync(p, opts = { bigint: false, throwIfNoEntry: true }) { - const resolvedP = this.resolveFilename(`lstat '${p}'`, p, false, opts.throwIfNoEntry); - if (resolvedP === void 0) - return void 0; - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { - if (opts.throwIfNoEntry === false) - return void 0; - throw ENOENT(`lstat '${p}'`); - } - if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) - throw ENOTDIR(`lstat '${p}'`); - return this.statImpl(`lstat '${p}'`, resolvedP, opts); - } - statImpl(reason, p, opts = {}) { - const entry = this.entries.get(p); - if (typeof entry !== `undefined`) { - const stat = this.libzip.struct.statS(); - const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - const uid = this.stats.uid; - const gid = this.stats.gid; - const size = this.libzip.struct.statSize(stat) >>> 0; - const blksize = 512; - const blocks = Math.ceil(size / blksize); - const mtimeMs = (this.libzip.struct.statMtime(stat) >>> 0) * 1e3; - const atimeMs = mtimeMs; - const birthtimeMs = mtimeMs; - const ctimeMs = mtimeMs; - const atime = new Date(atimeMs); - const birthtime = new Date(birthtimeMs); - const ctime = new Date(ctimeMs); - const mtime = new Date(mtimeMs); - const type = this.listings.has(p) ? S_IFDIR : this.isSymbolicLink(entry) ? S_IFLNK : S_IFREG; - const defaultMode = type === S_IFDIR ? 493 : 420; - const mode = type | this.getUnixMode(entry, defaultMode) & 511; - const crc = this.libzip.struct.statCrc(stat); - const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); - return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; - } - if (this.listings.has(p)) { - const uid = this.stats.uid; - const gid = this.stats.gid; - const size = 0; - const blksize = 512; - const blocks = 0; - const atimeMs = this.stats.mtimeMs; - const birthtimeMs = this.stats.mtimeMs; - const ctimeMs = this.stats.mtimeMs; - const mtimeMs = this.stats.mtimeMs; - const atime = new Date(atimeMs); - const birthtime = new Date(birthtimeMs); - const ctime = new Date(ctimeMs); - const mtime = new Date(mtimeMs); - const mode = S_IFDIR | 493; - const crc = 0; - const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); - return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; - } - throw new Error(`Unreachable`); - } - getUnixMode(index, defaultMode) { - const rc = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; - if (opsys !== this.libzip.ZIP_OPSYS_UNIX) - return defaultMode; - return this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16; - } - registerListing(p) { - const existingListing = this.listings.get(p); - if (existingListing) - return existingListing; - const parentListing = this.registerListing(ppath.dirname(p)); - parentListing.add(ppath.basename(p)); - const newListing = /* @__PURE__ */ new Set(); - this.listings.set(p, newListing); - return newListing; - } - registerEntry(p, index) { - const parentListing = this.registerListing(ppath.dirname(p)); - parentListing.add(ppath.basename(p)); - this.entries.set(p, index); - } - unregisterListing(p) { - this.listings.delete(p); - const parentListing = this.listings.get(ppath.dirname(p)); - parentListing == null ? void 0 : parentListing.delete(ppath.basename(p)); - } - unregisterEntry(p) { - this.unregisterListing(p); - const entry = this.entries.get(p); - this.entries.delete(p); - if (typeof entry === `undefined`) - return; - this.fileSources.delete(entry); - if (this.isSymbolicLink(entry)) { - this.symlinkCount--; - } - } - deleteEntry(p, index) { - this.unregisterEntry(p); - const rc = this.libzip.delete(this.zip, index); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - } - resolveFilename(reason, p, resolveLastComponent = true, throwIfNoEntry = true) { - if (!this.ready) - throw EBUSY(`archive closed, ${reason}`); - let resolvedP = ppath.resolve(PortablePath.root, p); - if (resolvedP === `/`) - return PortablePath.root; - const fileIndex = this.entries.get(resolvedP); - if (resolveLastComponent && fileIndex !== void 0) { - if (this.symlinkCount !== 0 && this.isSymbolicLink(fileIndex)) { - const target = this.getFileSource(fileIndex).toString(); - return this.resolveFilename(reason, ppath.resolve(ppath.dirname(resolvedP), target), true, throwIfNoEntry); - } else { - return resolvedP; - } - } - while (true) { - const parentP = this.resolveFilename(reason, ppath.dirname(resolvedP), true, throwIfNoEntry); - if (parentP === void 0) - return parentP; - const isDir = this.listings.has(parentP); - const doesExist = this.entries.has(parentP); - if (!isDir && !doesExist) { - if (throwIfNoEntry === false) - return void 0; - throw ENOENT(reason); - } - if (!isDir) - throw ENOTDIR(reason); - resolvedP = ppath.resolve(parentP, ppath.basename(resolvedP)); - if (!resolveLastComponent || this.symlinkCount === 0) - break; - const index = this.libzip.name.locate(this.zip, resolvedP.slice(1), 0); - if (index === -1) - break; - if (this.isSymbolicLink(index)) { - const target = this.getFileSource(index).toString(); - resolvedP = ppath.resolve(ppath.dirname(resolvedP), target); - } else { - break; - } - } - return resolvedP; - } - allocateBuffer(content) { - if (!Buffer.isBuffer(content)) - content = Buffer.from(content); - const buffer = this.libzip.malloc(content.byteLength); - if (!buffer) - throw new Error(`Couldn't allocate enough memory`); - const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength); - heap.set(content); - return { buffer, byteLength: content.byteLength }; - } - allocateUnattachedSource(content) { - const error = this.libzip.struct.errorS(); - const { buffer, byteLength } = this.allocateBuffer(content); - const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, 1, error); - if (source === 0) { - this.libzip.free(error); - throw this.makeLibzipError(error); - } - return source; - } - allocateSource(content) { - const { buffer, byteLength } = this.allocateBuffer(content); - const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, 1); - if (source === 0) { - this.libzip.free(buffer); - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - return source; - } - setFileSource(p, content) { - const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content); - const target = ppath.relative(PortablePath.root, p); - const lzSource = this.allocateSource(content); - try { - const newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE); - if (newIndex === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - if (this.level !== `mixed`) { - const method = this.level === 0 ? this.libzip.ZIP_CM_STORE : this.libzip.ZIP_CM_DEFLATE; - const rc = this.libzip.file.setCompression(this.zip, newIndex, 0, method, this.level); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - } - this.fileSources.set(newIndex, buffer); - return newIndex; - } catch (error) { - this.libzip.source.free(lzSource); - throw error; - } - } - isSymbolicLink(index) { - if (this.symlinkCount === 0) - return false; - const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); - if (attrs === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; - if (opsys !== this.libzip.ZIP_OPSYS_UNIX) - return false; - const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16; - return (attributes & S_IFMT) === S_IFLNK; - } - getFileSource(index, opts = { asyncDecompress: false }) { - const cachedFileSource = this.fileSources.get(index); - if (typeof cachedFileSource !== `undefined`) - return cachedFileSource; - const stat = this.libzip.struct.statS(); - const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - const size = this.libzip.struct.statCompSize(stat); - const compressionMethod = this.libzip.struct.statCompMethod(stat); - const buffer = this.libzip.malloc(size); - try { - const file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED); - if (file === 0) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - try { - const rc2 = this.libzip.fread(file, buffer, size, 0); - if (rc2 === -1) - throw this.makeLibzipError(this.libzip.file.getError(file)); - else if (rc2 < size) - throw new Error(`Incomplete read`); - else if (rc2 > size) - throw new Error(`Overread`); - const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size); - const data = Buffer.from(memory); - if (compressionMethod === 0) { - this.fileSources.set(index, data); - return data; - } else if (opts.asyncDecompress) { - return new Promise((resolve, reject) => { - zlib__default.default.inflateRaw(data, (error, result) => { - if (error) { - reject(error); - } else { - this.fileSources.set(index, result); - resolve(result); - } - }); - }); - } else { - const decompressedData = zlib__default.default.inflateRawSync(data); - this.fileSources.set(index, decompressedData); - return decompressedData; - } - } finally { - this.libzip.fclose(file); - } - } finally { - this.libzip.free(buffer); - } - } - async fchmodPromise(fd, mask) { - return this.chmodPromise(this.fdToPath(fd, `fchmod`), mask); - } - fchmodSync(fd, mask) { - return this.chmodSync(this.fdToPath(fd, `fchmodSync`), mask); - } - async chmodPromise(p, mask) { - return this.chmodSync(p, mask); - } - chmodSync(p, mask) { - if (this.readOnly) - throw EROFS(`chmod '${p}'`); - mask &= 493; - const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false); - const entry = this.entries.get(resolvedP); - if (typeof entry === `undefined`) - throw new Error(`Assertion failed: The entry should have been registered (${resolvedP})`); - const oldMod = this.getUnixMode(entry, S_IFREG | 0); - const newMod = oldMod & ~511 | mask; - const rc = this.libzip.file.setExternalAttributes(this.zip, entry, 0, 0, this.libzip.ZIP_OPSYS_UNIX, newMod << 16); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - } - async fchownPromise(fd, uid, gid) { - return this.chownPromise(this.fdToPath(fd, `fchown`), uid, gid); - } - fchownSync(fd, uid, gid) { - return this.chownSync(this.fdToPath(fd, `fchownSync`), uid, gid); - } - async chownPromise(p, uid, gid) { - return this.chownSync(p, uid, gid); - } - chownSync(p, uid, gid) { - throw new Error(`Unimplemented`); - } - async renamePromise(oldP, newP) { - return this.renameSync(oldP, newP); - } - renameSync(oldP, newP) { - throw new Error(`Unimplemented`); - } - async copyFilePromise(sourceP, destP, flags) { - const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags); - const source = await this.getFileSource(indexSource, { asyncDecompress: true }); - const newIndex = this.setFileSource(resolvedDestP, source); - if (newIndex !== indexDest) { - this.registerEntry(resolvedDestP, newIndex); - } - } - copyFileSync(sourceP, destP, flags = 0) { - const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags); - const source = this.getFileSource(indexSource); - const newIndex = this.setFileSource(resolvedDestP, source); - if (newIndex !== indexDest) { - this.registerEntry(resolvedDestP, newIndex); - } - } - prepareCopyFile(sourceP, destP, flags = 0) { - if (this.readOnly) - throw EROFS(`copyfile '${sourceP} -> '${destP}'`); - if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) - throw ENOSYS(`unsupported clone operation`, `copyfile '${sourceP}' -> ${destP}'`); - const resolvedSourceP = this.resolveFilename(`copyfile '${sourceP} -> ${destP}'`, sourceP); - const indexSource = this.entries.get(resolvedSourceP); - if (typeof indexSource === `undefined`) - throw EINVAL(`copyfile '${sourceP}' -> '${destP}'`); - const resolvedDestP = this.resolveFilename(`copyfile '${sourceP}' -> ${destP}'`, destP); - const indexDest = this.entries.get(resolvedDestP); - if ((flags & (fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest !== `undefined`) - throw EEXIST(`copyfile '${sourceP}' -> '${destP}'`); - return { - indexSource, - resolvedDestP, - indexDest - }; - } - async appendFilePromise(p, content, opts) { - if (this.readOnly) - throw EROFS(`open '${p}'`); - if (typeof opts === `undefined`) - opts = { flag: `a` }; - else if (typeof opts === `string`) - opts = { flag: `a`, encoding: opts }; - else if (typeof opts.flag === `undefined`) - opts = { flag: `a`, ...opts }; - return this.writeFilePromise(p, content, opts); - } - appendFileSync(p, content, opts = {}) { - if (this.readOnly) - throw EROFS(`open '${p}'`); - if (typeof opts === `undefined`) - opts = { flag: `a` }; - else if (typeof opts === `string`) - opts = { flag: `a`, encoding: opts }; - else if (typeof opts.flag === `undefined`) - opts = { flag: `a`, ...opts }; - return this.writeFileSync(p, content, opts); - } - fdToPath(fd, reason) { - var _a; - const path = (_a = this.fds.get(fd)) == null ? void 0 : _a.p; - if (typeof path === `undefined`) - throw EBADF(reason); - return path; - } - async writeFilePromise(p, content, opts) { - const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts); - if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) - content = Buffer.concat([await this.getFileSource(index, { asyncDecompress: true }), Buffer.from(content)]); - if (encoding !== null) - content = content.toString(encoding); - const newIndex = this.setFileSource(resolvedP, content); - if (newIndex !== index) - this.registerEntry(resolvedP, newIndex); - if (mode !== null) { - await this.chmodPromise(resolvedP, mode); - } - } - writeFileSync(p, content, opts) { - const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts); - if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) - content = Buffer.concat([this.getFileSource(index), Buffer.from(content)]); - if (encoding !== null) - content = content.toString(encoding); - const newIndex = this.setFileSource(resolvedP, content); - if (newIndex !== index) - this.registerEntry(resolvedP, newIndex); - if (mode !== null) { - this.chmodSync(resolvedP, mode); - } - } - prepareWriteFile(p, opts) { - if (typeof p === `number`) - p = this.fdToPath(p, `read`); - if (this.readOnly) - throw EROFS(`open '${p}'`); - const resolvedP = this.resolveFilename(`open '${p}'`, p); - if (this.listings.has(resolvedP)) - throw EISDIR(`open '${p}'`); - let encoding = null, mode = null; - if (typeof opts === `string`) { - encoding = opts; - } else if (typeof opts === `object`) { - ({ - encoding = null, - mode = null - } = opts); - } - const index = this.entries.get(resolvedP); - return { - encoding, - mode, - resolvedP, - index - }; - } - async unlinkPromise(p) { - return this.unlinkSync(p); - } - unlinkSync(p) { - if (this.readOnly) - throw EROFS(`unlink '${p}'`); - const resolvedP = this.resolveFilename(`unlink '${p}'`, p); - if (this.listings.has(resolvedP)) - throw EISDIR(`unlink '${p}'`); - const index = this.entries.get(resolvedP); - if (typeof index === `undefined`) - throw EINVAL(`unlink '${p}'`); - this.deleteEntry(resolvedP, index); - } - async utimesPromise(p, atime, mtime) { - return this.utimesSync(p, atime, mtime); - } - utimesSync(p, atime, mtime) { - if (this.readOnly) - throw EROFS(`utimes '${p}'`); - const resolvedP = this.resolveFilename(`utimes '${p}'`, p); - this.utimesImpl(resolvedP, mtime); - } - async lutimesPromise(p, atime, mtime) { - return this.lutimesSync(p, atime, mtime); - } - lutimesSync(p, atime, mtime) { - if (this.readOnly) - throw EROFS(`lutimes '${p}'`); - const resolvedP = this.resolveFilename(`utimes '${p}'`, p, false); - this.utimesImpl(resolvedP, mtime); - } - utimesImpl(resolvedP, mtime) { - if (this.listings.has(resolvedP)) { - if (!this.entries.has(resolvedP)) - this.hydrateDirectory(resolvedP); - } - const entry = this.entries.get(resolvedP); - if (entry === void 0) - throw new Error(`Unreachable`); - const rc = this.libzip.file.setMtime(this.zip, entry, 0, toUnixTimestamp(mtime), 0); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - } - async mkdirPromise(p, opts) { - return this.mkdirSync(p, opts); - } - mkdirSync(p, { mode = 493, recursive = false } = {}) { - if (recursive) - return this.mkdirpSync(p, { chmod: mode }); - if (this.readOnly) - throw EROFS(`mkdir '${p}'`); - const resolvedP = this.resolveFilename(`mkdir '${p}'`, p); - if (this.entries.has(resolvedP) || this.listings.has(resolvedP)) - throw EEXIST(`mkdir '${p}'`); - this.hydrateDirectory(resolvedP); - this.chmodSync(resolvedP, mode); - return void 0; - } - async rmdirPromise(p, opts) { - return this.rmdirSync(p, opts); - } - rmdirSync(p, { recursive = false } = {}) { - if (this.readOnly) - throw EROFS(`rmdir '${p}'`); - if (recursive) { - this.removeSync(p); - return; - } - const resolvedP = this.resolveFilename(`rmdir '${p}'`, p); - const directoryListing = this.listings.get(resolvedP); - if (!directoryListing) - throw ENOTDIR(`rmdir '${p}'`); - if (directoryListing.size > 0) - throw ENOTEMPTY(`rmdir '${p}'`); - const index = this.entries.get(resolvedP); - if (typeof index === `undefined`) - throw EINVAL(`rmdir '${p}'`); - this.deleteEntry(p, index); - } - hydrateDirectory(resolvedP) { - const index = this.libzip.dir.add(this.zip, ppath.relative(PortablePath.root, resolvedP)); - if (index === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - this.registerListing(resolvedP); - this.registerEntry(resolvedP, index); - return index; - } - async linkPromise(existingP, newP) { - return this.linkSync(existingP, newP); - } - linkSync(existingP, newP) { - throw EOPNOTSUPP(`link '${existingP}' -> '${newP}'`); - } - async symlinkPromise(target, p) { - return this.symlinkSync(target, p); - } - symlinkSync(target, p) { - if (this.readOnly) - throw EROFS(`symlink '${target}' -> '${p}'`); - const resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p); - if (this.listings.has(resolvedP)) - throw EISDIR(`symlink '${target}' -> '${p}'`); - if (this.entries.has(resolvedP)) - throw EEXIST(`symlink '${target}' -> '${p}'`); - const index = this.setFileSource(resolvedP, target); - this.registerEntry(resolvedP, index); - const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, this.libzip.ZIP_OPSYS_UNIX, (S_IFLNK | 511) << 16); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - this.symlinkCount += 1; - } - async readFilePromise(p, encoding) { - if (typeof encoding === `object`) - encoding = encoding ? encoding.encoding : void 0; - const data = await this.readFileBuffer(p, { asyncDecompress: true }); - return encoding ? data.toString(encoding) : data; - } - readFileSync(p, encoding) { - if (typeof encoding === `object`) - encoding = encoding ? encoding.encoding : void 0; - const data = this.readFileBuffer(p); - return encoding ? data.toString(encoding) : data; - } - readFileBuffer(p, opts = { asyncDecompress: false }) { - if (typeof p === `number`) - p = this.fdToPath(p, `read`); - const resolvedP = this.resolveFilename(`open '${p}'`, p); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`open '${p}'`); - if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) - throw ENOTDIR(`open '${p}'`); - if (this.listings.has(resolvedP)) - throw EISDIR(`read`); - const entry = this.entries.get(resolvedP); - if (entry === void 0) - throw new Error(`Unreachable`); - return this.getFileSource(entry, opts); - } - async readdirPromise(p, opts) { - return this.readdirSync(p, opts); - } - readdirSync(p, opts) { - const resolvedP = this.resolveFilename(`scandir '${p}'`, p); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`scandir '${p}'`); - const directoryListing = this.listings.get(resolvedP); - if (!directoryListing) - throw ENOTDIR(`scandir '${p}'`); - const entries = [...directoryListing]; - if (!(opts == null ? void 0 : opts.withFileTypes)) - return entries; - return entries.map((name) => { - return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), { - name - }); - }); - } - async readlinkPromise(p) { - const entry = this.prepareReadlink(p); - return (await this.getFileSource(entry, { asyncDecompress: true })).toString(); - } - readlinkSync(p) { - const entry = this.prepareReadlink(p); - return this.getFileSource(entry).toString(); - } - prepareReadlink(p) { - const resolvedP = this.resolveFilename(`readlink '${p}'`, p, false); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`readlink '${p}'`); - if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) - throw ENOTDIR(`open '${p}'`); - if (this.listings.has(resolvedP)) - throw EINVAL(`readlink '${p}'`); - const entry = this.entries.get(resolvedP); - if (entry === void 0) - throw new Error(`Unreachable`); - if (!this.isSymbolicLink(entry)) - throw EINVAL(`readlink '${p}'`); - return entry; - } - async truncatePromise(p, len = 0) { - const resolvedP = this.resolveFilename(`open '${p}'`, p); - const index = this.entries.get(resolvedP); - if (typeof index === `undefined`) - throw EINVAL(`open '${p}'`); - const source = await this.getFileSource(index, { asyncDecompress: true }); - const truncated = Buffer.alloc(len, 0); - source.copy(truncated); - return await this.writeFilePromise(p, truncated); - } - truncateSync(p, len = 0) { - const resolvedP = this.resolveFilename(`open '${p}'`, p); - const index = this.entries.get(resolvedP); - if (typeof index === `undefined`) - throw EINVAL(`open '${p}'`); - const source = this.getFileSource(index); - const truncated = Buffer.alloc(len, 0); - source.copy(truncated); - return this.writeFileSync(p, truncated); - } - async ftruncatePromise(fd, len) { - return this.truncatePromise(this.fdToPath(fd, `ftruncate`), len); - } - ftruncateSync(fd, len) { - return this.truncateSync(this.fdToPath(fd, `ftruncateSync`), len); - } - watch(p, a, b) { - let persistent; - switch (typeof a) { - case `function`: - case `string`: - case `undefined`: - { - persistent = true; - } - break; - default: - { - ({ persistent = true } = a); - } - break; - } - if (!persistent) - return { on: () => { - }, close: () => { - } }; - const interval = setInterval(() => { - }, 24 * 60 * 60 * 1e3); - return { on: () => { - }, close: () => { - clearInterval(interval); - } }; - } - watchFile(p, a, b) { - const resolvedP = ppath.resolve(PortablePath.root, p); - return watchFile(this, resolvedP, a, b); - } - unwatchFile(p, cb) { - const resolvedP = ppath.resolve(PortablePath.root, p); - return unwatchFile(this, resolvedP, cb); - } -} - -class ProxiedFS extends FakeFS { - getExtractHint(hints) { - return this.baseFs.getExtractHint(hints); - } - resolve(path) { - return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); - } - getRealPath() { - return this.mapFromBase(this.baseFs.getRealPath()); - } - async openPromise(p, flags, mode) { - return this.baseFs.openPromise(this.mapToBase(p), flags, mode); - } - openSync(p, flags, mode) { - return this.baseFs.openSync(this.mapToBase(p), flags, mode); - } - async opendirPromise(p, opts) { - return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); - } - opendirSync(p, opts) { - return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); - } - async readPromise(fd, buffer, offset, length, position) { - return await this.baseFs.readPromise(fd, buffer, offset, length, position); - } - readSync(fd, buffer, offset, length, position) { - return this.baseFs.readSync(fd, buffer, offset, length, position); - } - async writePromise(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return await this.baseFs.writePromise(fd, buffer, offset); - } else { - return await this.baseFs.writePromise(fd, buffer, offset, length, position); - } - } - writeSync(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return this.baseFs.writeSync(fd, buffer, offset); - } else { - return this.baseFs.writeSync(fd, buffer, offset, length, position); - } - } - async closePromise(fd) { - return this.baseFs.closePromise(fd); - } - closeSync(fd) { - this.baseFs.closeSync(fd); - } - createReadStream(p, opts) { - return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); - } - createWriteStream(p, opts) { - return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); - } - async realpathPromise(p) { - return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); - } - realpathSync(p) { - return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); - } - async existsPromise(p) { - return this.baseFs.existsPromise(this.mapToBase(p)); - } - existsSync(p) { - return this.baseFs.existsSync(this.mapToBase(p)); - } - accessSync(p, mode) { - return this.baseFs.accessSync(this.mapToBase(p), mode); - } - async accessPromise(p, mode) { - return this.baseFs.accessPromise(this.mapToBase(p), mode); - } - async statPromise(p, opts) { - return this.baseFs.statPromise(this.mapToBase(p), opts); - } - statSync(p, opts) { - return this.baseFs.statSync(this.mapToBase(p), opts); - } - async fstatPromise(fd, opts) { - return this.baseFs.fstatPromise(fd, opts); - } - fstatSync(fd, opts) { - return this.baseFs.fstatSync(fd, opts); - } - lstatPromise(p, opts) { - return this.baseFs.lstatPromise(this.mapToBase(p), opts); - } - lstatSync(p, opts) { - return this.baseFs.lstatSync(this.mapToBase(p), opts); - } - async fchmodPromise(fd, mask) { - return this.baseFs.fchmodPromise(fd, mask); - } - fchmodSync(fd, mask) { - return this.baseFs.fchmodSync(fd, mask); - } - async chmodPromise(p, mask) { - return this.baseFs.chmodPromise(this.mapToBase(p), mask); - } - chmodSync(p, mask) { - return this.baseFs.chmodSync(this.mapToBase(p), mask); - } - async fchownPromise(fd, uid, gid) { - return this.baseFs.fchownPromise(fd, uid, gid); - } - fchownSync(fd, uid, gid) { - return this.baseFs.fchownSync(fd, uid, gid); - } - async chownPromise(p, uid, gid) { - return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); - } - chownSync(p, uid, gid) { - return this.baseFs.chownSync(this.mapToBase(p), uid, gid); - } - async renamePromise(oldP, newP) { - return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); - } - renameSync(oldP, newP) { - return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); - } - async copyFilePromise(sourceP, destP, flags = 0) { - return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); - } - copyFileSync(sourceP, destP, flags = 0) { - return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); - } - async appendFilePromise(p, content, opts) { - return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); - } - appendFileSync(p, content, opts) { - return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); - } - async writeFilePromise(p, content, opts) { - return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); - } - writeFileSync(p, content, opts) { - return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); - } - async unlinkPromise(p) { - return this.baseFs.unlinkPromise(this.mapToBase(p)); - } - unlinkSync(p) { - return this.baseFs.unlinkSync(this.mapToBase(p)); - } - async utimesPromise(p, atime, mtime) { - return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); - } - utimesSync(p, atime, mtime) { - return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); - } - async mkdirPromise(p, opts) { - return this.baseFs.mkdirPromise(this.mapToBase(p), opts); - } - mkdirSync(p, opts) { - return this.baseFs.mkdirSync(this.mapToBase(p), opts); - } - async rmdirPromise(p, opts) { - return this.baseFs.rmdirPromise(this.mapToBase(p), opts); - } - rmdirSync(p, opts) { - return this.baseFs.rmdirSync(this.mapToBase(p), opts); - } - async linkPromise(existingP, newP) { - return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); - } - linkSync(existingP, newP) { - return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); - } - async symlinkPromise(target, p, type) { - const mappedP = this.mapToBase(p); - if (this.pathUtils.isAbsolute(target)) - return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); - const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); - const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); - return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); - } - symlinkSync(target, p, type) { - const mappedP = this.mapToBase(p); - if (this.pathUtils.isAbsolute(target)) - return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); - const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); - const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); - return this.baseFs.symlinkSync(mappedTarget, mappedP, type); - } - async readFilePromise(p, encoding) { - if (encoding === `utf8`) { - return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); - } else { - return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); - } - } - readFileSync(p, encoding) { - if (encoding === `utf8`) { - return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); - } else { - return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); - } - } - async readdirPromise(p, opts) { - return this.baseFs.readdirPromise(this.mapToBase(p), opts); - } - readdirSync(p, opts) { - return this.baseFs.readdirSync(this.mapToBase(p), opts); - } - async readlinkPromise(p) { - return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); - } - readlinkSync(p) { - return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); - } - async truncatePromise(p, len) { - return this.baseFs.truncatePromise(this.mapToBase(p), len); - } - truncateSync(p, len) { - return this.baseFs.truncateSync(this.mapToBase(p), len); - } - async ftruncatePromise(fd, len) { - return this.baseFs.ftruncatePromise(fd, len); - } - ftruncateSync(fd, len) { - return this.baseFs.ftruncateSync(fd, len); - } - watch(p, a, b) { - return this.baseFs.watch( - this.mapToBase(p), - a, - b - ); - } - watchFile(p, a, b) { - return this.baseFs.watchFile( - this.mapToBase(p), - a, - b - ); - } - unwatchFile(p, cb) { - return this.baseFs.unwatchFile(this.mapToBase(p), cb); - } - fsMapToBase(p) { - if (typeof p === `number`) { - return p; - } else { - return this.mapToBase(p); - } - } -} - -class PosixFS extends ProxiedFS { - constructor(baseFs) { - super(npath); - this.baseFs = baseFs; - } - mapFromBase(path) { - return npath.fromPortablePath(path); - } - mapToBase(path) { - return npath.toPortablePath(path); - } -} - -const NUMBER_REGEXP = /^[0-9]+$/; -const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; -const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; -class VirtualFS extends ProxiedFS { - constructor({ baseFs = new NodeFS() } = {}) { - super(ppath); - this.baseFs = baseFs; - } - static makeVirtualPath(base, component, to) { - if (ppath.basename(base) !== `__virtual__`) - throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); - if (!ppath.basename(component).match(VALID_COMPONENT)) - throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); - const target = ppath.relative(ppath.dirname(base), to); - const segments = target.split(`/`); - let depth = 0; - while (depth < segments.length && segments[depth] === `..`) - depth += 1; - const finalSegments = segments.slice(depth); - const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); - return fullVirtualPath; - } - static resolveVirtual(p) { - const match = p.match(VIRTUAL_REGEXP); - if (!match || !match[3] && match[5]) - return p; - const target = ppath.dirname(match[1]); - if (!match[3] || !match[4]) - return target; - const isnum = NUMBER_REGEXP.test(match[4]); - if (!isnum) - return p; - const depth = Number(match[4]); - const backstep = `../`.repeat(depth); - const subpath = match[5] || `.`; - return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); - } - getExtractHint(hints) { - return this.baseFs.getExtractHint(hints); - } - getRealPath() { - return this.baseFs.getRealPath(); - } - realpathSync(p) { - const match = p.match(VIRTUAL_REGEXP); - if (!match) - return this.baseFs.realpathSync(p); - if (!match[5]) - return p; - const realpath = this.baseFs.realpathSync(this.mapToBase(p)); - return VirtualFS.makeVirtualPath(match[1], match[3], realpath); - } - async realpathPromise(p) { - const match = p.match(VIRTUAL_REGEXP); - if (!match) - return await this.baseFs.realpathPromise(p); - if (!match[5]) - return p; - const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); - return VirtualFS.makeVirtualPath(match[1], match[3], realpath); - } - mapToBase(p) { - if (p === ``) - return p; - if (this.pathUtils.isAbsolute(p)) - return VirtualFS.resolveVirtual(p); - const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); - const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); - return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; - } - mapFromBase(p) { - return p; - } -} - -const ZIP_MASK = 4278190080; -const ZIP_MAGIC = 704643072; -const getArchivePart = (path, extension) => { - let idx = path.indexOf(extension); - if (idx <= 0) - return null; - let nextCharIdx = idx; - while (idx >= 0) { - nextCharIdx = idx + extension.length; - if (path[nextCharIdx] === ppath.sep) - break; - if (path[idx - 1] === ppath.sep) - return null; - idx = path.indexOf(extension, nextCharIdx); - } - if (path.length > nextCharIdx && path[nextCharIdx] !== ppath.sep) - return null; - return path.slice(0, nextCharIdx); -}; -class ZipOpenFS extends BasePortableFakeFS { - constructor({ libzip, baseFs = new NodeFS(), filter = null, maxOpenFiles = Infinity, readOnlyArchives = false, useCache = true, maxAge = 5e3, fileExtensions = null }) { - super(); - this.fdMap = /* @__PURE__ */ new Map(); - this.nextFd = 3; - this.isZip = /* @__PURE__ */ new Set(); - this.notZip = /* @__PURE__ */ new Set(); - this.realPaths = /* @__PURE__ */ new Map(); - this.limitOpenFilesTimeout = null; - this.libzipFactory = typeof libzip !== `function` ? () => libzip : libzip; - this.baseFs = baseFs; - this.zipInstances = useCache ? /* @__PURE__ */ new Map() : null; - this.filter = filter; - this.maxOpenFiles = maxOpenFiles; - this.readOnlyArchives = readOnlyArchives; - this.maxAge = maxAge; - this.fileExtensions = fileExtensions; - } - static async openPromise(fn, opts) { - const zipOpenFs = new ZipOpenFS(opts); - try { - return await fn(zipOpenFs); - } finally { - zipOpenFs.saveAndClose(); - } - } - get libzip() { - if (typeof this.libzipInstance === `undefined`) - this.libzipInstance = this.libzipFactory(); - return this.libzipInstance; - } - getExtractHint(hints) { - return this.baseFs.getExtractHint(hints); - } - getRealPath() { - return this.baseFs.getRealPath(); - } - saveAndClose() { - unwatchAllFiles(this); - if (this.zipInstances) { - for (const [path, { zipFs }] of this.zipInstances.entries()) { - zipFs.saveAndClose(); - this.zipInstances.delete(path); - } - } - } - discardAndClose() { - unwatchAllFiles(this); - if (this.zipInstances) { - for (const [path, { zipFs }] of this.zipInstances.entries()) { - zipFs.discardAndClose(); - this.zipInstances.delete(path); - } - } - } - resolve(p) { - return this.baseFs.resolve(p); - } - remapFd(zipFs, fd) { - const remappedFd = this.nextFd++ | ZIP_MAGIC; - this.fdMap.set(remappedFd, [zipFs, fd]); - return remappedFd; - } - async openPromise(p, flags, mode) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.openPromise(p, flags, mode); - }, async (zipFs, { subPath }) => { - return this.remapFd(zipFs, await zipFs.openPromise(subPath, flags, mode)); - }); - } - openSync(p, flags, mode) { - return this.makeCallSync(p, () => { - return this.baseFs.openSync(p, flags, mode); - }, (zipFs, { subPath }) => { - return this.remapFd(zipFs, zipFs.openSync(subPath, flags, mode)); - }); - } - async opendirPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.opendirPromise(p, opts); - }, async (zipFs, { subPath }) => { - return await zipFs.opendirPromise(subPath, opts); - }, { - requireSubpath: false - }); - } - opendirSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.opendirSync(p, opts); - }, (zipFs, { subPath }) => { - return zipFs.opendirSync(subPath, opts); - }, { - requireSubpath: false - }); - } - async readPromise(fd, buffer, offset, length, position) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) - return await this.baseFs.readPromise(fd, buffer, offset, length, position); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`read`); - const [zipFs, realFd] = entry; - return await zipFs.readPromise(realFd, buffer, offset, length, position); - } - readSync(fd, buffer, offset, length, position) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) - return this.baseFs.readSync(fd, buffer, offset, length, position); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`readSync`); - const [zipFs, realFd] = entry; - return zipFs.readSync(realFd, buffer, offset, length, position); - } - async writePromise(fd, buffer, offset, length, position) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) { - if (typeof buffer === `string`) { - return await this.baseFs.writePromise(fd, buffer, offset); - } else { - return await this.baseFs.writePromise(fd, buffer, offset, length, position); - } - } - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`write`); - const [zipFs, realFd] = entry; - if (typeof buffer === `string`) { - return await zipFs.writePromise(realFd, buffer, offset); - } else { - return await zipFs.writePromise(realFd, buffer, offset, length, position); - } - } - writeSync(fd, buffer, offset, length, position) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) { - if (typeof buffer === `string`) { - return this.baseFs.writeSync(fd, buffer, offset); - } else { - return this.baseFs.writeSync(fd, buffer, offset, length, position); - } - } - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`writeSync`); - const [zipFs, realFd] = entry; - if (typeof buffer === `string`) { - return zipFs.writeSync(realFd, buffer, offset); - } else { - return zipFs.writeSync(realFd, buffer, offset, length, position); - } - } - async closePromise(fd) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) - return await this.baseFs.closePromise(fd); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`close`); - this.fdMap.delete(fd); - const [zipFs, realFd] = entry; - return await zipFs.closePromise(realFd); - } - closeSync(fd) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) - return this.baseFs.closeSync(fd); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`closeSync`); - this.fdMap.delete(fd); - const [zipFs, realFd] = entry; - return zipFs.closeSync(realFd); - } - createReadStream(p, opts) { - if (p === null) - return this.baseFs.createReadStream(p, opts); - return this.makeCallSync(p, () => { - return this.baseFs.createReadStream(p, opts); - }, (zipFs, { archivePath, subPath }) => { - const stream = zipFs.createReadStream(subPath, opts); - stream.path = npath.fromPortablePath(this.pathUtils.join(archivePath, subPath)); - return stream; - }); - } - createWriteStream(p, opts) { - if (p === null) - return this.baseFs.createWriteStream(p, opts); - return this.makeCallSync(p, () => { - return this.baseFs.createWriteStream(p, opts); - }, (zipFs, { subPath }) => { - return zipFs.createWriteStream(subPath, opts); - }); - } - async realpathPromise(p) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.realpathPromise(p); - }, async (zipFs, { archivePath, subPath }) => { - let realArchivePath = this.realPaths.get(archivePath); - if (typeof realArchivePath === `undefined`) { - realArchivePath = await this.baseFs.realpathPromise(archivePath); - this.realPaths.set(archivePath, realArchivePath); - } - return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, await zipFs.realpathPromise(subPath))); - }); - } - realpathSync(p) { - return this.makeCallSync(p, () => { - return this.baseFs.realpathSync(p); - }, (zipFs, { archivePath, subPath }) => { - let realArchivePath = this.realPaths.get(archivePath); - if (typeof realArchivePath === `undefined`) { - realArchivePath = this.baseFs.realpathSync(archivePath); - this.realPaths.set(archivePath, realArchivePath); - } - return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, zipFs.realpathSync(subPath))); - }); - } - async existsPromise(p) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.existsPromise(p); - }, async (zipFs, { subPath }) => { - return await zipFs.existsPromise(subPath); - }); - } - existsSync(p) { - return this.makeCallSync(p, () => { - return this.baseFs.existsSync(p); - }, (zipFs, { subPath }) => { - return zipFs.existsSync(subPath); - }); - } - async accessPromise(p, mode) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.accessPromise(p, mode); - }, async (zipFs, { subPath }) => { - return await zipFs.accessPromise(subPath, mode); - }); - } - accessSync(p, mode) { - return this.makeCallSync(p, () => { - return this.baseFs.accessSync(p, mode); - }, (zipFs, { subPath }) => { - return zipFs.accessSync(subPath, mode); - }); - } - async statPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.statPromise(p, opts); - }, async (zipFs, { subPath }) => { - return await zipFs.statPromise(subPath, opts); - }); - } - statSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.statSync(p, opts); - }, (zipFs, { subPath }) => { - return zipFs.statSync(subPath, opts); - }); - } - async fstatPromise(fd, opts) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) - return this.baseFs.fstatPromise(fd, opts); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fstat`); - const [zipFs, realFd] = entry; - return zipFs.fstatPromise(realFd, opts); - } - fstatSync(fd, opts) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) - return this.baseFs.fstatSync(fd, opts); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fstatSync`); - const [zipFs, realFd] = entry; - return zipFs.fstatSync(realFd, opts); - } - async lstatPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.lstatPromise(p, opts); - }, async (zipFs, { subPath }) => { - return await zipFs.lstatPromise(subPath, opts); - }); - } - lstatSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.lstatSync(p, opts); - }, (zipFs, { subPath }) => { - return zipFs.lstatSync(subPath, opts); - }); - } - async fchmodPromise(fd, mask) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) - return this.baseFs.fchmodPromise(fd, mask); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fchmod`); - const [zipFs, realFd] = entry; - return zipFs.fchmodPromise(realFd, mask); - } - fchmodSync(fd, mask) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) - return this.baseFs.fchmodSync(fd, mask); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fchmodSync`); - const [zipFs, realFd] = entry; - return zipFs.fchmodSync(realFd, mask); - } - async chmodPromise(p, mask) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.chmodPromise(p, mask); - }, async (zipFs, { subPath }) => { - return await zipFs.chmodPromise(subPath, mask); - }); - } - chmodSync(p, mask) { - return this.makeCallSync(p, () => { - return this.baseFs.chmodSync(p, mask); - }, (zipFs, { subPath }) => { - return zipFs.chmodSync(subPath, mask); - }); - } - async fchownPromise(fd, uid, gid) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) - return this.baseFs.fchownPromise(fd, uid, gid); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fchown`); - const [zipFs, realFd] = entry; - return zipFs.fchownPromise(realFd, uid, gid); - } - fchownSync(fd, uid, gid) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) - return this.baseFs.fchownSync(fd, uid, gid); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fchownSync`); - const [zipFs, realFd] = entry; - return zipFs.fchownSync(realFd, uid, gid); - } - async chownPromise(p, uid, gid) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.chownPromise(p, uid, gid); - }, async (zipFs, { subPath }) => { - return await zipFs.chownPromise(subPath, uid, gid); - }); - } - chownSync(p, uid, gid) { - return this.makeCallSync(p, () => { - return this.baseFs.chownSync(p, uid, gid); - }, (zipFs, { subPath }) => { - return zipFs.chownSync(subPath, uid, gid); - }); - } - async renamePromise(oldP, newP) { - return await this.makeCallPromise(oldP, async () => { - return await this.makeCallPromise(newP, async () => { - return await this.baseFs.renamePromise(oldP, newP); - }, async () => { - throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); - }); - }, async (zipFsO, { subPath: subPathO }) => { - return await this.makeCallPromise(newP, async () => { - throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); - }, async (zipFsN, { subPath: subPathN }) => { - if (zipFsO !== zipFsN) { - throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); - } else { - return await zipFsO.renamePromise(subPathO, subPathN); - } - }); - }); - } - renameSync(oldP, newP) { - return this.makeCallSync(oldP, () => { - return this.makeCallSync(newP, () => { - return this.baseFs.renameSync(oldP, newP); - }, () => { - throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); - }); - }, (zipFsO, { subPath: subPathO }) => { - return this.makeCallSync(newP, () => { - throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); - }, (zipFsN, { subPath: subPathN }) => { - if (zipFsO !== zipFsN) { - throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); - } else { - return zipFsO.renameSync(subPathO, subPathN); - } - }); - }); - } - async copyFilePromise(sourceP, destP, flags = 0) { - const fallback = async (sourceFs, sourceP2, destFs, destP2) => { - if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) - throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` }); - if (flags & fs.constants.COPYFILE_EXCL && await this.existsPromise(sourceP2)) - throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` }); - let content; - try { - content = await sourceFs.readFilePromise(sourceP2); - } catch (error) { - throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` }); - } - await destFs.writeFilePromise(destP2, content); - }; - return await this.makeCallPromise(sourceP, async () => { - return await this.makeCallPromise(destP, async () => { - return await this.baseFs.copyFilePromise(sourceP, destP, flags); - }, async (zipFsD, { subPath: subPathD }) => { - return await fallback(this.baseFs, sourceP, zipFsD, subPathD); - }); - }, async (zipFsS, { subPath: subPathS }) => { - return await this.makeCallPromise(destP, async () => { - return await fallback(zipFsS, subPathS, this.baseFs, destP); - }, async (zipFsD, { subPath: subPathD }) => { - if (zipFsS !== zipFsD) { - return await fallback(zipFsS, subPathS, zipFsD, subPathD); - } else { - return await zipFsS.copyFilePromise(subPathS, subPathD, flags); - } - }); - }); - } - copyFileSync(sourceP, destP, flags = 0) { - const fallback = (sourceFs, sourceP2, destFs, destP2) => { - if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) - throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` }); - if (flags & fs.constants.COPYFILE_EXCL && this.existsSync(sourceP2)) - throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` }); - let content; - try { - content = sourceFs.readFileSync(sourceP2); - } catch (error) { - throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` }); - } - destFs.writeFileSync(destP2, content); - }; - return this.makeCallSync(sourceP, () => { - return this.makeCallSync(destP, () => { - return this.baseFs.copyFileSync(sourceP, destP, flags); - }, (zipFsD, { subPath: subPathD }) => { - return fallback(this.baseFs, sourceP, zipFsD, subPathD); - }); - }, (zipFsS, { subPath: subPathS }) => { - return this.makeCallSync(destP, () => { - return fallback(zipFsS, subPathS, this.baseFs, destP); - }, (zipFsD, { subPath: subPathD }) => { - if (zipFsS !== zipFsD) { - return fallback(zipFsS, subPathS, zipFsD, subPathD); - } else { - return zipFsS.copyFileSync(subPathS, subPathD, flags); - } - }); - }); - } - async appendFilePromise(p, content, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.appendFilePromise(p, content, opts); - }, async (zipFs, { subPath }) => { - return await zipFs.appendFilePromise(subPath, content, opts); - }); - } - appendFileSync(p, content, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.appendFileSync(p, content, opts); - }, (zipFs, { subPath }) => { - return zipFs.appendFileSync(subPath, content, opts); - }); - } - async writeFilePromise(p, content, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.writeFilePromise(p, content, opts); - }, async (zipFs, { subPath }) => { - return await zipFs.writeFilePromise(subPath, content, opts); - }); - } - writeFileSync(p, content, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.writeFileSync(p, content, opts); - }, (zipFs, { subPath }) => { - return zipFs.writeFileSync(subPath, content, opts); - }); - } - async unlinkPromise(p) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.unlinkPromise(p); - }, async (zipFs, { subPath }) => { - return await zipFs.unlinkPromise(subPath); - }); - } - unlinkSync(p) { - return this.makeCallSync(p, () => { - return this.baseFs.unlinkSync(p); - }, (zipFs, { subPath }) => { - return zipFs.unlinkSync(subPath); - }); - } - async utimesPromise(p, atime, mtime) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.utimesPromise(p, atime, mtime); - }, async (zipFs, { subPath }) => { - return await zipFs.utimesPromise(subPath, atime, mtime); - }); - } - utimesSync(p, atime, mtime) { - return this.makeCallSync(p, () => { - return this.baseFs.utimesSync(p, atime, mtime); - }, (zipFs, { subPath }) => { - return zipFs.utimesSync(subPath, atime, mtime); - }); - } - async mkdirPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.mkdirPromise(p, opts); - }, async (zipFs, { subPath }) => { - return await zipFs.mkdirPromise(subPath, opts); - }); - } - mkdirSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.mkdirSync(p, opts); - }, (zipFs, { subPath }) => { - return zipFs.mkdirSync(subPath, opts); - }); - } - async rmdirPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.rmdirPromise(p, opts); - }, async (zipFs, { subPath }) => { - return await zipFs.rmdirPromise(subPath, opts); - }); - } - rmdirSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.rmdirSync(p, opts); - }, (zipFs, { subPath }) => { - return zipFs.rmdirSync(subPath, opts); - }); - } - async linkPromise(existingP, newP) { - return await this.makeCallPromise(newP, async () => { - return await this.baseFs.linkPromise(existingP, newP); - }, async (zipFs, { subPath }) => { - return await zipFs.linkPromise(existingP, subPath); - }); - } - linkSync(existingP, newP) { - return this.makeCallSync(newP, () => { - return this.baseFs.linkSync(existingP, newP); - }, (zipFs, { subPath }) => { - return zipFs.linkSync(existingP, subPath); - }); - } - async symlinkPromise(target, p, type) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.symlinkPromise(target, p, type); - }, async (zipFs, { subPath }) => { - return await zipFs.symlinkPromise(target, subPath); - }); - } - symlinkSync(target, p, type) { - return this.makeCallSync(p, () => { - return this.baseFs.symlinkSync(target, p, type); - }, (zipFs, { subPath }) => { - return zipFs.symlinkSync(target, subPath); - }); - } - async readFilePromise(p, encoding) { - return this.makeCallPromise(p, async () => { - switch (encoding) { - case `utf8`: - return await this.baseFs.readFilePromise(p, encoding); - default: - return await this.baseFs.readFilePromise(p, encoding); - } - }, async (zipFs, { subPath }) => { - return await zipFs.readFilePromise(subPath, encoding); - }); - } - readFileSync(p, encoding) { - return this.makeCallSync(p, () => { - switch (encoding) { - case `utf8`: - return this.baseFs.readFileSync(p, encoding); - default: - return this.baseFs.readFileSync(p, encoding); - } - }, (zipFs, { subPath }) => { - return zipFs.readFileSync(subPath, encoding); - }); - } - async readdirPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.readdirPromise(p, opts); - }, async (zipFs, { subPath }) => { - return await zipFs.readdirPromise(subPath, opts); - }, { - requireSubpath: false - }); - } - readdirSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.readdirSync(p, opts); - }, (zipFs, { subPath }) => { - return zipFs.readdirSync(subPath, opts); - }, { - requireSubpath: false - }); - } - async readlinkPromise(p) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.readlinkPromise(p); - }, async (zipFs, { subPath }) => { - return await zipFs.readlinkPromise(subPath); - }); - } - readlinkSync(p) { - return this.makeCallSync(p, () => { - return this.baseFs.readlinkSync(p); - }, (zipFs, { subPath }) => { - return zipFs.readlinkSync(subPath); - }); - } - async truncatePromise(p, len) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.truncatePromise(p, len); - }, async (zipFs, { subPath }) => { - return await zipFs.truncatePromise(subPath, len); - }); - } - truncateSync(p, len) { - return this.makeCallSync(p, () => { - return this.baseFs.truncateSync(p, len); - }, (zipFs, { subPath }) => { - return zipFs.truncateSync(subPath, len); - }); - } - async ftruncatePromise(fd, len) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) - return this.baseFs.ftruncatePromise(fd, len); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`ftruncate`); - const [zipFs, realFd] = entry; - return zipFs.ftruncatePromise(realFd, len); - } - ftruncateSync(fd, len) { - if ((fd & ZIP_MASK) !== ZIP_MAGIC) - return this.baseFs.ftruncateSync(fd, len); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`ftruncateSync`); - const [zipFs, realFd] = entry; - return zipFs.ftruncateSync(realFd, len); - } - watch(p, a, b) { - return this.makeCallSync(p, () => { - return this.baseFs.watch( - p, - a, - b - ); - }, (zipFs, { subPath }) => { - return zipFs.watch( - subPath, - a, - b - ); - }); - } - watchFile(p, a, b) { - return this.makeCallSync(p, () => { - return this.baseFs.watchFile( - p, - a, - b - ); - }, () => { - return watchFile(this, p, a, b); - }); - } - unwatchFile(p, cb) { - return this.makeCallSync(p, () => { - return this.baseFs.unwatchFile(p, cb); - }, () => { - return unwatchFile(this, p, cb); - }); - } - async makeCallPromise(p, discard, accept, { requireSubpath = true } = {}) { - if (typeof p !== `string`) - return await discard(); - const normalizedP = this.resolve(p); - const zipInfo = this.findZip(normalizedP); - if (!zipInfo) - return await discard(); - if (requireSubpath && zipInfo.subPath === `/`) - return await discard(); - return await this.getZipPromise(zipInfo.archivePath, async (zipFs) => await accept(zipFs, zipInfo)); - } - makeCallSync(p, discard, accept, { requireSubpath = true } = {}) { - if (typeof p !== `string`) - return discard(); - const normalizedP = this.resolve(p); - const zipInfo = this.findZip(normalizedP); - if (!zipInfo) - return discard(); - if (requireSubpath && zipInfo.subPath === `/`) - return discard(); - return this.getZipSync(zipInfo.archivePath, (zipFs) => accept(zipFs, zipInfo)); - } - findZip(p) { - if (this.filter && !this.filter.test(p)) - return null; - let filePath = ``; - while (true) { - const pathPartWithArchive = p.substring(filePath.length); - let archivePart; - if (!this.fileExtensions) { - archivePart = getArchivePart(pathPartWithArchive, `.zip`); - } else { - for (const ext of this.fileExtensions) { - archivePart = getArchivePart(pathPartWithArchive, ext); - if (archivePart) { - break; - } - } - } - if (!archivePart) - return null; - filePath = this.pathUtils.join(filePath, archivePart); - if (this.isZip.has(filePath) === false) { - if (this.notZip.has(filePath)) - continue; - try { - if (!this.baseFs.lstatSync(filePath).isFile()) { - this.notZip.add(filePath); - continue; - } - } catch { - return null; - } - this.isZip.add(filePath); - } - return { - archivePath: filePath, - subPath: this.pathUtils.join(PortablePath.root, p.substring(filePath.length)) - }; - } - } - limitOpenFiles(max) { - if (this.zipInstances === null) - return; - const now = Date.now(); - let nextExpiresAt = now + this.maxAge; - let closeCount = max === null ? 0 : this.zipInstances.size - max; - for (const [path, { zipFs, expiresAt, refCount }] of this.zipInstances.entries()) { - if (refCount !== 0 || zipFs.hasOpenFileHandles()) { - continue; - } else if (now >= expiresAt) { - zipFs.saveAndClose(); - this.zipInstances.delete(path); - closeCount -= 1; - continue; - } else if (max === null || closeCount <= 0) { - nextExpiresAt = expiresAt; - break; - } - zipFs.saveAndClose(); - this.zipInstances.delete(path); - closeCount -= 1; - } - if (this.limitOpenFilesTimeout === null && (max === null && this.zipInstances.size > 0 || max !== null)) { - this.limitOpenFilesTimeout = setTimeout(() => { - this.limitOpenFilesTimeout = null; - this.limitOpenFiles(null); - }, nextExpiresAt - now).unref(); - } - } - async getZipPromise(p, accept) { - const getZipOptions = async () => ({ - baseFs: this.baseFs, - libzip: this.libzip, - readOnly: this.readOnlyArchives, - stats: await this.baseFs.statPromise(p) - }); - if (this.zipInstances) { - let cachedZipFs = this.zipInstances.get(p); - if (!cachedZipFs) { - const zipOptions = await getZipOptions(); - cachedZipFs = this.zipInstances.get(p); - if (!cachedZipFs) { - cachedZipFs = { - zipFs: new ZipFS(p, zipOptions), - expiresAt: 0, - refCount: 0 - }; - } - } - this.zipInstances.delete(p); - this.limitOpenFiles(this.maxOpenFiles - 1); - this.zipInstances.set(p, cachedZipFs); - cachedZipFs.expiresAt = Date.now() + this.maxAge; - cachedZipFs.refCount += 1; - try { - return await accept(cachedZipFs.zipFs); - } finally { - cachedZipFs.refCount -= 1; - } - } else { - const zipFs = new ZipFS(p, await getZipOptions()); - try { - return await accept(zipFs); - } finally { - zipFs.saveAndClose(); - } - } - } - getZipSync(p, accept) { - const getZipOptions = () => ({ - baseFs: this.baseFs, - libzip: this.libzip, - readOnly: this.readOnlyArchives, - stats: this.baseFs.statSync(p) - }); - if (this.zipInstances) { - let cachedZipFs = this.zipInstances.get(p); - if (!cachedZipFs) { - cachedZipFs = { - zipFs: new ZipFS(p, getZipOptions()), - expiresAt: 0, - refCount: 0 - }; - } - this.zipInstances.delete(p); - this.limitOpenFiles(this.maxOpenFiles - 1); - this.zipInstances.set(p, cachedZipFs); - cachedZipFs.expiresAt = Date.now() + this.maxAge; - return accept(cachedZipFs.zipFs); - } else { - const zipFs = new ZipFS(p, getZipOptions()); - try { - return accept(zipFs); - } finally { - zipFs.saveAndClose(); - } - } - } -} - -class NodePathFS extends ProxiedFS { - constructor(baseFs) { - super(npath); - this.baseFs = baseFs; - } - mapFromBase(path) { - return path; - } - mapToBase(path) { - if (typeof path === `string`) - return path; - if (path instanceof url.URL) - return url.fileURLToPath(path); - if (Buffer.isBuffer(path)) { - const str = path.toString(); - if (Buffer.byteLength(str) !== path.byteLength) - throw new Error(`Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942`); - return str; - } - throw new Error(`Unsupported path type: ${nodeUtils.inspect(path)}`); - } -} - -var _a, _b, _c, _d; -const kBaseFs = Symbol(`kBaseFs`); -const kFd = Symbol(`kFd`); -const kClosePromise = Symbol(`kClosePromise`); -const kCloseResolve = Symbol(`kCloseResolve`); -const kCloseReject = Symbol(`kCloseReject`); -const kRefs = Symbol(`kRefs`); -const kRef = Symbol(`kRef`); -const kUnref = Symbol(`kUnref`); -class FileHandle { - constructor(fd, baseFs) { - this[_a] = 1; - this[_b] = void 0; - this[_c] = void 0; - this[_d] = void 0; - this[kBaseFs] = baseFs; - this[kFd] = fd; - } - get fd() { - return this[kFd]; - } - async appendFile(data, options) { - var _a2; - try { - this[kRef](this.appendFile); - const encoding = (_a2 = typeof options === `string` ? options : options == null ? void 0 : options.encoding) != null ? _a2 : void 0; - return await this[kBaseFs].appendFilePromise(this.fd, data, encoding ? { encoding } : void 0); - } finally { - this[kUnref](); - } - } - async chown(uid, gid) { - try { - this[kRef](this.chown); - return await this[kBaseFs].fchownPromise(this.fd, uid, gid); - } finally { - this[kUnref](); - } - } - async chmod(mode) { - try { - this[kRef](this.chmod); - return await this[kBaseFs].fchmodPromise(this.fd, mode); - } finally { - this[kUnref](); - } - } - createReadStream(options) { - return this[kBaseFs].createReadStream(null, { ...options, fd: this.fd }); - } - createWriteStream(options) { - return this[kBaseFs].createWriteStream(null, { ...options, fd: this.fd }); - } - datasync() { - throw new Error(`Method not implemented.`); - } - sync() { - throw new Error(`Method not implemented.`); - } - async read(bufferOrOptions, offset, length, position) { - var _a2, _b2, _c2; - try { - this[kRef](this.read); - let buffer; - if (!Buffer.isBuffer(bufferOrOptions)) { - bufferOrOptions != null ? bufferOrOptions : bufferOrOptions = {}; - buffer = (_a2 = bufferOrOptions.buffer) != null ? _a2 : Buffer.alloc(16384); - offset = bufferOrOptions.offset || 0; - length = (_b2 = bufferOrOptions.length) != null ? _b2 : buffer.byteLength; - position = (_c2 = bufferOrOptions.position) != null ? _c2 : null; - } else { - buffer = bufferOrOptions; - } - offset != null ? offset : offset = 0; - length != null ? length : length = 0; - if (length === 0) { - return { - bytesRead: length, - buffer - }; - } - const bytesRead = await this[kBaseFs].readPromise(this.fd, buffer, offset, length, position); - return { - bytesRead, - buffer - }; - } finally { - this[kUnref](); - } - } - async readFile(options) { - var _a2; - try { - this[kRef](this.readFile); - const encoding = (_a2 = typeof options === `string` ? options : options == null ? void 0 : options.encoding) != null ? _a2 : void 0; - return await this[kBaseFs].readFilePromise(this.fd, encoding); - } finally { - this[kUnref](); - } - } - readLines(options) { - return readline.createInterface({ - input: this.createReadStream(options), - crlfDelay: Infinity - }); - } - async stat(opts) { - try { - this[kRef](this.stat); - return await this[kBaseFs].fstatPromise(this.fd, opts); - } finally { - this[kUnref](); - } - } - async truncate(len) { - try { - this[kRef](this.truncate); - return await this[kBaseFs].ftruncatePromise(this.fd, len); - } finally { - this[kUnref](); - } - } - utimes(atime, mtime) { - throw new Error(`Method not implemented.`); - } - async writeFile(data, options) { - var _a2; - try { - this[kRef](this.writeFile); - const encoding = (_a2 = typeof options === `string` ? options : options == null ? void 0 : options.encoding) != null ? _a2 : void 0; - await this[kBaseFs].writeFilePromise(this.fd, data, encoding); - } finally { - this[kUnref](); - } - } - async write(...args) { - try { - this[kRef](this.write); - if (ArrayBuffer.isView(args[0])) { - const [buffer, offset, length, position] = args; - const bytesWritten = await this[kBaseFs].writePromise(this.fd, buffer, offset != null ? offset : void 0, length != null ? length : void 0, position != null ? position : void 0); - return { bytesWritten, buffer }; - } else { - const [data, position, encoding] = args; - const bytesWritten = await this[kBaseFs].writePromise(this.fd, data, position, encoding); - return { bytesWritten, buffer: data }; - } - } finally { - this[kUnref](); - } - } - async writev(buffers, position) { - try { - this[kRef](this.writev); - let bytesWritten = 0; - if (typeof position !== `undefined`) { - for (const buffer of buffers) { - const writeResult = await this.write(buffer, void 0, void 0, position); - bytesWritten += writeResult.bytesWritten; - position += writeResult.bytesWritten; - } - } else { - for (const buffer of buffers) { - const writeResult = await this.write(buffer); - bytesWritten += writeResult.bytesWritten; - } - } - return { - buffers, - bytesWritten - }; - } finally { - this[kUnref](); - } - } - readv(buffers, position) { - throw new Error(`Method not implemented.`); - } - close() { - if (this[kFd] === -1) - return Promise.resolve(); - if (this[kClosePromise]) - return this[kClosePromise]; - this[kRefs]--; - if (this[kRefs] === 0) { - const fd = this[kFd]; - this[kFd] = -1; - this[kClosePromise] = this[kBaseFs].closePromise(fd).finally(() => { - this[kClosePromise] = void 0; - }); - } else { - this[kClosePromise] = new Promise((resolve, reject) => { - this[kCloseResolve] = resolve; - this[kCloseReject] = reject; - }).finally(() => { - this[kClosePromise] = void 0; - this[kCloseReject] = void 0; - this[kCloseResolve] = void 0; - }); - } - return this[kClosePromise]; - } - [(_a = kRefs, _b = kClosePromise, _c = kCloseResolve, _d = kCloseReject, kRef)](caller) { - if (this[kFd] === -1) { - const err = new Error(`file closed`); - err.code = `EBADF`; - err.syscall = caller.name; - throw err; - } - this[kRefs]++; - } - [kUnref]() { - this[kRefs]--; - if (this[kRefs] === 0) { - const fd = this[kFd]; - this[kFd] = -1; - this[kBaseFs].closePromise(fd).then(this[kCloseResolve], this[kCloseReject]); - } - } -} - -const SYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ - `accessSync`, - `appendFileSync`, - `createReadStream`, - `createWriteStream`, - `chmodSync`, - `fchmodSync`, - `chownSync`, - `fchownSync`, - `closeSync`, - `copyFileSync`, - `linkSync`, - `lstatSync`, - `fstatSync`, - `lutimesSync`, - `mkdirSync`, - `openSync`, - `opendirSync`, - `readlinkSync`, - `readFileSync`, - `readdirSync`, - `readlinkSync`, - `realpathSync`, - `renameSync`, - `rmdirSync`, - `statSync`, - `symlinkSync`, - `truncateSync`, - `ftruncateSync`, - `unlinkSync`, - `unwatchFile`, - `utimesSync`, - `watch`, - `watchFile`, - `writeFileSync`, - `writeSync` -]); -const ASYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ - `accessPromise`, - `appendFilePromise`, - `fchmodPromise`, - `chmodPromise`, - `fchownPromise`, - `chownPromise`, - `closePromise`, - `copyFilePromise`, - `linkPromise`, - `fstatPromise`, - `lstatPromise`, - `lutimesPromise`, - `mkdirPromise`, - `openPromise`, - `opendirPromise`, - `readdirPromise`, - `realpathPromise`, - `readFilePromise`, - `readdirPromise`, - `readlinkPromise`, - `renamePromise`, - `rmdirPromise`, - `statPromise`, - `symlinkPromise`, - `truncatePromise`, - `ftruncatePromise`, - `unlinkPromise`, - `utimesPromise`, - `writeFilePromise`, - `writeSync` -]); -function patchFs(patchedFs, fakeFs) { - fakeFs = new NodePathFS(fakeFs); - const setupFn = (target, name, replacement) => { - const orig = target[name]; - target[name] = replacement; - if (typeof (orig == null ? void 0 : orig[nodeUtils.promisify.custom]) !== `undefined`) { - replacement[nodeUtils.promisify.custom] = orig[nodeUtils.promisify.custom]; - } - }; - { - setupFn(patchedFs, `exists`, (p, ...args) => { - const hasCallback = typeof args[args.length - 1] === `function`; - const callback = hasCallback ? args.pop() : () => { - }; - process.nextTick(() => { - fakeFs.existsPromise(p).then((exists) => { - callback(exists); - }, () => { - callback(false); - }); - }); - }); - setupFn(patchedFs, `read`, (...args) => { - let [fd, buffer, offset, length, position, callback] = args; - if (args.length <= 3) { - let options = {}; - if (args.length < 3) { - callback = args[1]; - } else { - options = args[1]; - callback = args[2]; - } - ({ - buffer = Buffer.alloc(16384), - offset = 0, - length = buffer.byteLength, - position - } = options); - } - if (offset == null) - offset = 0; - length |= 0; - if (length === 0) { - process.nextTick(() => { - callback(null, 0, buffer); - }); - return; - } - if (position == null) - position = -1; - process.nextTick(() => { - fakeFs.readPromise(fd, buffer, offset, length, position).then((bytesRead) => { - callback(null, bytesRead, buffer); - }, (error) => { - callback(error, 0, buffer); - }); - }); - }); - for (const fnName of ASYNC_IMPLEMENTATIONS) { - const origName = fnName.replace(/Promise$/, ``); - if (typeof patchedFs[origName] === `undefined`) - continue; - const fakeImpl = fakeFs[fnName]; - if (typeof fakeImpl === `undefined`) - continue; - const wrapper = (...args) => { - const hasCallback = typeof args[args.length - 1] === `function`; - const callback = hasCallback ? args.pop() : () => { - }; - process.nextTick(() => { - fakeImpl.apply(fakeFs, args).then((result) => { - callback(null, result); - }, (error) => { - callback(error); - }); - }); - }; - setupFn(patchedFs, origName, wrapper); - } - patchedFs.realpath.native = patchedFs.realpath; - } - { - setupFn(patchedFs, `existsSync`, (p) => { - try { - return fakeFs.existsSync(p); - } catch (error) { - return false; - } - }); - setupFn(patchedFs, `readSync`, (...args) => { - let [fd, buffer, offset, length, position] = args; - if (args.length <= 3) { - const options = args[2] || {}; - ({ offset = 0, length = buffer.byteLength, position } = options); - } - if (offset == null) - offset = 0; - length |= 0; - if (length === 0) - return 0; - if (position == null) - position = -1; - return fakeFs.readSync(fd, buffer, offset, length, position); - }); - for (const fnName of SYNC_IMPLEMENTATIONS) { - const origName = fnName; - if (typeof patchedFs[origName] === `undefined`) - continue; - const fakeImpl = fakeFs[fnName]; - if (typeof fakeImpl === `undefined`) - continue; - setupFn(patchedFs, origName, fakeImpl.bind(fakeFs)); - } - patchedFs.realpathSync.native = patchedFs.realpathSync; - } - { - const origEmitWarning = process.emitWarning; - process.emitWarning = () => { - }; - let patchedFsPromises; - try { - patchedFsPromises = patchedFs.promises; - } finally { - process.emitWarning = origEmitWarning; - } - if (typeof patchedFsPromises !== `undefined`) { - for (const fnName of ASYNC_IMPLEMENTATIONS) { - const origName = fnName.replace(/Promise$/, ``); - if (typeof patchedFsPromises[origName] === `undefined`) - continue; - const fakeImpl = fakeFs[fnName]; - if (typeof fakeImpl === `undefined`) - continue; - if (fnName === `open`) - continue; - setupFn(patchedFsPromises, origName, (pathLike, ...args) => { - if (pathLike instanceof FileHandle) { - return pathLike[origName].apply(pathLike, args); - } else { - return fakeImpl.call(fakeFs, pathLike, ...args); - } - }); - } - setupFn(patchedFsPromises, `open`, async (...args) => { - const fd = await fakeFs.openPromise(...args); - return new FileHandle(fd, fakeFs); - }); - } - } - { - patchedFs.read[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => { - const res = fakeFs.readPromise(fd, buffer, ...args); - return { bytesRead: await res, buffer }; - }; - patchedFs.write[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => { - const res = fakeFs.writePromise(fd, buffer, ...args); - return { bytesWritten: await res, buffer }; - }; - } -} - -var libzipSync = {exports: {}}; - -(function (module, exports) { -var frozenFs = Object.assign({}, fs__default.default); -var createModule = function() { - var _scriptDir = void 0; - if (typeof __filename !== "undefined") - _scriptDir = _scriptDir || __filename; - return function(createModule2) { - createModule2 = createModule2 || {}; - var Module = typeof createModule2 !== "undefined" ? createModule2 : {}; - var readyPromiseResolve, readyPromiseReject; - Module["ready"] = new Promise(function(resolve, reject) { - readyPromiseResolve = resolve; - readyPromiseReject = reject; - }); - var moduleOverrides = {}; - var key; - for (key in Module) { - if (Module.hasOwnProperty(key)) { - moduleOverrides[key] = Module[key]; - } - } - var scriptDirectory = ""; - function locateFile(path) { - if (Module["locateFile"]) { - return Module["locateFile"](path, scriptDirectory); - } - return scriptDirectory + path; - } - var read_, readBinary; - var nodeFS; - var nodePath; - { - { - scriptDirectory = __dirname + "/"; - } - read_ = function shell_read(filename, binary) { - var ret = tryParseAsDataURI(filename); - if (ret) { - return binary ? ret : ret.toString(); - } - if (!nodeFS) - nodeFS = frozenFs; - if (!nodePath) - nodePath = path__default.default; - filename = nodePath["normalize"](filename); - return nodeFS["readFileSync"](filename, binary ? null : "utf8"); - }; - readBinary = function readBinary2(filename) { - var ret = read_(filename, true); - if (!ret.buffer) { - ret = new Uint8Array(ret); - } - assert(ret.buffer); - return ret; - }; - if (process["argv"].length > 1) { - process["argv"][1].replace(/\\/g, "/"); - } - process["argv"].slice(2); - Module["inspect"] = function() { - return "[Emscripten Module object]"; - }; - } - var out = Module["print"] || console.log.bind(console); - var err = Module["printErr"] || console.warn.bind(console); - for (key in moduleOverrides) { - if (moduleOverrides.hasOwnProperty(key)) { - Module[key] = moduleOverrides[key]; - } - } - moduleOverrides = null; - if (Module["arguments"]) - ; - if (Module["thisProgram"]) - ; - if (Module["quit"]) - ; - var STACK_ALIGN = 16; - function alignMemory(size, factor) { - if (!factor) - factor = STACK_ALIGN; - return Math.ceil(size / factor) * factor; - } - var wasmBinary; - if (Module["wasmBinary"]) - wasmBinary = Module["wasmBinary"]; - Module["noExitRuntime"] || true; - if (typeof WebAssembly !== "object") { - abort("no native wasm support detected"); - } - function getValue(ptr, type, noSafe) { - type = type || "i8"; - if (type.charAt(type.length - 1) === "*") - type = "i32"; - switch (type) { - case "i1": - return HEAP8[ptr >> 0]; - case "i8": - return HEAP8[ptr >> 0]; - case "i16": - return HEAP16[ptr >> 1]; - case "i32": - return HEAP32[ptr >> 2]; - case "i64": - return HEAP32[ptr >> 2]; - case "float": - return HEAPF32[ptr >> 2]; - case "double": - return HEAPF64[ptr >> 3]; - default: - abort("invalid type for getValue: " + type); - } - return null; - } - var wasmMemory; - var ABORT = false; - function assert(condition, text) { - if (!condition) { - abort("Assertion failed: " + text); - } - } - function getCFunc(ident) { - var func = Module["_" + ident]; - assert( - func, - "Cannot call unknown function " + ident + ", make sure it is exported" - ); - return func; - } - function ccall(ident, returnType, argTypes, args, opts) { - var toC = { - string: function(str) { - var ret2 = 0; - if (str !== null && str !== void 0 && str !== 0) { - var len = (str.length << 2) + 1; - ret2 = stackAlloc(len); - stringToUTF8(str, ret2, len); - } - return ret2; - }, - array: function(arr) { - var ret2 = stackAlloc(arr.length); - writeArrayToMemory(arr, ret2); - return ret2; - } - }; - function convertReturnValue(ret2) { - if (returnType === "string") - return UTF8ToString(ret2); - if (returnType === "boolean") - return Boolean(ret2); - return ret2; - } - var func = getCFunc(ident); - var cArgs = []; - var stack = 0; - if (args) { - for (var i = 0; i < args.length; i++) { - var converter = toC[argTypes[i]]; - if (converter) { - if (stack === 0) - stack = stackSave(); - cArgs[i] = converter(args[i]); - } else { - cArgs[i] = args[i]; - } - } - } - var ret = func.apply(null, cArgs); - ret = convertReturnValue(ret); - if (stack !== 0) - stackRestore(stack); - return ret; - } - function cwrap(ident, returnType, argTypes, opts) { - argTypes = argTypes || []; - var numericArgs = argTypes.every(function(type) { - return type === "number"; - }); - var numericRet = returnType !== "string"; - if (numericRet && numericArgs && !opts) { - return getCFunc(ident); - } - return function() { - return ccall(ident, returnType, argTypes, arguments); - }; - } - var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : void 0; - function UTF8ArrayToString(heap, idx, maxBytesToRead) { - var endIdx = idx + maxBytesToRead; - var endPtr = idx; - while (heap[endPtr] && !(endPtr >= endIdx)) - ++endPtr; - if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { - return UTF8Decoder.decode(heap.subarray(idx, endPtr)); - } else { - var str = ""; - while (idx < endPtr) { - var u0 = heap[idx++]; - if (!(u0 & 128)) { - str += String.fromCharCode(u0); - continue; - } - var u1 = heap[idx++] & 63; - if ((u0 & 224) == 192) { - str += String.fromCharCode((u0 & 31) << 6 | u1); - continue; - } - var u2 = heap[idx++] & 63; - if ((u0 & 240) == 224) { - u0 = (u0 & 15) << 12 | u1 << 6 | u2; - } else { - u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63; - } - if (u0 < 65536) { - str += String.fromCharCode(u0); - } else { - var ch = u0 - 65536; - str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); - } - } - } - return str; - } - function UTF8ToString(ptr, maxBytesToRead) { - return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""; - } - function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { - if (!(maxBytesToWrite > 0)) - return 0; - var startIdx = outIdx; - var endIdx = outIdx + maxBytesToWrite - 1; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) { - var u1 = str.charCodeAt(++i); - u = 65536 + ((u & 1023) << 10) | u1 & 1023; - } - if (u <= 127) { - if (outIdx >= endIdx) - break; - heap[outIdx++] = u; - } else if (u <= 2047) { - if (outIdx + 1 >= endIdx) - break; - heap[outIdx++] = 192 | u >> 6; - heap[outIdx++] = 128 | u & 63; - } else if (u <= 65535) { - if (outIdx + 2 >= endIdx) - break; - heap[outIdx++] = 224 | u >> 12; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63; - } else { - if (outIdx + 3 >= endIdx) - break; - heap[outIdx++] = 240 | u >> 18; - heap[outIdx++] = 128 | u >> 12 & 63; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63; - } - } - heap[outIdx] = 0; - return outIdx - startIdx; - } - function stringToUTF8(str, outPtr, maxBytesToWrite) { - return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); - } - function lengthBytesUTF8(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) - u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; - if (u <= 127) - ++len; - else if (u <= 2047) - len += 2; - else if (u <= 65535) - len += 3; - else - len += 4; - } - return len; - } - function allocateUTF8(str) { - var size = lengthBytesUTF8(str) + 1; - var ret = _malloc(size); - if (ret) - stringToUTF8Array(str, HEAP8, ret, size); - return ret; - } - function writeArrayToMemory(array, buffer2) { - HEAP8.set(array, buffer2); - } - function alignUp(x, multiple) { - if (x % multiple > 0) { - x += multiple - x % multiple; - } - return x; - } - var buffer, HEAP8, HEAPU8, HEAP16, HEAP32, HEAPF32, HEAPF64; - function updateGlobalBufferAndViews(buf) { - buffer = buf; - Module["HEAP8"] = HEAP8 = new Int8Array(buf); - Module["HEAP16"] = HEAP16 = new Int16Array(buf); - Module["HEAP32"] = HEAP32 = new Int32Array(buf); - Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); - Module["HEAPU16"] = new Uint16Array(buf); - Module["HEAPU32"] = new Uint32Array(buf); - Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); - Module["HEAPF64"] = HEAPF64 = new Float64Array(buf); - } - Module["INITIAL_MEMORY"] || 16777216; - var wasmTable; - var __ATPRERUN__ = []; - var __ATINIT__ = []; - var __ATPOSTRUN__ = []; - function preRun() { - if (Module["preRun"]) { - if (typeof Module["preRun"] == "function") - Module["preRun"] = [Module["preRun"]]; - while (Module["preRun"].length) { - addOnPreRun(Module["preRun"].shift()); - } - } - callRuntimeCallbacks(__ATPRERUN__); - } - function initRuntime() { - if (!Module["noFSInit"] && !FS.init.initialized) - FS.init(); - callRuntimeCallbacks(__ATINIT__); - } - function postRun() { - if (Module["postRun"]) { - if (typeof Module["postRun"] == "function") - Module["postRun"] = [Module["postRun"]]; - while (Module["postRun"].length) { - addOnPostRun(Module["postRun"].shift()); - } - } - callRuntimeCallbacks(__ATPOSTRUN__); - } - function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb); - } - function addOnInit(cb) { - __ATINIT__.unshift(cb); - } - function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb); - } - var runDependencies = 0; - var dependenciesFulfilled = null; - function addRunDependency(id) { - runDependencies++; - if (Module["monitorRunDependencies"]) { - Module["monitorRunDependencies"](runDependencies); - } - } - function removeRunDependency(id) { - runDependencies--; - if (Module["monitorRunDependencies"]) { - Module["monitorRunDependencies"](runDependencies); - } - if (runDependencies == 0) { - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); - } - } - } - Module["preloadedImages"] = {}; - Module["preloadedAudios"] = {}; - function abort(what) { - if (Module["onAbort"]) { - Module["onAbort"](what); - } - what += ""; - err(what); - ABORT = true; - what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."; - var e = new WebAssembly.RuntimeError(what); - readyPromiseReject(e); - throw e; - } - var dataURIPrefix = "data:application/octet-stream;base64,"; - function isDataURI(filename) { - return filename.startsWith(dataURIPrefix); - } - var wasmBinaryFile = "data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYCJAJAIABFBEAgBSgCKEEOQQAQFCAFQQA6AD8MAQsgBUEANgIgIAVBADYCGANAAn8jAEEQayIAIAUoAiQ2AgwgACgCDC0AAEEBcQsEfyAFKAIkEDBCBFoFQQALQQFxBEAgBSAFKAIkEB07ARYgBSAFKAIkEB07ARQgBSAFKAIkIAUvARStEB42AhAgBSgCEEUEQCAFKAIoQRVBABAUIAUoAiQQFiAFKAIYECMgBUEAOgA/DAMLIAUgBS8BFiAFLwEUIAUoAhAgBSgCMBBVIgA2AhwgAEUEQCAFKAIoQQ5BABAUIAUoAiQQFiAFKAIYECMgBUEAOgA/DAMLAkAgBSgCGARAIAUoAiAgBSgCHDYCACAFIAUoAhw2AiAMAQsgBSAFKAIcIgA2AiAgBSAANgIYCwwBCwsgBSgCJBBHQQFxRQRAIAUgBSgCJBAwPgIMIAUgBSgCJCAFKAIMrRAeNgIIAkACQCAFKAIMQQRPDQAgBSgCCEUNACAFKAIIQZEVIAUoAgwQT0UNAQsgBSgCKEEVQQAQFCAFKAIkEBYgBSgCGBAjIAVBADoAPwwCCwsgBSgCJBAWAkAgBSgCLARAIAUoAiwgBSgCGDYCAAwBCyAFKAIYECMLIAVBAToAPwsgBS0AP0EBcSEAIAVBQGskACAAC+8CAQF/IwBBIGsiAiQAIAIgADYCGCACIAE2AhQCQCACKAIYRQRAIAIgAigCFDYCHAwBCyACIAIoAhg2AggDQCACKAIIKAIABEAgAiACKAIIKAIANgIIDAELCwNAIAIoAhQEQCACIAIoAhQoAgA2AhAgAkEANgIEIAIgAigCGDYCDANAAkAgAigCDEUNAAJAIAIoAgwvAQggAigCFC8BCEcNACACKAIMLwEKIAIoAhQvAQpHDQAgAigCDC8BCgRAIAIoAgwoAgwgAigCFCgCDCACKAIMLwEKEE8NAQsgAigCDCIAIAAoAgQgAigCFCgCBEGABnFyNgIEIAJBATYCBAwBCyACIAIoAgwoAgA2AgwMAQsLIAIoAhRBADYCAAJAIAIoAgQEQCACKAIUECMMAQsgAigCCCACKAIUIgA2AgAgAiAANgIICyACIAIoAhA2AhQMAQsLIAIgAigCGDYCHAsgAigCHCEAIAJBIGokACAAC18BAX8jAEEQayICJAAgAiAANgIIIAIgAToAByACIAIoAghCARAeNgIAAkAgAigCAEUEQCACQX82AgwMAQsgAigCACACLQAHOgAAIAJBADYCDAsgAigCDBogAkEQaiQAC1QBAX8jAEEQayIBJAAgASAANgIIIAEgASgCCEIBEB42AgQCQCABKAIERQRAIAFBADoADwwBCyABIAEoAgQtAAA6AA8LIAEtAA8hACABQRBqJAAgAAucBgECfyMAQSBrIgIkACACIAA2AhggAiABNwMQAkAgAikDECACKAIYKQMwWgRAIAIoAhhBCGpBEkEAEBQgAkF/NgIcDAELIAIoAhgoAhhBAnEEQCACKAIYQQhqQRlBABAUIAJBfzYCHAwBCyACIAIoAhggAikDEEEAIAIoAhhBCGoQTSIANgIMIABFBEAgAkF/NgIcDAELIAIoAhgoAlAgAigCDCACKAIYQQhqEFlBAXFFBEAgAkF/NgIcDAELAn8gAigCGCEDIAIpAxAhASMAQTBrIgAkACAAIAM2AiggACABNwMgIABBATYCHAJAIAApAyAgACgCKCkDMFoEQCAAKAIoQQhqQRJBABAUIABBfzYCLAwBCwJAIAAoAhwNACAAKAIoKAJAIAApAyCnQQR0aigCBEUNACAAKAIoKAJAIAApAyCnQQR0aigCBCgCAEECcUUNAAJAIAAoAigoAkAgACkDIKdBBHRqKAIABEAgACAAKAIoIAApAyBBCCAAKAIoQQhqEE0iAzYCDCADRQRAIABBfzYCLAwECyAAIAAoAiggACgCDEEAQQAQWDcDEAJAIAApAxBCAFMNACAAKQMQIAApAyBRDQAgACgCKEEIakEKQQAQFCAAQX82AiwMBAsMAQsgAEEANgIMCyAAIAAoAiggACkDIEEAIAAoAihBCGoQTSIDNgIIIANFBEAgAEF/NgIsDAILIAAoAgwEQCAAKAIoKAJQIAAoAgwgACkDIEEAIAAoAihBCGoQdEEBcUUEQCAAQX82AiwMAwsLIAAoAigoAlAgACgCCCAAKAIoQQhqEFlBAXFFBEAgACgCKCgCUCAAKAIMQQAQWRogAEF/NgIsDAILCyAAKAIoKAJAIAApAyCnQQR0aigCBBA3IAAoAigoAkAgACkDIKdBBHRqQQA2AgQgACgCKCgCQCAAKQMgp0EEdGoQXiAAQQA2AiwLIAAoAiwhAyAAQTBqJAAgAwsEQCACQX82AhwMAQsgAigCGCgCQCACKQMQp0EEdGpBAToADCACQQA2AhwLIAIoAhwhACACQSBqJAAgAAulBAEBfyMAQTBrIgUkACAFIAA2AiggBSABNwMgIAUgAjYCHCAFIAM6ABsgBSAENgIUAkAgBSgCKCAFKQMgQQBBABA/RQRAIAVBfzYCLAwBCyAFKAIoKAIYQQJxBEAgBSgCKEEIakEZQQAQFCAFQX82AiwMAQsgBSAFKAIoKAJAIAUpAyCnQQR0ajYCECAFAn8gBSgCECgCAARAIAUoAhAoAgAvAQhBCHYMAQtBAws6AAsgBQJ/IAUoAhAoAgAEQCAFKAIQKAIAKAJEDAELQYCA2I14CzYCBEEBIQAgBSAFLQAbIAUtAAtGBH8gBSgCFCAFKAIERwVBAQtBAXE2AgwCQCAFKAIMBEAgBSgCECgCBEUEQCAFKAIQKAIAEEAhACAFKAIQIAA2AgQgAEUEQCAFKAIoQQhqQQ5BABAUIAVBfzYCLAwECwsgBSgCECgCBCAFKAIQKAIELwEIQf8BcSAFLQAbQQh0cjsBCCAFKAIQKAIEIAUoAhQ2AkQgBSgCECgCBCIAIAAoAgBBEHI2AgAMAQsgBSgCECgCBARAIAUoAhAoAgQiACAAKAIAQW9xNgIAAkAgBSgCECgCBCgCAEUEQCAFKAIQKAIEEDcgBSgCEEEANgIEDAELIAUoAhAoAgQgBSgCECgCBC8BCEH/AXEgBS0AC0EIdHI7AQggBSgCECgCBCAFKAIENgJECwsLIAVBADYCLAsgBSgCLCEAIAVBMGokACAAC90PAgF/AX4jAEFAaiIEJAAgBCAANgI0IARCfzcDKCAEIAE2AiQgBCACNgIgIAQgAzYCHAJAIAQoAjQoAhhBAnEEQCAEKAI0QQhqQRlBABAUIARCfzcDOAwBCyAEIAQoAjQpAzA3AxAgBCkDKEJ/UQRAIARCfzcDCCAEKAIcQYDAAHEEQCAEIAQoAjQgBCgCJCAEKAIcQQAQWDcDCAsgBCkDCEJ/UQRAIAQoAjQhASMAQUBqIgAkACAAIAE2AjQCQCAAKAI0KQM4IAAoAjQpAzBCAXxYBEAgACAAKAI0KQM4NwMYIAAgACkDGEIBhjcDEAJAIAApAxBCEFQEQCAAQhA3AxAMAQsgACkDEEKACFYEQCAAQoAINwMQCwsgACAAKQMQIAApAxh8NwMYIAAgACkDGKdBBHStNwMIIAApAwggACgCNCkDOKdBBHStVARAIAAoAjRBCGpBDkEAEBQgAEJ/NwM4DAILIAAgACgCNCgCQCAAKQMYp0EEdBBONgIkIAAoAiRFBEAgACgCNEEIakEOQQAQFCAAQn83AzgMAgsgACgCNCAAKAIkNgJAIAAoAjQgACkDGDcDOAsgACgCNCIBKQMwIQUgASAFQgF8NwMwIAAgBTcDKCAAKAI0KAJAIAApAyinQQR0ahC1ASAAIAApAyg3AzgLIAApAzghBSAAQUBrJAAgBCAFNwMIIAVCAFMEQCAEQn83AzgMAwsLIAQgBCkDCDcDKAsCQCAEKAIkRQ0AIAQoAjQhASAEKQMoIQUgBCgCJCECIAQoAhwhAyMAQUBqIgAkACAAIAE2AjggACAFNwMwIAAgAjYCLCAAIAM2AigCQCAAKQMwIAAoAjgpAzBaBEAgACgCOEEIakESQQAQFCAAQX82AjwMAQsgACgCOCgCGEECcQRAIAAoAjhBCGpBGUEAEBQgAEF/NgI8DAELAkACQCAAKAIsRQ0AIAAoAiwsAABFDQAgACAAKAIsIAAoAiwQLkH//wNxIAAoAiggACgCOEEIahBQIgE2AiAgAUUEQCAAQX82AjwMAwsCQCAAKAIoQYAwcQ0AIAAoAiBBABA6QQNHDQAgACgCIEECNgIICwwBCyAAQQA2AiALIAAgACgCOCAAKAIsQQBBABBYIgU3AxACQCAFQgBTDQAgACkDECAAKQMwUQ0AIAAoAiAQJCAAKAI4QQhqQQpBABAUIABBfzYCPAwBCwJAIAApAxBCAFMNACAAKQMQIAApAzBSDQAgACgCIBAkIABBADYCPAwBCyAAIAAoAjgoAkAgACkDMKdBBHRqNgIkAkAgACgCJCgCAARAIAAgACgCJCgCACgCMCAAKAIgEIYBQQBHOgAfDAELIABBADoAHwsCQCAALQAfQQFxDQAgACgCJCgCBA0AIAAoAiQoAgAQQCEBIAAoAiQgATYCBCABRQRAIAAoAjhBCGpBDkEAEBQgACgCIBAkIABBfzYCPAwCCwsgAAJ/IAAtAB9BAXEEQCAAKAIkKAIAKAIwDAELIAAoAiALQQBBACAAKAI4QQhqEEYiATYCCCABRQRAIAAoAiAQJCAAQX82AjwMAQsCQCAAKAIkKAIEBEAgACAAKAIkKAIEKAIwNgIEDAELAkAgACgCJCgCAARAIAAgACgCJCgCACgCMDYCBAwBCyAAQQA2AgQLCwJAIAAoAgQEQCAAIAAoAgRBAEEAIAAoAjhBCGoQRiIBNgIMIAFFBEAgACgCIBAkIABBfzYCPAwDCwwBCyAAQQA2AgwLIAAoAjgoAlAgACgCCCAAKQMwQQAgACgCOEEIahB0QQFxRQRAIAAoAiAQJCAAQX82AjwMAQsgACgCDARAIAAoAjgoAlAgACgCDEEAEFkaCwJAIAAtAB9BAXEEQCAAKAIkKAIEBEAgACgCJCgCBCgCAEECcQRAIAAoAiQoAgQoAjAQJCAAKAIkKAIEIgEgASgCAEF9cTYCAAJAIAAoAiQoAgQoAgBFBEAgACgCJCgCBBA3IAAoAiRBADYCBAwBCyAAKAIkKAIEIAAoAiQoAgAoAjA2AjALCwsgACgCIBAkDAELIAAoAiQoAgQoAgBBAnEEQCAAKAIkKAIEKAIwECQLIAAoAiQoAgQiASABKAIAQQJyNgIAIAAoAiQoAgQgACgCIDYCMAsgAEEANgI8CyAAKAI8IQEgAEFAayQAIAFFDQAgBCgCNCkDMCAEKQMQUgRAIAQoAjQoAkAgBCkDKKdBBHRqEHcgBCgCNCAEKQMQNwMwCyAEQn83AzgMAQsgBCgCNCgCQCAEKQMop0EEdGoQXgJAIAQoAjQoAkAgBCkDKKdBBHRqKAIARQ0AIAQoAjQoAkAgBCkDKKdBBHRqKAIEBEAgBCgCNCgCQCAEKQMop0EEdGooAgQoAgBBAXENAQsgBCgCNCgCQCAEKQMop0EEdGooAgRFBEAgBCgCNCgCQCAEKQMop0EEdGooAgAQQCEAIAQoAjQoAkAgBCkDKKdBBHRqIAA2AgQgAEUEQCAEKAI0QQhqQQ5BABAUIARCfzcDOAwDCwsgBCgCNCgCQCAEKQMop0EEdGooAgRBfjYCECAEKAI0KAJAIAQpAyinQQR0aigCBCIAIAAoAgBBAXI2AgALIAQoAjQoAkAgBCkDKKdBBHRqIAQoAiA2AgggBCAEKQMoNwM4CyAEKQM4IQUgBEFAayQAIAULqgEBAX8jAEEwayICJAAgAiAANgIoIAIgATcDICACQQA2AhwCQAJAIAIoAigoAiRBAUYEQCACKAIcRQ0BIAIoAhxBAUYNASACKAIcQQJGDQELIAIoAihBDGpBEkEAEBQgAkF/NgIsDAELIAIgAikDIDcDCCACIAIoAhw2AhAgAkF/QQAgAigCKCACQQhqQhBBDBAgQgBTGzYCLAsgAigCLCEAIAJBMGokACAAC6UyAwZ/AX4BfCMAQeAAayIEJAAgBCAANgJYIAQgATYCVCAEIAI2AlACQAJAIAQoAlRBAE4EQCAEKAJYDQELIAQoAlBBEkEAEBQgBEEANgJcDAELIAQgBCgCVDYCTCMAQRBrIgAgBCgCWDYCDCAEIAAoAgwpAxg3A0BB4JoBKQMAQn9RBEAgBEF/NgIUIARBAzYCECAEQQc2AgwgBEEGNgIIIARBAjYCBCAEQQE2AgBB4JoBQQAgBBA0NwMAIARBfzYCNCAEQQ82AjAgBEENNgIsIARBDDYCKCAEQQo2AiQgBEEJNgIgQeiaAUEIIARBIGoQNDcDAAtB4JoBKQMAIAQpA0BB4JoBKQMAg1IEQCAEKAJQQRxBABAUIARBADYCXAwBC0HomgEpAwAgBCkDQEHomgEpAwCDUgRAIAQgBCgCTEEQcjYCTAsgBCgCTEEYcUEYRgRAIAQoAlBBGUEAEBQgBEEANgJcDAELIAQoAlghASAEKAJQIQIjAEHQAGsiACQAIAAgATYCSCAAIAI2AkQgAEEIahA7AkAgACgCSCAAQQhqEDkEQCMAQRBrIgEgACgCSDYCDCAAIAEoAgxBDGo2AgQjAEEQayIBIAAoAgQ2AgwCQCABKAIMKAIAQQVHDQAjAEEQayIBIAAoAgQ2AgwgASgCDCgCBEEsRw0AIABBADYCTAwCCyAAKAJEIAAoAgQQRSAAQX82AkwMAQsgAEEBNgJMCyAAKAJMIQEgAEHQAGokACAEIAE2AjwCQAJAAkAgBCgCPEEBag4CAAECCyAEQQA2AlwMAgsgBCgCTEEBcUUEQCAEKAJQQQlBABAUIARBADYCXAwCCyAEIAQoAlggBCgCTCAEKAJQEGk2AlwMAQsgBCgCTEECcQRAIAQoAlBBCkEAEBQgBEEANgJcDAELIAQoAlgQSEEASARAIAQoAlAgBCgCWBAXIARBADYCXAwBCwJAIAQoAkxBCHEEQCAEIAQoAlggBCgCTCAEKAJQEGk2AjgMAQsgBCgCWCEAIAQoAkwhASAEKAJQIQIjAEHwAGsiAyQAIAMgADYCaCADIAE2AmQgAyACNgJgIANBIGoQOwJAIAMoAmggA0EgahA5QQBIBEAgAygCYCADKAJoEBcgA0EANgJsDAELIAMpAyBCBINQBEAgAygCYEEEQYoBEBQgA0EANgJsDAELIAMgAykDODcDGCADIAMoAmggAygCZCADKAJgEGkiADYCXCAARQRAIANBADYCbAwBCwJAIAMpAxhQRQ0AIAMoAmgQngFBAXFFDQAgAyADKAJcNgJsDAELIAMoAlwhACADKQMYIQkjAEHgAGsiAiQAIAIgADYCWCACIAk3A1ACQCACKQNQQhZUBEAgAigCWEEIakETQQAQFCACQQA2AlwMAQsgAgJ+IAIpA1BCqoAEVARAIAIpA1AMAQtCqoAECzcDMCACKAJYKAIAQgAgAikDMH1BAhAnQQBIBEAjAEEQayIAIAIoAlgoAgA2AgwgAiAAKAIMQQxqNgIIAkACfyMAQRBrIgAgAigCCDYCDCAAKAIMKAIAQQRGCwRAIwBBEGsiACACKAIINgIMIAAoAgwoAgRBFkYNAQsgAigCWEEIaiACKAIIEEUgAkEANgJcDAILCyACIAIoAlgoAgAQSSIJNwM4IAlCAFMEQCACKAJYQQhqIAIoAlgoAgAQFyACQQA2AlwMAQsgAiACKAJYKAIAIAIpAzBBACACKAJYQQhqEEIiADYCDCAARQRAIAJBADYCXAwBCyACQn83AyAgAkEANgJMIAIpAzBCqoAEWgRAIAIoAgxCFBAsGgsgAkEQakETQQAQFCACIAIoAgxCABAeNgJEA0ACQCACKAJEIQEgAigCDBAwQhJ9pyEFIwBBIGsiACQAIAAgATYCGCAAIAU2AhQgAEHsEjYCECAAQQQ2AgwCQAJAIAAoAhQgACgCDE8EQCAAKAIMDQELIABBADYCHAwBCyAAIAAoAhhBAWs2AggDQAJAIAAgACgCCEEBaiAAKAIQLQAAIAAoAhggACgCCGsgACgCFCAAKAIMa2oQqwEiATYCCCABRQ0AIAAoAghBAWogACgCEEEBaiAAKAIMQQFrEE8NASAAIAAoAgg2AhwMAgsLIABBADYCHAsgACgCHCEBIABBIGokACACIAE2AkQgAUUNACACKAIMIAIoAkQCfyMAQRBrIgAgAigCDDYCDCAAKAIMKAIEC2usECwaIAIoAlghASACKAIMIQUgAikDOCEJIwBB8ABrIgAkACAAIAE2AmggACAFNgJkIAAgCTcDWCAAIAJBEGo2AlQjAEEQayIBIAAoAmQ2AgwgAAJ+IAEoAgwtAABBAXEEQCABKAIMKQMQDAELQgALNwMwAkAgACgCZBAwQhZUBEAgACgCVEETQQAQFCAAQQA2AmwMAQsgACgCZEIEEB4oAABB0JaVMEcEQCAAKAJUQRNBABAUIABBADYCbAwBCwJAAkAgACkDMEIUVA0AIwBBEGsiASAAKAJkNgIMIAEoAgwoAgQgACkDMKdqQRRrKAAAQdCWmThHDQAgACgCZCAAKQMwQhR9ECwaIAAoAmgoAgAhBSAAKAJkIQYgACkDWCEJIAAoAmgoAhQhByAAKAJUIQgjAEGwAWsiASQAIAEgBTYCqAEgASAGNgKkASABIAk3A5gBIAEgBzYClAEgASAINgKQASMAQRBrIgUgASgCpAE2AgwgAQJ+IAUoAgwtAABBAXEEQCAFKAIMKQMQDAELQgALNwMYIAEoAqQBQgQQHhogASABKAKkARAdQf//A3E2AhAgASABKAKkARAdQf//A3E2AgggASABKAKkARAxNwM4AkAgASkDOEL///////////8AVgRAIAEoApABQQRBFhAUIAFBADYCrAEMAQsgASkDOEI4fCABKQMYIAEpA5gBfFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELAkACQCABKQM4IAEpA5gBVA0AIAEpAzhCOHwgASkDmAECfiMAQRBrIgUgASgCpAE2AgwgBSgCDCkDCAt8Vg0AIAEoAqQBIAEpAzggASkDmAF9ECwaIAFBADoAFwwBCyABKAKoASABKQM4QQAQJ0EASARAIAEoApABIAEoAqgBEBcgAUEANgKsAQwCCyABIAEoAqgBQjggAUFAayABKAKQARBCIgU2AqQBIAVFBEAgAUEANgKsAQwCCyABQQE6ABcLIAEoAqQBQgQQHigAAEHQlpkwRwRAIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELIAEgASgCpAEQMTcDMAJAIAEoApQBQQRxRQ0AIAEpAzAgASkDOHxCDHwgASkDmAEgASkDGHxRDQAgASgCkAFBFUEAEBQgAS0AF0EBcQRAIAEoAqQBEBYLIAFBADYCrAEMAQsgASgCpAFCBBAeGiABIAEoAqQBECo2AgwgASABKAKkARAqNgIEIAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCGCABKAIUSQtBAXENAAsgASgCKEGCAiABKAIUIAEoAhhrazYCYCABKAIoKAJgIAEoAigoAnRLBEAgASgCKCABKAIoKAJ0NgJgCwsLAkAgASgCKCgCYEEDTwRAIAEgASgCKCgCYEEDazoAEyABQQE7ARAgASgCKCICKAKkLSACKAKgLUEBdGogAS8BEDsBACABLQATIQMgASgCKCICKAKYLSEEIAIgAigCoC0iAkEBajYCoC0gAiAEaiADOgAAIAEgAS8BEEEBazsBECABKAIoIAEtABNB0N0Aai0AAEECdGpBmAlqIgIgAi8BAEEBajsBACABKAIoQYgTagJ/IAEvARBBgAJJBEAgAS8BEC0A0FkMAQsgAS8BEEEHdkGAAmotANBZC0ECdGoiAiACLwEAQQFqOwEAIAEgASgCKCgCoC0gASgCKCgCnC1BAWtGNgIgIAEoAigiAiACKAJ0IAEoAigoAmBrNgJ0IAEoAigiAiABKAIoKAJgIAIoAmxqNgJsIAEoAihBADYCYAwBCyABIAEoAigiAigCOCACKAJsai0AADoADyABKAIoIgIoAqQtIAIoAqAtQQF0akEAOwEAIAEtAA8hAyABKAIoIgIoApgtIQQgAiACKAKgLSICQQFqNgKgLSACIARqIAM6AAAgASgCKCABLQAPQQJ0aiICIAIvAZQBQQFqOwGUASABIAEoAigoAqAtIAEoAigoApwtQQFrRjYCICABKAIoIgIgAigCdEEBazYCdCABKAIoIgIgAigCbEEBajYCbAsgASgCIARAIAEoAigCfyABKAIoKAJcQQBOBEAgASgCKCgCOCABKAIoKAJcagwBC0EACyABKAIoKAJsIAEoAigoAlxrQQAQKCABKAIoIAEoAigoAmw2AlwgASgCKCgCABAcIAEoAigoAgAoAhBFBEAgAUEANgIsDAQLCwwBCwsgASgCKEEANgK0LSABKAIkQQRGBEAgASgCKAJ/IAEoAigoAlxBAE4EQCABKAIoKAI4IAEoAigoAlxqDAELQQALIAEoAigoAmwgASgCKCgCXGtBARAoIAEoAiggASgCKCgCbDYCXCABKAIoKAIAEBwgASgCKCgCACgCEEUEQCABQQI2AiwMAgsgAUEDNgIsDAELIAEoAigoAqAtBEAgASgCKAJ/IAEoAigoAlxBAE4EQCABKAIoKAI4IAEoAigoAlxqDAELQQALIAEoAigoAmwgASgCKCgCXGtBABAoIAEoAiggASgCKCgCbDYCXCABKAIoKAIAEBwgASgCKCgCACgCEEUEQCABQQA2AiwMAgsLIAFBATYCLAsgASgCLCECIAFBMGokACACDAELIAAoAiwgACgCNCAAKAIsKAKEAUEMbEGA7wBqKAIIEQMACwsLNgIEAkAgACgCBEECRwRAIAAoAgRBA0cNAQsgACgCLEGaBTYCBAsCQCAAKAIEBEAgACgCBEECRw0BCyAAKAI4KAIQRQRAIAAoAixBfzYCKAsgAEEANgI8DAILIAAoAgRBAUYEQAJAIAAoAjRBAUYEQCAAKAIsIQIjAEEgayIBJAAgASACNgIcIAFBAzYCGAJAIAEoAhwoArwtQRAgASgCGGtKBEAgAUECNgIUIAEoAhwiAiACLwG4LSABKAIUQf//A3EgASgCHCgCvC10cjsBuC0gASgCHC8BuC1B/wFxIQMgASgCHCgCCCEEIAEoAhwiBigCFCECIAYgAkEBajYCFCACIARqIAM6AAAgASgCHC8BuC1BCHYhAyABKAIcKAIIIQQgASgCHCIGKAIUIQIgBiACQQFqNgIUIAIgBGogAzoAACABKAIcIAEoAhRB//8DcUEQIAEoAhwoArwta3U7AbgtIAEoAhwiAiACKAK8LSABKAIYQRBrajYCvC0MAQsgASgCHCICIAIvAbgtQQIgASgCHCgCvC10cjsBuC0gASgCHCICIAEoAhggAigCvC1qNgK8LQsgAUGS6AAvAQA2AhACQCABKAIcKAK8LUEQIAEoAhBrSgRAIAFBkOgALwEANgIMIAEoAhwiAiACLwG4LSABKAIMQf//A3EgASgCHCgCvC10cjsBuC0gASgCHC8BuC1B/wFxIQMgASgCHCgCCCEEIAEoAhwiBigCFCECIAYgAkEBajYCFCACIARqIAM6AAAgASgCHC8BuC1BCHYhAyABKAIcKAIIIQQgASgCHCIGKAIUIQIgBiACQQFqNgIUIAIgBGogAzoAACABKAIcIAEoAgxB//8DcUEQIAEoAhwoArwta3U7AbgtIAEoAhwiAiACKAK8LSABKAIQQRBrajYCvC0MAQsgASgCHCICIAIvAbgtQZDoAC8BACABKAIcKAK8LXRyOwG4LSABKAIcIgIgASgCECACKAK8LWo2ArwtCyABKAIcELwBIAFBIGokAAwBCyAAKAI0QQVHBEAgACgCLEEAQQBBABBdIAAoAjRBA0YEQCAAKAIsKAJEIAAoAiwoAkxBAWtBAXRqQQA7AQAgACgCLCgCREEAIAAoAiwoAkxBAWtBAXQQMyAAKAIsKAJ0RQRAIAAoAixBADYCbCAAKAIsQQA2AlwgACgCLEEANgK0LQsLCwsgACgCOBAcIAAoAjgoAhBFBEAgACgCLEF/NgIoIABBADYCPAwDCwsLIAAoAjRBBEcEQCAAQQA2AjwMAQsgACgCLCgCGEEATARAIABBATYCPAwBCwJAIAAoAiwoAhhBAkYEQCAAKAI4KAIwQf8BcSECIAAoAiwoAgghAyAAKAIsIgQoAhQhASAEIAFBAWo2AhQgASADaiACOgAAIAAoAjgoAjBBCHZB/wFxIQIgACgCLCgCCCEDIAAoAiwiBCgCFCEBIAQgAUEBajYCFCABIANqIAI6AAAgACgCOCgCMEEQdkH/AXEhAiAAKAIsKAIIIQMgACgCLCIEKAIUIQEgBCABQQFqNgIUIAEgA2ogAjoAACAAKAI4KAIwQRh2IQIgACgCLCgCCCEDIAAoAiwiBCgCFCEBIAQgAUEBajYCFCABIANqIAI6AAAgACgCOCgCCEH/AXEhAiAAKAIsKAIIIQMgACgCLCIEKAIUIQEgBCABQQFqNgIUIAEgA2ogAjoAACAAKAI4KAIIQQh2Qf8BcSECIAAoAiwoAgghAyAAKAIsIgQoAhQhASAEIAFBAWo2AhQgASADaiACOgAAIAAoAjgoAghBEHZB/wFxIQIgACgCLCgCCCEDIAAoAiwiBCgCFCEBIAQgAUEBajYCFCABIANqIAI6AAAgACgCOCgCCEEYdiECIAAoAiwoAgghAyAAKAIsIgQoAhQhASAEIAFBAWo2AhQgASADaiACOgAADAELIAAoAiwgACgCOCgCMEEQdhBLIAAoAiwgACgCOCgCMEH//wNxEEsLIAAoAjgQHCAAKAIsKAIYQQBKBEAgACgCLEEAIAAoAiwoAhhrNgIYCyAAIAAoAiwoAhRFNgI8CyAAKAI8IQEgAEFAayQAIAUgATYCCAwBCyAFKAIMQRBqIQEjAEHgAGsiACQAIAAgATYCWCAAQQI2AlQCQAJAAkAgACgCWBBKDQAgACgCWCgCDEUNACAAKAJYKAIADQEgACgCWCgCBEUNAQsgAEF+NgJcDAELIAAgACgCWCgCHDYCUCAAKAJQKAIEQb/+AEYEQCAAKAJQQcD+ADYCBAsgACAAKAJYKAIMNgJIIAAgACgCWCgCEDYCQCAAIAAoAlgoAgA2AkwgACAAKAJYKAIENgJEIAAgACgCUCgCPDYCPCAAIAAoAlAoAkA2AjggACAAKAJENgI0IAAgACgCQDYCMCAAQQA2AhADQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAJQKAIEQbT+AGsOHwABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fCyAAKAJQKAIMRQRAIAAoAlBBwP4ANgIEDCELA0AgACgCOEEQSQRAIAAoAkRFDSEgACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLAkAgACgCUCgCDEECcUUNACAAKAI8QZ+WAkcNACAAKAJQKAIoRQRAIAAoAlBBDzYCKAtBAEEAQQAQGiEBIAAoAlAgATYCHCAAIAAoAjw6AAwgACAAKAI8QQh2OgANIAAoAlAoAhwgAEEMakECEBohASAAKAJQIAE2AhwgAEEANgI8IABBADYCOCAAKAJQQbX+ADYCBAwhCyAAKAJQQQA2AhQgACgCUCgCJARAIAAoAlAoAiRBfzYCMAsCQCAAKAJQKAIMQQFxBEAgACgCPEH/AXFBCHQgACgCPEEIdmpBH3BFDQELIAAoAlhBmgw2AhggACgCUEHR/gA2AgQMIQsgACgCPEEPcUEIRwRAIAAoAlhBmw82AhggACgCUEHR/gA2AgQMIQsgACAAKAI8QQR2NgI8IAAgACgCOEEEazYCOCAAIAAoAjxBD3FBCGo2AhQgACgCUCgCKEUEQCAAKAJQIAAoAhQ2AigLAkAgACgCFEEPTQRAIAAoAhQgACgCUCgCKE0NAQsgACgCWEGTDTYCGCAAKAJQQdH+ADYCBAwhCyAAKAJQQQEgACgCFHQ2AhhBAEEAQQAQPSEBIAAoAlAgATYCHCAAKAJYIAE2AjAgACgCUEG9/gBBv/4AIAAoAjxBgARxGzYCBCAAQQA2AjwgAEEANgI4DCALA0AgACgCOEEQSQRAIAAoAkRFDSAgACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLIAAoAlAgACgCPDYCFCAAKAJQKAIUQf8BcUEIRwRAIAAoAlhBmw82AhggACgCUEHR/gA2AgQMIAsgACgCUCgCFEGAwANxBEAgACgCWEGgCTYCGCAAKAJQQdH+ADYCBAwgCyAAKAJQKAIkBEAgACgCUCgCJCAAKAI8QQh2QQFxNgIACwJAIAAoAlAoAhRBgARxRQ0AIAAoAlAoAgxBBHFFDQAgACAAKAI8OgAMIAAgACgCPEEIdjoADSAAKAJQKAIcIABBDGpBAhAaIQEgACgCUCABNgIcCyAAQQA2AjwgAEEANgI4IAAoAlBBtv4ANgIECwNAIAAoAjhBIEkEQCAAKAJERQ0fIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAKAJQKAIkBEAgACgCUCgCJCAAKAI8NgIECwJAIAAoAlAoAhRBgARxRQ0AIAAoAlAoAgxBBHFFDQAgACAAKAI8OgAMIAAgACgCPEEIdjoADSAAIAAoAjxBEHY6AA4gACAAKAI8QRh2OgAPIAAoAlAoAhwgAEEMakEEEBohASAAKAJQIAE2AhwLIABBADYCPCAAQQA2AjggACgCUEG3/gA2AgQLA0AgACgCOEEQSQRAIAAoAkRFDR4gACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLIAAoAlAoAiQEQCAAKAJQKAIkIAAoAjxB/wFxNgIIIAAoAlAoAiQgACgCPEEIdjYCDAsCQCAAKAJQKAIUQYAEcUUNACAAKAJQKAIMQQRxRQ0AIAAgACgCPDoADCAAIAAoAjxBCHY6AA0gACgCUCgCHCAAQQxqQQIQGiEBIAAoAlAgATYCHAsgAEEANgI8IABBADYCOCAAKAJQQbj+ADYCBAsCQCAAKAJQKAIUQYAIcQRAA0AgACgCOEEQSQRAIAAoAkRFDR8gACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLIAAoAlAgACgCPDYCRCAAKAJQKAIkBEAgACgCUCgCJCAAKAI8NgIUCwJAIAAoAlAoAhRBgARxRQ0AIAAoAlAoAgxBBHFFDQAgACAAKAI8OgAMIAAgACgCPEEIdjoADSAAKAJQKAIcIABBDGpBAhAaIQEgACgCUCABNgIcCyAAQQA2AjwgAEEANgI4DAELIAAoAlAoAiQEQCAAKAJQKAIkQQA2AhALCyAAKAJQQbn+ADYCBAsgACgCUCgCFEGACHEEQCAAIAAoAlAoAkQ2AiwgACgCLCAAKAJESwRAIAAgACgCRDYCLAsgACgCLARAAkAgACgCUCgCJEUNACAAKAJQKAIkKAIQRQ0AIAAgACgCUCgCJCgCFCAAKAJQKAJEazYCFCAAKAJQKAIkKAIQIAAoAhRqIAAoAkwCfyAAKAJQKAIkKAIYIAAoAhQgACgCLGpJBEAgACgCUCgCJCgCGCAAKAIUawwBCyAAKAIsCxAZGgsCQCAAKAJQKAIUQYAEcUUNACAAKAJQKAIMQQRxRQ0AIAAoAlAoAhwgACgCTCAAKAIsEBohASAAKAJQIAE2AhwLIAAgACgCRCAAKAIsazYCRCAAIAAoAiwgACgCTGo2AkwgACgCUCIBIAEoAkQgACgCLGs2AkQLIAAoAlAoAkQNGwsgACgCUEEANgJEIAAoAlBBuv4ANgIECwJAIAAoAlAoAhRBgBBxBEAgACgCREUNGyAAQQA2AiwDQCAAKAJMIQEgACAAKAIsIgJBAWo2AiwgACABIAJqLQAANgIUAkAgACgCUCgCJEUNACAAKAJQKAIkKAIcRQ0AIAAoAlAoAkQgACgCUCgCJCgCIE8NACAAKAIUIQIgACgCUCgCJCgCHCEDIAAoAlAiBCgCRCEBIAQgAUEBajYCRCABIANqIAI6AAALIAAoAhQEfyAAKAIsIAAoAkRJBUEAC0EBcQ0ACwJAIAAoAlAoAhRBgARxRQ0AIAAoAlAoAgxBBHFFDQAgACgCUCgCHCAAKAJMIAAoAiwQGiEBIAAoAlAgATYCHAsgACAAKAJEIAAoAixrNgJEIAAgACgCLCAAKAJMajYCTCAAKAIUDRsMAQsgACgCUCgCJARAIAAoAlAoAiRBADYCHAsLIAAoAlBBADYCRCAAKAJQQbv+ADYCBAsCQCAAKAJQKAIUQYAgcQRAIAAoAkRFDRogAEEANgIsA0AgACgCTCEBIAAgACgCLCICQQFqNgIsIAAgASACai0AADYCFAJAIAAoAlAoAiRFDQAgACgCUCgCJCgCJEUNACAAKAJQKAJEIAAoAlAoAiQoAihPDQAgACgCFCECIAAoAlAoAiQoAiQhAyAAKAJQIgQoAkQhASAEIAFBAWo2AkQgASADaiACOgAACyAAKAIUBH8gACgCLCAAKAJESQVBAAtBAXENAAsCQCAAKAJQKAIUQYAEcUUNACAAKAJQKAIMQQRxRQ0AIAAoAlAoAhwgACgCTCAAKAIsEBohASAAKAJQIAE2AhwLIAAgACgCRCAAKAIsazYCRCAAIAAoAiwgACgCTGo2AkwgACgCFA0aDAELIAAoAlAoAiQEQCAAKAJQKAIkQQA2AiQLCyAAKAJQQbz+ADYCBAsgACgCUCgCFEGABHEEQANAIAAoAjhBEEkEQCAAKAJERQ0aIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCwJAIAAoAlAoAgxBBHFFDQAgACgCPCAAKAJQKAIcQf//A3FGDQAgACgCWEH7DDYCGCAAKAJQQdH+ADYCBAwaCyAAQQA2AjwgAEEANgI4CyAAKAJQKAIkBEAgACgCUCgCJCAAKAJQKAIUQQl1QQFxNgIsIAAoAlAoAiRBATYCMAtBAEEAQQAQGiEBIAAoAlAgATYCHCAAKAJYIAE2AjAgACgCUEG//gA2AgQMGAsDQCAAKAI4QSBJBEAgACgCREUNGCAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACgCUCAAKAI8QQh2QYD+A3EgACgCPEEYdmogACgCPEGA/gNxQQh0aiAAKAI8Qf8BcUEYdGoiATYCHCAAKAJYIAE2AjAgAEEANgI8IABBADYCOCAAKAJQQb7+ADYCBAsgACgCUCgCEEUEQCAAKAJYIAAoAkg2AgwgACgCWCAAKAJANgIQIAAoAlggACgCTDYCACAAKAJYIAAoAkQ2AgQgACgCUCAAKAI8NgI8IAAoAlAgACgCODYCQCAAQQI2AlwMGAtBAEEAQQAQPSEBIAAoAlAgATYCHCAAKAJYIAE2AjAgACgCUEG//gA2AgQLIAAoAlRBBUYNFCAAKAJUQQZGDRQLIAAoAlAoAggEQCAAIAAoAjwgACgCOEEHcXY2AjwgACAAKAI4IAAoAjhBB3FrNgI4IAAoAlBBzv4ANgIEDBULA0AgACgCOEEDSQRAIAAoAkRFDRUgACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLIAAoAlAgACgCPEEBcTYCCCAAIAAoAjxBAXY2AjwgACAAKAI4QQFrNgI4AkACQAJAAkACQCAAKAI8QQNxDgQAAQIDBAsgACgCUEHB/gA2AgQMAwsjAEEQayIBIAAoAlA2AgwgASgCDEGw8gA2AlAgASgCDEEJNgJYIAEoAgxBsIIBNgJUIAEoAgxBBTYCXCAAKAJQQcf+ADYCBCAAKAJUQQZGBEAgACAAKAI8QQJ2NgI8IAAgACgCOEECazYCOAwXCwwCCyAAKAJQQcT+ADYCBAwBCyAAKAJYQfANNgIYIAAoAlBB0f4ANgIECyAAIAAoAjxBAnY2AjwgACAAKAI4QQJrNgI4DBQLIAAgACgCPCAAKAI4QQdxdjYCPCAAIAAoAjggACgCOEEHcWs2AjgDQCAAKAI4QSBJBEAgACgCREUNFCAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACgCPEH//wNxIAAoAjxBEHZB//8Dc0cEQCAAKAJYQaEKNgIYIAAoAlBB0f4ANgIEDBQLIAAoAlAgACgCPEH//wNxNgJEIABBADYCPCAAQQA2AjggACgCUEHC/gA2AgQgACgCVEEGRg0SCyAAKAJQQcP+ADYCBAsgACAAKAJQKAJENgIsIAAoAiwEQCAAKAIsIAAoAkRLBEAgACAAKAJENgIsCyAAKAIsIAAoAkBLBEAgACAAKAJANgIsCyAAKAIsRQ0RIAAoAkggACgCTCAAKAIsEBkaIAAgACgCRCAAKAIsazYCRCAAIAAoAiwgACgCTGo2AkwgACAAKAJAIAAoAixrNgJAIAAgACgCLCAAKAJIajYCSCAAKAJQIgEgASgCRCAAKAIsazYCRAwSCyAAKAJQQb/+ADYCBAwRCwNAIAAoAjhBDkkEQCAAKAJERQ0RIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAKAJQIAAoAjxBH3FBgQJqNgJkIAAgACgCPEEFdjYCPCAAIAAoAjhBBWs2AjggACgCUCAAKAI8QR9xQQFqNgJoIAAgACgCPEEFdjYCPCAAIAAoAjhBBWs2AjggACgCUCAAKAI8QQ9xQQRqNgJgIAAgACgCPEEEdjYCPCAAIAAoAjhBBGs2AjgCQCAAKAJQKAJkQZ4CTQRAIAAoAlAoAmhBHk0NAQsgACgCWEH9CTYCGCAAKAJQQdH+ADYCBAwRCyAAKAJQQQA2AmwgACgCUEHF/gA2AgQLA0AgACgCUCgCbCAAKAJQKAJgSQRAA0AgACgCOEEDSQRAIAAoAkRFDRIgACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLIAAoAjxBB3EhAiAAKAJQQfQAaiEDIAAoAlAiBCgCbCEBIAQgAUEBajYCbCABQQF0QYDyAGovAQBBAXQgA2ogAjsBACAAIAAoAjxBA3Y2AjwgACAAKAI4QQNrNgI4DAELCwNAIAAoAlAoAmxBE0kEQCAAKAJQQfQAaiECIAAoAlAiAygCbCEBIAMgAUEBajYCbCABQQF0QYDyAGovAQBBAXQgAmpBADsBAAwBCwsgACgCUCAAKAJQQbQKajYCcCAAKAJQIAAoAlAoAnA2AlAgACgCUEEHNgJYIABBACAAKAJQQfQAakETIAAoAlBB8ABqIAAoAlBB2ABqIAAoAlBB9AVqEHU2AhAgACgCEARAIAAoAlhBhwk2AhggACgCUEHR/gA2AgQMEAsgACgCUEEANgJsIAAoAlBBxv4ANgIECwNAAkAgACgCUCgCbCAAKAJQKAJkIAAoAlAoAmhqTw0AA0ACQCAAIAAoAlAoAlAgACgCPEEBIAAoAlAoAlh0QQFrcUECdGooAQA2ASAgAC0AISAAKAI4TQ0AIAAoAkRFDREgACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLAkAgAC8BIkEQSQRAIAAgACgCPCAALQAhdjYCPCAAIAAoAjggAC0AIWs2AjggAC8BIiECIAAoAlBB9ABqIQMgACgCUCIEKAJsIQEgBCABQQFqNgJsIAFBAXQgA2ogAjsBAAwBCwJAIAAvASJBEEYEQANAIAAoAjggAC0AIUECakkEQCAAKAJERQ0UIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAIAAoAjwgAC0AIXY2AjwgACAAKAI4IAAtACFrNgI4IAAoAlAoAmxFBEAgACgCWEHPCTYCGCAAKAJQQdH+ADYCBAwECyAAIAAoAlAgACgCUCgCbEEBdGovAXI2AhQgACAAKAI8QQNxQQNqNgIsIAAgACgCPEECdjYCPCAAIAAoAjhBAms2AjgMAQsCQCAALwEiQRFGBEADQCAAKAI4IAAtACFBA2pJBEAgACgCREUNFSAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACAAKAI8IAAtACF2NgI8IAAgACgCOCAALQAhazYCOCAAQQA2AhQgACAAKAI8QQdxQQNqNgIsIAAgACgCPEEDdjYCPCAAIAAoAjhBA2s2AjgMAQsDQCAAKAI4IAAtACFBB2pJBEAgACgCREUNFCAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACAAKAI8IAAtACF2NgI8IAAgACgCOCAALQAhazYCOCAAQQA2AhQgACAAKAI8Qf8AcUELajYCLCAAIAAoAjxBB3Y2AjwgACAAKAI4QQdrNgI4CwsgACgCUCgCbCAAKAIsaiAAKAJQKAJkIAAoAlAoAmhqSwRAIAAoAlhBzwk2AhggACgCUEHR/gA2AgQMAgsDQCAAIAAoAiwiAUEBazYCLCABBEAgACgCFCECIAAoAlBB9ABqIQMgACgCUCIEKAJsIQEgBCABQQFqNgJsIAFBAXQgA2ogAjsBAAwBCwsLDAELCyAAKAJQKAIEQdH+AEYNDiAAKAJQLwH0BEUEQCAAKAJYQfULNgIYIAAoAlBB0f4ANgIEDA8LIAAoAlAgACgCUEG0Cmo2AnAgACgCUCAAKAJQKAJwNgJQIAAoAlBBCTYCWCAAQQEgACgCUEH0AGogACgCUCgCZCAAKAJQQfAAaiAAKAJQQdgAaiAAKAJQQfQFahB1NgIQIAAoAhAEQCAAKAJYQesINgIYIAAoAlBB0f4ANgIEDA8LIAAoAlAgACgCUCgCcDYCVCAAKAJQQQY2AlwgAEECIAAoAlBB9ABqIAAoAlAoAmRBAXRqIAAoAlAoAmggACgCUEHwAGogACgCUEHcAGogACgCUEH0BWoQdTYCECAAKAIQBEAgACgCWEG5CTYCGCAAKAJQQdH+ADYCBAwPCyAAKAJQQcf+ADYCBCAAKAJUQQZGDQ0LIAAoAlBByP4ANgIECwJAIAAoAkRBBkkNACAAKAJAQYICSQ0AIAAoAlggACgCSDYCDCAAKAJYIAAoAkA2AhAgACgCWCAAKAJMNgIAIAAoAlggACgCRDYCBCAAKAJQIAAoAjw2AjwgACgCUCAAKAI4NgJAIAAoAjAhAiMAQeAAayIBIAAoAlg2AlwgASACNgJYIAEgASgCXCgCHDYCVCABIAEoAlwoAgA2AlAgASABKAJQIAEoAlwoAgRBBWtqNgJMIAEgASgCXCgCDDYCSCABIAEoAkggASgCWCABKAJcKAIQa2s2AkQgASABKAJIIAEoAlwoAhBBgQJrajYCQCABIAEoAlQoAiw2AjwgASABKAJUKAIwNgI4IAEgASgCVCgCNDYCNCABIAEoAlQoAjg2AjAgASABKAJUKAI8NgIsIAEgASgCVCgCQDYCKCABIAEoAlQoAlA2AiQgASABKAJUKAJUNgIgIAFBASABKAJUKAJYdEEBazYCHCABQQEgASgCVCgCXHRBAWs2AhgDQCABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiQgASgCLCABKAIccUECdGooAQA2ARACQAJAA0AgASABLQARNgIMIAEgASgCLCABKAIMdjYCLCABIAEoAiggASgCDGs2AiggASABLQAQNgIMIAEoAgxFBEAgAS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyAB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AG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8="; - if (!isDataURI(wasmBinaryFile)) { - wasmBinaryFile = locateFile(wasmBinaryFile); - } - function getBinary(file) { - try { - if (file == wasmBinaryFile && wasmBinary) { - return new Uint8Array(wasmBinary); - } - var binary = tryParseAsDataURI(file); - if (binary) { - return binary; - } - if (readBinary) { - return readBinary(file); - } else { - throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"; - } - } catch (err2) { - abort(err2); - } - } - function instantiateSync(file, info) { - var instance; - var module2; - var binary; - try { - binary = getBinary(file); - module2 = new WebAssembly.Module(binary); - instance = new WebAssembly.Instance(module2, info); - } catch (e) { - var str = e.toString(); - err("failed to compile wasm module: " + str); - if (str.includes("imported Memory") || str.includes("memory import")) { - err( - "Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)." - ); - } - throw e; - } - return [instance, module2]; - } - function createWasm() { - var info = { a: asmLibraryArg }; - function receiveInstance(instance, module2) { - var exports3 = instance.exports; - Module["asm"] = exports3; - wasmMemory = Module["asm"]["u"]; - updateGlobalBufferAndViews(wasmMemory.buffer); - wasmTable = Module["asm"]["pa"]; - addOnInit(Module["asm"]["v"]); - removeRunDependency(); - } - addRunDependency(); - if (Module["instantiateWasm"]) { - try { - var exports2 = Module["instantiateWasm"](info, receiveInstance); - return exports2; - } catch (e) { - err("Module.instantiateWasm callback failed with error: " + e); - return false; - } - } - var result = instantiateSync(wasmBinaryFile, info); - receiveInstance(result[0]); - return Module["asm"]; - } - var tempDouble; - var tempI64; - function callRuntimeCallbacks(callbacks) { - while (callbacks.length > 0) { - var callback = callbacks.shift(); - if (typeof callback == "function") { - callback(Module); - continue; - } - var func = callback.func; - if (typeof func === "number") { - if (callback.arg === void 0) { - wasmTable.get(func)(); - } else { - wasmTable.get(func)(callback.arg); - } - } else { - func(callback.arg === void 0 ? null : callback.arg); - } - } - } - function _gmtime_r(time, tmPtr) { - var date = new Date(HEAP32[time >> 2] * 1e3); - HEAP32[tmPtr >> 2] = date.getUTCSeconds(); - HEAP32[tmPtr + 4 >> 2] = date.getUTCMinutes(); - HEAP32[tmPtr + 8 >> 2] = date.getUTCHours(); - HEAP32[tmPtr + 12 >> 2] = date.getUTCDate(); - HEAP32[tmPtr + 16 >> 2] = date.getUTCMonth(); - HEAP32[tmPtr + 20 >> 2] = date.getUTCFullYear() - 1900; - HEAP32[tmPtr + 24 >> 2] = date.getUTCDay(); - HEAP32[tmPtr + 36 >> 2] = 0; - HEAP32[tmPtr + 32 >> 2] = 0; - var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); - var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; - HEAP32[tmPtr + 28 >> 2] = yday; - if (!_gmtime_r.GMTString) - _gmtime_r.GMTString = allocateUTF8("GMT"); - HEAP32[tmPtr + 40 >> 2] = _gmtime_r.GMTString; - return tmPtr; - } - function ___gmtime_r(a0, a1) { - return _gmtime_r(a0, a1); - } - var PATH = { - splitPath: function(filename) { - var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; - return splitPathRe.exec(filename).slice(1); - }, - normalizeArray: function(parts, allowAboveRoot) { - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === ".") { - parts.splice(i, 1); - } else if (last === "..") { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } - if (allowAboveRoot) { - for (; up; up--) { - parts.unshift(".."); - } - } - return parts; - }, - normalize: function(path) { - var isAbsolute = path.charAt(0) === "/", trailingSlash = path.substr(-1) === "/"; - path = PATH.normalizeArray( - path.split("/").filter(function(p) { - return !!p; - }), - !isAbsolute - ).join("/"); - if (!path && !isAbsolute) { - path = "."; - } - if (path && trailingSlash) { - path += "/"; - } - return (isAbsolute ? "/" : "") + path; - }, - dirname: function(path) { - var result = PATH.splitPath(path), root = result[0], dir = result[1]; - if (!root && !dir) { - return "."; - } - if (dir) { - dir = dir.substr(0, dir.length - 1); - } - return root + dir; - }, - basename: function(path) { - if (path === "/") - return "/"; - path = PATH.normalize(path); - path = path.replace(/\/$/, ""); - var lastSlash = path.lastIndexOf("/"); - if (lastSlash === -1) - return path; - return path.substr(lastSlash + 1); - }, - extname: function(path) { - return PATH.splitPath(path)[3]; - }, - join: function() { - var paths = Array.prototype.slice.call(arguments, 0); - return PATH.normalize(paths.join("/")); - }, - join2: function(l, r) { - return PATH.normalize(l + "/" + r); - } - }; - function getRandomDevice() { - { - try { - var crypto_module = require("crypto"); - return function() { - return crypto_module["randomBytes"](1)[0]; - }; - } catch (e) { - } - } - return function() { - abort("randomDevice"); - }; - } - var PATH_FS = { - resolve: function() { - var resolvedPath = "", resolvedAbsolute = false; - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = i >= 0 ? arguments[i] : FS.cwd(); - if (typeof path !== "string") { - throw new TypeError("Arguments to path.resolve must be strings"); - } else if (!path) { - return ""; - } - resolvedPath = path + "/" + resolvedPath; - resolvedAbsolute = path.charAt(0) === "/"; - } - resolvedPath = PATH.normalizeArray( - resolvedPath.split("/").filter(function(p) { - return !!p; - }), - !resolvedAbsolute - ).join("/"); - return (resolvedAbsolute ? "/" : "") + resolvedPath || "."; - }, - relative: function(from, to) { - from = PATH_FS.resolve(from).substr(1); - to = PATH_FS.resolve(to).substr(1); - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== "") - break; - } - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== "") - break; - } - if (start > end) - return []; - return arr.slice(start, end - start + 1); - } - var fromParts = trim(from.split("/")); - var toParts = trim(to.split("/")); - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push(".."); - } - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - return outputParts.join("/"); - } - }; - var TTY = { - ttys: [], - init: function() { - }, - shutdown: function() { - }, - register: function(dev, ops) { - TTY.ttys[dev] = { input: [], output: [], ops }; - FS.registerDevice(dev, TTY.stream_ops); - }, - stream_ops: { - open: function(stream) { - var tty = TTY.ttys[stream.node.rdev]; - if (!tty) { - throw new FS.ErrnoError(43); - } - stream.tty = tty; - stream.seekable = false; - }, - close: function(stream) { - stream.tty.ops.flush(stream.tty); - }, - flush: function(stream) { - stream.tty.ops.flush(stream.tty); - }, - read: function(stream, buffer2, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.get_char) { - throw new FS.ErrnoError(60); - } - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = stream.tty.ops.get_char(stream.tty); - } catch (e) { - throw new FS.ErrnoError(29); - } - if (result === void 0 && bytesRead === 0) { - throw new FS.ErrnoError(6); - } - if (result === null || result === void 0) - break; - bytesRead++; - buffer2[offset + i] = result; - } - if (bytesRead) { - stream.node.timestamp = Date.now(); - } - return bytesRead; - }, - write: function(stream, buffer2, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.put_char) { - throw new FS.ErrnoError(60); - } - try { - for (var i = 0; i < length; i++) { - stream.tty.ops.put_char(stream.tty, buffer2[offset + i]); - } - } catch (e) { - throw new FS.ErrnoError(29); - } - if (length) { - stream.node.timestamp = Date.now(); - } - return i; - } - }, - default_tty_ops: { - get_char: function(tty) { - if (!tty.input.length) { - var result = null; - { - var BUFSIZE = 256; - var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE); - var bytesRead = 0; - try { - bytesRead = nodeFS.readSync( - process.stdin.fd, - buf, - 0, - BUFSIZE, - null - ); - } catch (e) { - if (e.toString().includes("EOF")) - bytesRead = 0; - else - throw e; - } - if (bytesRead > 0) { - result = buf.slice(0, bytesRead).toString("utf-8"); - } else { - result = null; - } - } - if (!result) { - return null; - } - tty.input = intArrayFromString(result, true); - } - return tty.input.shift(); - }, - put_char: function(tty, val) { - if (val === null || val === 10) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = []; - } else { - if (val != 0) - tty.output.push(val); - } - }, - flush: function(tty) { - if (tty.output && tty.output.length > 0) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = []; - } - } - }, - default_tty1_ops: { - put_char: function(tty, val) { - if (val === null || val === 10) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = []; - } else { - if (val != 0) - tty.output.push(val); - } - }, - flush: function(tty) { - if (tty.output && tty.output.length > 0) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = []; - } - } - } - }; - function mmapAlloc(size) { - var alignedSize = alignMemory(size, 65536); - var ptr = _malloc(alignedSize); - while (size < alignedSize) - HEAP8[ptr + size++] = 0; - return ptr; - } - var MEMFS = { - ops_table: null, - mount: function(mount) { - return MEMFS.createNode(null, "/", 16384 | 511, 0); - }, - createNode: function(parent, name, mode, dev) { - if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { - throw new FS.ErrnoError(63); - } - if (!MEMFS.ops_table) { - MEMFS.ops_table = { - dir: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - lookup: MEMFS.node_ops.lookup, - mknod: MEMFS.node_ops.mknod, - rename: MEMFS.node_ops.rename, - unlink: MEMFS.node_ops.unlink, - rmdir: MEMFS.node_ops.rmdir, - readdir: MEMFS.node_ops.readdir, - symlink: MEMFS.node_ops.symlink - }, - stream: { llseek: MEMFS.stream_ops.llseek } - }, - file: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: { - llseek: MEMFS.stream_ops.llseek, - read: MEMFS.stream_ops.read, - write: MEMFS.stream_ops.write, - allocate: MEMFS.stream_ops.allocate, - mmap: MEMFS.stream_ops.mmap, - msync: MEMFS.stream_ops.msync - } - }, - link: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - readlink: MEMFS.node_ops.readlink - }, - stream: {} - }, - chrdev: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: FS.chrdev_stream_ops - } - }; - } - var node = FS.createNode(parent, name, mode, dev); - if (FS.isDir(node.mode)) { - node.node_ops = MEMFS.ops_table.dir.node; - node.stream_ops = MEMFS.ops_table.dir.stream; - node.contents = {}; - } else if (FS.isFile(node.mode)) { - node.node_ops = MEMFS.ops_table.file.node; - node.stream_ops = MEMFS.ops_table.file.stream; - node.usedBytes = 0; - node.contents = null; - } else if (FS.isLink(node.mode)) { - node.node_ops = MEMFS.ops_table.link.node; - node.stream_ops = MEMFS.ops_table.link.stream; - } else if (FS.isChrdev(node.mode)) { - node.node_ops = MEMFS.ops_table.chrdev.node; - node.stream_ops = MEMFS.ops_table.chrdev.stream; - } - node.timestamp = Date.now(); - if (parent) { - parent.contents[name] = node; - parent.timestamp = node.timestamp; - } - return node; - }, - getFileDataAsTypedArray: function(node) { - if (!node.contents) - return new Uint8Array(0); - if (node.contents.subarray) - return node.contents.subarray(0, node.usedBytes); - return new Uint8Array(node.contents); - }, - expandFileStorage: function(node, newCapacity) { - var prevCapacity = node.contents ? node.contents.length : 0; - if (prevCapacity >= newCapacity) - return; - var CAPACITY_DOUBLING_MAX = 1024 * 1024; - newCapacity = Math.max( - newCapacity, - prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0 - ); - if (prevCapacity != 0) - newCapacity = Math.max(newCapacity, 256); - var oldContents = node.contents; - node.contents = new Uint8Array(newCapacity); - if (node.usedBytes > 0) - node.contents.set(oldContents.subarray(0, node.usedBytes), 0); - }, - resizeFileStorage: function(node, newSize) { - if (node.usedBytes == newSize) - return; - if (newSize == 0) { - node.contents = null; - node.usedBytes = 0; - } else { - var oldContents = node.contents; - node.contents = new Uint8Array(newSize); - if (oldContents) { - node.contents.set( - oldContents.subarray(0, Math.min(newSize, node.usedBytes)) - ); - } - node.usedBytes = newSize; - } - }, - node_ops: { - getattr: function(node) { - var attr = {}; - attr.dev = FS.isChrdev(node.mode) ? node.id : 1; - attr.ino = node.id; - attr.mode = node.mode; - attr.nlink = 1; - attr.uid = 0; - attr.gid = 0; - attr.rdev = node.rdev; - if (FS.isDir(node.mode)) { - attr.size = 4096; - } else if (FS.isFile(node.mode)) { - attr.size = node.usedBytes; - } else if (FS.isLink(node.mode)) { - attr.size = node.link.length; - } else { - attr.size = 0; - } - attr.atime = new Date(node.timestamp); - attr.mtime = new Date(node.timestamp); - attr.ctime = new Date(node.timestamp); - attr.blksize = 4096; - attr.blocks = Math.ceil(attr.size / attr.blksize); - return attr; - }, - setattr: function(node, attr) { - if (attr.mode !== void 0) { - node.mode = attr.mode; - } - if (attr.timestamp !== void 0) { - node.timestamp = attr.timestamp; - } - if (attr.size !== void 0) { - MEMFS.resizeFileStorage(node, attr.size); - } - }, - lookup: function(parent, name) { - throw FS.genericErrors[44]; - }, - mknod: function(parent, name, mode, dev) { - return MEMFS.createNode(parent, name, mode, dev); - }, - rename: function(old_node, new_dir, new_name) { - if (FS.isDir(old_node.mode)) { - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name); - } catch (e) { - } - if (new_node) { - for (var i in new_node.contents) { - throw new FS.ErrnoError(55); - } - } - } - delete old_node.parent.contents[old_node.name]; - old_node.parent.timestamp = Date.now(); - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - new_dir.timestamp = old_node.parent.timestamp; - old_node.parent = new_dir; - }, - unlink: function(parent, name) { - delete parent.contents[name]; - parent.timestamp = Date.now(); - }, - rmdir: function(parent, name) { - var node = FS.lookupNode(parent, name); - for (var i in node.contents) { - throw new FS.ErrnoError(55); - } - delete parent.contents[name]; - parent.timestamp = Date.now(); - }, - readdir: function(node) { - var entries = [".", ".."]; - for (var key2 in node.contents) { - if (!node.contents.hasOwnProperty(key2)) { - continue; - } - entries.push(key2); - } - return entries; - }, - symlink: function(parent, newname, oldpath) { - var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); - node.link = oldpath; - return node; - }, - readlink: function(node) { - if (!FS.isLink(node.mode)) { - throw new FS.ErrnoError(28); - } - return node.link; - } - }, - stream_ops: { - read: function(stream, buffer2, offset, length, position) { - var contents = stream.node.contents; - if (position >= stream.node.usedBytes) - return 0; - var size = Math.min(stream.node.usedBytes - position, length); - if (size > 8 && contents.subarray) { - buffer2.set(contents.subarray(position, position + size), offset); - } else { - for (var i = 0; i < size; i++) - buffer2[offset + i] = contents[position + i]; - } - return size; - }, - write: function(stream, buffer2, offset, length, position, canOwn) { - if (buffer2.buffer === HEAP8.buffer) { - canOwn = false; - } - if (!length) - return 0; - var node = stream.node; - node.timestamp = Date.now(); - if (buffer2.subarray && (!node.contents || node.contents.subarray)) { - if (canOwn) { - node.contents = buffer2.subarray(offset, offset + length); - node.usedBytes = length; - return length; - } else if (node.usedBytes === 0 && position === 0) { - node.contents = buffer2.slice(offset, offset + length); - node.usedBytes = length; - return length; - } else if (position + length <= node.usedBytes) { - node.contents.set( - buffer2.subarray(offset, offset + length), - position - ); - return length; - } - } - MEMFS.expandFileStorage(node, position + length); - if (node.contents.subarray && buffer2.subarray) { - node.contents.set( - buffer2.subarray(offset, offset + length), - position - ); - } else { - for (var i = 0; i < length; i++) { - node.contents[position + i] = buffer2[offset + i]; - } - } - node.usedBytes = Math.max(node.usedBytes, position + length); - return length; - }, - llseek: function(stream, offset, whence) { - var position = offset; - if (whence === 1) { - position += stream.position; - } else if (whence === 2) { - if (FS.isFile(stream.node.mode)) { - position += stream.node.usedBytes; - } - } - if (position < 0) { - throw new FS.ErrnoError(28); - } - return position; - }, - allocate: function(stream, offset, length) { - MEMFS.expandFileStorage(stream.node, offset + length); - stream.node.usedBytes = Math.max( - stream.node.usedBytes, - offset + length - ); - }, - mmap: function(stream, address, length, position, prot, flags) { - if (address !== 0) { - throw new FS.ErrnoError(28); - } - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43); - } - var ptr; - var allocated; - var contents = stream.node.contents; - if (!(flags & 2) && contents.buffer === buffer) { - allocated = false; - ptr = contents.byteOffset; - } else { - if (position > 0 || position + length < contents.length) { - if (contents.subarray) { - contents = contents.subarray(position, position + length); - } else { - contents = Array.prototype.slice.call( - contents, - position, - position + length - ); - } - } - allocated = true; - ptr = mmapAlloc(length); - if (!ptr) { - throw new FS.ErrnoError(48); - } - HEAP8.set(contents, ptr); - } - return { ptr, allocated }; - }, - msync: function(stream, buffer2, offset, length, mmapFlags) { - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43); - } - if (mmapFlags & 2) { - return 0; - } - MEMFS.stream_ops.write( - stream, - buffer2, - 0, - length, - offset, - false - ); - return 0; - } - } - }; - var ERRNO_CODES = { - EPERM: 63, - ENOENT: 44, - ESRCH: 71, - EINTR: 27, - EIO: 29, - ENXIO: 60, - E2BIG: 1, - ENOEXEC: 45, - EBADF: 8, - ECHILD: 12, - EAGAIN: 6, - EWOULDBLOCK: 6, - ENOMEM: 48, - EACCES: 2, - EFAULT: 21, - ENOTBLK: 105, - EBUSY: 10, - EEXIST: 20, - EXDEV: 75, - ENODEV: 43, - ENOTDIR: 54, - EISDIR: 31, - EINVAL: 28, - ENFILE: 41, - EMFILE: 33, - ENOTTY: 59, - ETXTBSY: 74, - EFBIG: 22, - ENOSPC: 51, - ESPIPE: 70, - EROFS: 69, - EMLINK: 34, - EPIPE: 64, - EDOM: 18, - ERANGE: 68, - ENOMSG: 49, - EIDRM: 24, - ECHRNG: 106, - EL2NSYNC: 156, - EL3HLT: 107, - EL3RST: 108, - ELNRNG: 109, - EUNATCH: 110, - ENOCSI: 111, - EL2HLT: 112, - EDEADLK: 16, - ENOLCK: 46, - EBADE: 113, - EBADR: 114, - EXFULL: 115, - ENOANO: 104, - EBADRQC: 103, - EBADSLT: 102, - EDEADLOCK: 16, - EBFONT: 101, - ENOSTR: 100, - ENODATA: 116, - ETIME: 117, - ENOSR: 118, - ENONET: 119, - ENOPKG: 120, - EREMOTE: 121, - ENOLINK: 47, - EADV: 122, - ESRMNT: 123, - ECOMM: 124, - EPROTO: 65, - EMULTIHOP: 36, - EDOTDOT: 125, - EBADMSG: 9, - ENOTUNIQ: 126, - EBADFD: 127, - EREMCHG: 128, - ELIBACC: 129, - ELIBBAD: 130, - ELIBSCN: 131, - ELIBMAX: 132, - ELIBEXEC: 133, - ENOSYS: 52, - ENOTEMPTY: 55, - ENAMETOOLONG: 37, - ELOOP: 32, - EOPNOTSUPP: 138, - EPFNOSUPPORT: 139, - ECONNRESET: 15, - ENOBUFS: 42, - EAFNOSUPPORT: 5, - EPROTOTYPE: 67, - ENOTSOCK: 57, - ENOPROTOOPT: 50, - ESHUTDOWN: 140, - ECONNREFUSED: 14, - EADDRINUSE: 3, - ECONNABORTED: 13, - ENETUNREACH: 40, - ENETDOWN: 38, - ETIMEDOUT: 73, - EHOSTDOWN: 142, - EHOSTUNREACH: 23, - EINPROGRESS: 26, - EALREADY: 7, - EDESTADDRREQ: 17, - EMSGSIZE: 35, - EPROTONOSUPPORT: 66, - ESOCKTNOSUPPORT: 137, - EADDRNOTAVAIL: 4, - ENETRESET: 39, - EISCONN: 30, - ENOTCONN: 53, - ETOOMANYREFS: 141, - EUSERS: 136, - EDQUOT: 19, - ESTALE: 72, - ENOTSUP: 138, - ENOMEDIUM: 148, - EILSEQ: 25, - EOVERFLOW: 61, - ECANCELED: 11, - ENOTRECOVERABLE: 56, - EOWNERDEAD: 62, - ESTRPIPE: 135 - }; - var NODEFS = { - isWindows: false, - staticInit: function() { - NODEFS.isWindows = !!process.platform.match(/^win/); - var flags = { fs: fs.constants }; - if (flags["fs"]) { - flags = flags["fs"]; - } - NODEFS.flagsForNodeMap = { - 1024: flags["O_APPEND"], - 64: flags["O_CREAT"], - 128: flags["O_EXCL"], - 256: flags["O_NOCTTY"], - 0: flags["O_RDONLY"], - 2: flags["O_RDWR"], - 4096: flags["O_SYNC"], - 512: flags["O_TRUNC"], - 1: flags["O_WRONLY"] - }; - }, - bufferFrom: function(arrayBuffer) { - return Buffer["alloc"] ? Buffer.from(arrayBuffer) : new Buffer(arrayBuffer); - }, - convertNodeCode: function(e) { - var code = e.code; - return ERRNO_CODES[code]; - }, - mount: function(mount) { - return NODEFS.createNode(null, "/", NODEFS.getMode(mount.opts.root), 0); - }, - createNode: function(parent, name, mode, dev) { - if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) { - throw new FS.ErrnoError(28); - } - var node = FS.createNode(parent, name, mode); - node.node_ops = NODEFS.node_ops; - node.stream_ops = NODEFS.stream_ops; - return node; - }, - getMode: function(path) { - var stat; - try { - stat = fs.lstatSync(path); - if (NODEFS.isWindows) { - stat.mode = stat.mode | (stat.mode & 292) >> 2; - } - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - return stat.mode; - }, - realPath: function(node) { - var parts = []; - while (node.parent !== node) { - parts.push(node.name); - node = node.parent; - } - parts.push(node.mount.opts.root); - parts.reverse(); - return PATH.join.apply(null, parts); - }, - flagsForNode: function(flags) { - flags &= ~2097152; - flags &= ~2048; - flags &= ~32768; - flags &= ~524288; - var newFlags = 0; - for (var k in NODEFS.flagsForNodeMap) { - if (flags & k) { - newFlags |= NODEFS.flagsForNodeMap[k]; - flags ^= k; - } - } - if (!flags) { - return newFlags; - } else { - throw new FS.ErrnoError(28); - } - }, - node_ops: { - getattr: function(node) { - var path = NODEFS.realPath(node); - var stat; - try { - stat = fs.lstatSync(path); - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - if (NODEFS.isWindows && !stat.blksize) { - stat.blksize = 4096; - } - if (NODEFS.isWindows && !stat.blocks) { - stat.blocks = (stat.size + stat.blksize - 1) / stat.blksize | 0; - } - return { - dev: stat.dev, - ino: stat.ino, - mode: stat.mode, - nlink: stat.nlink, - uid: stat.uid, - gid: stat.gid, - rdev: stat.rdev, - size: stat.size, - atime: stat.atime, - mtime: stat.mtime, - ctime: stat.ctime, - blksize: stat.blksize, - blocks: stat.blocks - }; - }, - setattr: function(node, attr) { - var path = NODEFS.realPath(node); - try { - if (attr.mode !== void 0) { - fs.chmodSync(path, attr.mode); - node.mode = attr.mode; - } - if (attr.timestamp !== void 0) { - var date = new Date(attr.timestamp); - fs.utimesSync(path, date, date); - } - if (attr.size !== void 0) { - fs.truncateSync(path, attr.size); - } - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - }, - lookup: function(parent, name) { - var path = PATH.join2(NODEFS.realPath(parent), name); - var mode = NODEFS.getMode(path); - return NODEFS.createNode(parent, name, mode); - }, - mknod: function(parent, name, mode, dev) { - var node = NODEFS.createNode(parent, name, mode, dev); - var path = NODEFS.realPath(node); - try { - if (FS.isDir(node.mode)) { - fs.mkdirSync(path, node.mode); - } else { - fs.writeFileSync(path, "", { mode: node.mode }); - } - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - return node; - }, - rename: function(oldNode, newDir, newName) { - var oldPath = NODEFS.realPath(oldNode); - var newPath = PATH.join2(NODEFS.realPath(newDir), newName); - try { - fs.renameSync(oldPath, newPath); - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - oldNode.name = newName; - }, - unlink: function(parent, name) { - var path = PATH.join2(NODEFS.realPath(parent), name); - try { - fs.unlinkSync(path); - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - }, - rmdir: function(parent, name) { - var path = PATH.join2(NODEFS.realPath(parent), name); - try { - fs.rmdirSync(path); - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - }, - readdir: function(node) { - var path = NODEFS.realPath(node); - try { - return fs.readdirSync(path); - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - }, - symlink: function(parent, newName, oldPath) { - var newPath = PATH.join2(NODEFS.realPath(parent), newName); - try { - fs.symlinkSync(oldPath, newPath); - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - }, - readlink: function(node) { - var path = NODEFS.realPath(node); - try { - path = fs.readlinkSync(path); - path = NODEJS_PATH.relative( - NODEJS_PATH.resolve(node.mount.opts.root), - path - ); - return path; - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - } - }, - stream_ops: { - open: function(stream) { - var path = NODEFS.realPath(stream.node); - try { - if (FS.isFile(stream.node.mode)) { - stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags)); - } - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - }, - close: function(stream) { - try { - if (FS.isFile(stream.node.mode) && stream.nfd) { - fs.closeSync(stream.nfd); - } - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - }, - read: function(stream, buffer2, offset, length, position) { - if (length === 0) - return 0; - try { - return fs.readSync( - stream.nfd, - NODEFS.bufferFrom(buffer2.buffer), - offset, - length, - position - ); - } catch (e) { - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - }, - write: function(stream, buffer2, offset, length, position) { - try { - return fs.writeSync( - stream.nfd, - NODEFS.bufferFrom(buffer2.buffer), - offset, - length, - position - ); - } catch (e) { - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - }, - llseek: function(stream, offset, whence) { - var position = offset; - if (whence === 1) { - position += stream.position; - } else if (whence === 2) { - if (FS.isFile(stream.node.mode)) { - try { - var stat = fs.fstatSync(stream.nfd); - position += stat.size; - } catch (e) { - throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); - } - } - } - if (position < 0) { - throw new FS.ErrnoError(28); - } - return position; - }, - mmap: function(stream, address, length, position, prot, flags) { - if (address !== 0) { - throw new FS.ErrnoError(28); - } - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43); - } - var ptr = mmapAlloc(length); - NODEFS.stream_ops.read(stream, HEAP8, ptr, length, position); - return { ptr, allocated: true }; - }, - msync: function(stream, buffer2, offset, length, mmapFlags) { - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43); - } - if (mmapFlags & 2) { - return 0; - } - NODEFS.stream_ops.write( - stream, - buffer2, - 0, - length, - offset, - false - ); - return 0; - } - } - }; - var NODERAWFS = { - lookupPath: function(path) { - return { path, node: { mode: NODEFS.getMode(path) } }; - }, - createStandardStreams: function() { - FS.streams[0] = { - fd: 0, - nfd: 0, - position: 0, - path: "", - flags: 0, - tty: true, - seekable: false - }; - for (var i = 1; i < 3; i++) { - FS.streams[i] = { - fd: i, - nfd: i, - position: 0, - path: "", - flags: 577, - tty: true, - seekable: false - }; - } - }, - cwd: function() { - return process.cwd(); - }, - chdir: function() { - process.chdir.apply(void 0, arguments); - }, - mknod: function(path, mode) { - if (FS.isDir(path)) { - fs.mkdirSync(path, mode); - } else { - fs.writeFileSync(path, "", { mode }); - } - }, - mkdir: function() { - fs.mkdirSync.apply(void 0, arguments); - }, - symlink: function() { - fs.symlinkSync.apply(void 0, arguments); - }, - rename: function() { - fs.renameSync.apply(void 0, arguments); - }, - rmdir: function() { - fs.rmdirSync.apply(void 0, arguments); - }, - readdir: function() { - fs.readdirSync.apply(void 0, arguments); - }, - unlink: function() { - fs.unlinkSync.apply(void 0, arguments); - }, - readlink: function() { - return fs.readlinkSync.apply(void 0, arguments); - }, - stat: function() { - return fs.statSync.apply(void 0, arguments); - }, - lstat: function() { - return fs.lstatSync.apply(void 0, arguments); - }, - chmod: function() { - fs.chmodSync.apply(void 0, arguments); - }, - fchmod: function() { - fs.fchmodSync.apply(void 0, arguments); - }, - chown: function() { - fs.chownSync.apply(void 0, arguments); - }, - fchown: function() { - fs.fchownSync.apply(void 0, arguments); - }, - truncate: function() { - fs.truncateSync.apply(void 0, arguments); - }, - ftruncate: function(fd, len) { - if (len < 0) { - throw new FS.ErrnoError(28); - } - fs.ftruncateSync.apply(void 0, arguments); - }, - utime: function() { - fs.utimesSync.apply(void 0, arguments); - }, - open: function(path, flags, mode, suggestFD) { - if (typeof flags === "string") { - flags = VFS.modeStringToFlags(flags); - } - var nfd = fs.openSync(path, NODEFS.flagsForNode(flags), mode); - var fd = suggestFD != null ? suggestFD : FS.nextfd(nfd); - var stream = { - fd, - nfd, - position: 0, - path, - flags, - seekable: true - }; - FS.streams[fd] = stream; - return stream; - }, - close: function(stream) { - if (!stream.stream_ops) { - fs.closeSync(stream.nfd); - } - FS.closeStream(stream.fd); - }, - llseek: function(stream, offset, whence) { - if (stream.stream_ops) { - return VFS.llseek(stream, offset, whence); - } - var position = offset; - if (whence === 1) { - position += stream.position; - } else if (whence === 2) { - position += fs.fstatSync(stream.nfd).size; - } else if (whence !== 0) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - if (position < 0) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - stream.position = position; - return position; - }, - read: function(stream, buffer2, offset, length, position) { - if (stream.stream_ops) { - return VFS.read(stream, buffer2, offset, length, position); - } - var seeking = typeof position !== "undefined"; - if (!seeking && stream.seekable) - position = stream.position; - var bytesRead = fs.readSync( - stream.nfd, - NODEFS.bufferFrom(buffer2.buffer), - offset, - length, - position - ); - if (!seeking) - stream.position += bytesRead; - return bytesRead; - }, - write: function(stream, buffer2, offset, length, position) { - if (stream.stream_ops) { - return VFS.write(stream, buffer2, offset, length, position); - } - if (stream.flags & +"1024") { - FS.llseek(stream, 0, +"2"); - } - var seeking = typeof position !== "undefined"; - if (!seeking && stream.seekable) - position = stream.position; - var bytesWritten = fs.writeSync( - stream.nfd, - NODEFS.bufferFrom(buffer2.buffer), - offset, - length, - position - ); - if (!seeking) - stream.position += bytesWritten; - return bytesWritten; - }, - allocate: function() { - throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); - }, - mmap: function(stream, address, length, position, prot, flags) { - if (stream.stream_ops) { - return VFS.mmap(stream, address, length, position, prot, flags); - } - if (address !== 0) { - throw new FS.ErrnoError(28); - } - var ptr = mmapAlloc(length); - FS.read(stream, HEAP8, ptr, length, position); - return { ptr, allocated: true }; - }, - msync: function(stream, buffer2, offset, length, mmapFlags) { - if (stream.stream_ops) { - return VFS.msync(stream, buffer2, offset, length, mmapFlags); - } - if (mmapFlags & 2) { - return 0; - } - FS.write(stream, buffer2, 0, length, offset); - return 0; - }, - munmap: function() { - return 0; - }, - ioctl: function() { - throw new FS.ErrnoError(ERRNO_CODES.ENOTTY); - } - }; - var FS = { - root: null, - mounts: [], - devices: {}, - streams: [], - nextInode: 1, - nameTable: null, - currentPath: "/", - initialized: false, - ignorePermissions: true, - trackingDelegate: {}, - tracking: { openFlags: { READ: 1, WRITE: 2 } }, - ErrnoError: null, - genericErrors: {}, - filesystems: null, - syncFSRequests: 0, - lookupPath: function(path, opts) { - path = PATH_FS.resolve(FS.cwd(), path); - opts = opts || {}; - if (!path) - return { path: "", node: null }; - var defaults = { follow_mount: true, recurse_count: 0 }; - for (var key2 in defaults) { - if (opts[key2] === void 0) { - opts[key2] = defaults[key2]; - } - } - if (opts.recurse_count > 8) { - throw new FS.ErrnoError(32); - } - var parts = PATH.normalizeArray( - path.split("/").filter(function(p) { - return !!p; - }), - false - ); - var current = FS.root; - var current_path = "/"; - for (var i = 0; i < parts.length; i++) { - var islast = i === parts.length - 1; - if (islast && opts.parent) { - break; - } - current = FS.lookupNode(current, parts[i]); - current_path = PATH.join2(current_path, parts[i]); - if (FS.isMountpoint(current)) { - if (!islast || islast && opts.follow_mount) { - current = current.mounted.root; - } - } - if (!islast || opts.follow) { - var count = 0; - while (FS.isLink(current.mode)) { - var link = FS.readlink(current_path); - current_path = PATH_FS.resolve(PATH.dirname(current_path), link); - var lookup = FS.lookupPath(current_path, { - recurse_count: opts.recurse_count - }); - current = lookup.node; - if (count++ > 40) { - throw new FS.ErrnoError(32); - } - } - } - } - return { path: current_path, node: current }; - }, - getPath: function(node) { - var path; - while (true) { - if (FS.isRoot(node)) { - var mount = node.mount.mountpoint; - if (!path) - return mount; - return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path; - } - path = path ? node.name + "/" + path : node.name; - node = node.parent; - } - }, - hashName: function(parentid, name) { - var hash = 0; - for (var i = 0; i < name.length; i++) { - hash = (hash << 5) - hash + name.charCodeAt(i) | 0; - } - return (parentid + hash >>> 0) % FS.nameTable.length; - }, - hashAddNode: function(node) { - var hash = FS.hashName(node.parent.id, node.name); - node.name_next = FS.nameTable[hash]; - FS.nameTable[hash] = node; - }, - hashRemoveNode: function(node) { - var hash = FS.hashName(node.parent.id, node.name); - if (FS.nameTable[hash] === node) { - FS.nameTable[hash] = node.name_next; - } else { - var current = FS.nameTable[hash]; - while (current) { - if (current.name_next === node) { - current.name_next = node.name_next; - break; - } - current = current.name_next; - } - } - }, - lookupNode: function(parent, name) { - var errCode = FS.mayLookup(parent); - if (errCode) { - throw new FS.ErrnoError(errCode, parent); - } - var hash = FS.hashName(parent.id, name); - for (var node = FS.nameTable[hash]; node; node = node.name_next) { - var nodeName = node.name; - if (node.parent.id === parent.id && nodeName === name) { - return node; - } - } - return FS.lookup(parent, name); - }, - createNode: function(parent, name, mode, rdev) { - var node = new FS.FSNode(parent, name, mode, rdev); - FS.hashAddNode(node); - return node; - }, - destroyNode: function(node) { - FS.hashRemoveNode(node); - }, - isRoot: function(node) { - return node === node.parent; - }, - isMountpoint: function(node) { - return !!node.mounted; - }, - isFile: function(mode) { - return (mode & 61440) === 32768; - }, - isDir: function(mode) { - return (mode & 61440) === 16384; - }, - isLink: function(mode) { - return (mode & 61440) === 40960; - }, - isChrdev: function(mode) { - return (mode & 61440) === 8192; - }, - isBlkdev: function(mode) { - return (mode & 61440) === 24576; - }, - isFIFO: function(mode) { - return (mode & 61440) === 4096; - }, - isSocket: function(mode) { - return (mode & 49152) === 49152; - }, - flagModes: { r: 0, "r+": 2, w: 577, "w+": 578, a: 1089, "a+": 1090 }, - modeStringToFlags: function(str) { - var flags = FS.flagModes[str]; - if (typeof flags === "undefined") { - throw new Error("Unknown file open mode: " + str); - } - return flags; - }, - flagsToPermissionString: function(flag) { - var perms = ["r", "w", "rw"][flag & 3]; - if (flag & 512) { - perms += "w"; - } - return perms; - }, - nodePermissions: function(node, perms) { - if (FS.ignorePermissions) { - return 0; - } - if (perms.includes("r") && !(node.mode & 292)) { - return 2; - } else if (perms.includes("w") && !(node.mode & 146)) { - return 2; - } else if (perms.includes("x") && !(node.mode & 73)) { - return 2; - } - return 0; - }, - mayLookup: function(dir) { - var errCode = FS.nodePermissions(dir, "x"); - if (errCode) - return errCode; - if (!dir.node_ops.lookup) - return 2; - return 0; - }, - mayCreate: function(dir, name) { - try { - var node = FS.lookupNode(dir, name); - return 20; - } catch (e) { - } - return FS.nodePermissions(dir, "wx"); - }, - mayDelete: function(dir, name, isdir) { - var node; - try { - node = FS.lookupNode(dir, name); - } catch (e) { - return e.errno; - } - var errCode = FS.nodePermissions(dir, "wx"); - if (errCode) { - return errCode; - } - if (isdir) { - if (!FS.isDir(node.mode)) { - return 54; - } - if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { - return 10; - } - } else { - if (FS.isDir(node.mode)) { - return 31; - } - } - return 0; - }, - mayOpen: function(node, flags) { - if (!node) { - return 44; - } - if (FS.isLink(node.mode)) { - return 32; - } else if (FS.isDir(node.mode)) { - if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) { - return 31; - } - } - return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); - }, - MAX_OPEN_FDS: 4096, - nextfd: function(fd_start, fd_end) { - fd_start = fd_start || 0; - fd_end = fd_end || FS.MAX_OPEN_FDS; - for (var fd = fd_start; fd <= fd_end; fd++) { - if (!FS.streams[fd]) { - return fd; - } - } - throw new FS.ErrnoError(33); - }, - getStream: function(fd) { - return FS.streams[fd]; - }, - createStream: function(stream, fd_start, fd_end) { - if (!FS.FSStream) { - FS.FSStream = function() { - }; - FS.FSStream.prototype = { - object: { - get: function() { - return this.node; - }, - set: function(val) { - this.node = val; - } - }, - isRead: { - get: function() { - return (this.flags & 2097155) !== 1; - } - }, - isWrite: { - get: function() { - return (this.flags & 2097155) !== 0; - } - }, - isAppend: { - get: function() { - return this.flags & 1024; - } - } - }; - } - var newStream = new FS.FSStream(); - for (var p in stream) { - newStream[p] = stream[p]; - } - stream = newStream; - var fd = FS.nextfd(fd_start, fd_end); - stream.fd = fd; - FS.streams[fd] = stream; - return stream; - }, - closeStream: function(fd) { - FS.streams[fd] = null; - }, - chrdev_stream_ops: { - open: function(stream) { - var device = FS.getDevice(stream.node.rdev); - stream.stream_ops = device.stream_ops; - if (stream.stream_ops.open) { - stream.stream_ops.open(stream); - } - }, - llseek: function() { - throw new FS.ErrnoError(70); - } - }, - major: function(dev) { - return dev >> 8; - }, - minor: function(dev) { - return dev & 255; - }, - makedev: function(ma, mi) { - return ma << 8 | mi; - }, - registerDevice: function(dev, ops) { - FS.devices[dev] = { stream_ops: ops }; - }, - getDevice: function(dev) { - return FS.devices[dev]; - }, - getMounts: function(mount) { - var mounts = []; - var check = [mount]; - while (check.length) { - var m = check.pop(); - mounts.push(m); - check.push.apply(check, m.mounts); - } - return mounts; - }, - syncfs: function(populate, callback) { - if (typeof populate === "function") { - callback = populate; - populate = false; - } - FS.syncFSRequests++; - if (FS.syncFSRequests > 1) { - err( - "warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work" - ); - } - var mounts = FS.getMounts(FS.root.mount); - var completed = 0; - function doCallback(errCode) { - FS.syncFSRequests--; - return callback(errCode); - } - function done(errCode) { - if (errCode) { - if (!done.errored) { - done.errored = true; - return doCallback(errCode); - } - return; - } - if (++completed >= mounts.length) { - doCallback(null); - } - } - mounts.forEach(function(mount) { - if (!mount.type.syncfs) { - return done(null); - } - mount.type.syncfs(mount, populate, done); - }); - }, - mount: function(type, opts, mountpoint) { - var root = mountpoint === "/"; - var pseudo = !mountpoint; - var node; - if (root && FS.root) { - throw new FS.ErrnoError(10); - } else if (!root && !pseudo) { - var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); - mountpoint = lookup.path; - node = lookup.node; - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10); - } - if (!FS.isDir(node.mode)) { - throw new FS.ErrnoError(54); - } - } - var mount = { - type, - opts, - mountpoint, - mounts: [] - }; - var mountRoot = type.mount(mount); - mountRoot.mount = mount; - mount.root = mountRoot; - if (root) { - FS.root = mountRoot; - } else if (node) { - node.mounted = mount; - if (node.mount) { - node.mount.mounts.push(mount); - } - } - return mountRoot; - }, - unmount: function(mountpoint) { - var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); - if (!FS.isMountpoint(lookup.node)) { - throw new FS.ErrnoError(28); - } - var node = lookup.node; - var mount = node.mounted; - var mounts = FS.getMounts(mount); - Object.keys(FS.nameTable).forEach(function(hash) { - var current = FS.nameTable[hash]; - while (current) { - var next = current.name_next; - if (mounts.includes(current.mount)) { - FS.destroyNode(current); - } - current = next; - } - }); - node.mounted = null; - var idx = node.mount.mounts.indexOf(mount); - node.mount.mounts.splice(idx, 1); - }, - lookup: function(parent, name) { - return parent.node_ops.lookup(parent, name); - }, - mknod: function(path, mode, dev) { - var lookup = FS.lookupPath(path, { parent: true }); - var parent = lookup.node; - var name = PATH.basename(path); - if (!name || name === "." || name === "..") { - throw new FS.ErrnoError(28); - } - var errCode = FS.mayCreate(parent, name); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - if (!parent.node_ops.mknod) { - throw new FS.ErrnoError(63); - } - return parent.node_ops.mknod(parent, name, mode, dev); - }, - create: function(path, mode) { - mode = mode !== void 0 ? mode : 438; - mode &= 4095; - mode |= 32768; - return FS.mknod(path, mode, 0); - }, - mkdir: function(path, mode) { - mode = mode !== void 0 ? mode : 511; - mode &= 511 | 512; - mode |= 16384; - return FS.mknod(path, mode, 0); - }, - mkdirTree: function(path, mode) { - var dirs = path.split("/"); - var d = ""; - for (var i = 0; i < dirs.length; ++i) { - if (!dirs[i]) - continue; - d += "/" + dirs[i]; - try { - FS.mkdir(d, mode); - } catch (e) { - if (e.errno != 20) - throw e; - } - } - }, - mkdev: function(path, mode, dev) { - if (typeof dev === "undefined") { - dev = mode; - mode = 438; - } - mode |= 8192; - return FS.mknod(path, mode, dev); - }, - symlink: function(oldpath, newpath) { - if (!PATH_FS.resolve(oldpath)) { - throw new FS.ErrnoError(44); - } - var lookup = FS.lookupPath(newpath, { parent: true }); - var parent = lookup.node; - if (!parent) { - throw new FS.ErrnoError(44); - } - var newname = PATH.basename(newpath); - var errCode = FS.mayCreate(parent, newname); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - if (!parent.node_ops.symlink) { - throw new FS.ErrnoError(63); - } - return parent.node_ops.symlink(parent, newname, oldpath); - }, - rename: function(old_path, new_path) { - var old_dirname = PATH.dirname(old_path); - var new_dirname = PATH.dirname(new_path); - var old_name = PATH.basename(old_path); - var new_name = PATH.basename(new_path); - var lookup, old_dir, new_dir; - lookup = FS.lookupPath(old_path, { parent: true }); - old_dir = lookup.node; - lookup = FS.lookupPath(new_path, { parent: true }); - new_dir = lookup.node; - if (!old_dir || !new_dir) - throw new FS.ErrnoError(44); - if (old_dir.mount !== new_dir.mount) { - throw new FS.ErrnoError(75); - } - var old_node = FS.lookupNode(old_dir, old_name); - var relative = PATH_FS.relative(old_path, new_dirname); - if (relative.charAt(0) !== ".") { - throw new FS.ErrnoError(28); - } - relative = PATH_FS.relative(new_path, old_dirname); - if (relative.charAt(0) !== ".") { - throw new FS.ErrnoError(55); - } - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name); - } catch (e) { - } - if (old_node === new_node) { - return; - } - var isdir = FS.isDir(old_node.mode); - var errCode = FS.mayDelete(old_dir, old_name, isdir); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - if (!old_dir.node_ops.rename) { - throw new FS.ErrnoError(63); - } - if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) { - throw new FS.ErrnoError(10); - } - if (new_dir !== old_dir) { - errCode = FS.nodePermissions(old_dir, "w"); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - } - try { - if (FS.trackingDelegate["willMovePath"]) { - FS.trackingDelegate["willMovePath"](old_path, new_path); - } - } catch (e) { - err( - "FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message - ); - } - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name); - } catch (e) { - throw e; - } finally { - FS.hashAddNode(old_node); - } - try { - if (FS.trackingDelegate["onMovePath"]) - FS.trackingDelegate["onMovePath"](old_path, new_path); - } catch (e) { - err( - "FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message - ); - } - }, - rmdir: function(path) { - var lookup = FS.lookupPath(path, { parent: true }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, true); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - if (!parent.node_ops.rmdir) { - throw new FS.ErrnoError(63); - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10); - } - try { - if (FS.trackingDelegate["willDeletePath"]) { - FS.trackingDelegate["willDeletePath"](path); - } - } catch (e) { - err( - "FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message - ); - } - parent.node_ops.rmdir(parent, name); - FS.destroyNode(node); - try { - if (FS.trackingDelegate["onDeletePath"]) - FS.trackingDelegate["onDeletePath"](path); - } catch (e) { - err( - "FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message - ); - } - }, - readdir: function(path) { - var lookup = FS.lookupPath(path, { follow: true }); - var node = lookup.node; - if (!node.node_ops.readdir) { - throw new FS.ErrnoError(54); - } - return node.node_ops.readdir(node); - }, - unlink: function(path) { - var lookup = FS.lookupPath(path, { parent: true }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, false); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - if (!parent.node_ops.unlink) { - throw new FS.ErrnoError(63); - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10); - } - try { - if (FS.trackingDelegate["willDeletePath"]) { - FS.trackingDelegate["willDeletePath"](path); - } - } catch (e) { - err( - "FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message - ); - } - parent.node_ops.unlink(parent, name); - FS.destroyNode(node); - try { - if (FS.trackingDelegate["onDeletePath"]) - FS.trackingDelegate["onDeletePath"](path); - } catch (e) { - err( - "FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message - ); - } - }, - readlink: function(path) { - var lookup = FS.lookupPath(path); - var link = lookup.node; - if (!link) { - throw new FS.ErrnoError(44); - } - if (!link.node_ops.readlink) { - throw new FS.ErrnoError(28); - } - return PATH_FS.resolve( - FS.getPath(link.parent), - link.node_ops.readlink(link) - ); - }, - stat: function(path, dontFollow) { - var lookup = FS.lookupPath(path, { follow: !dontFollow }); - var node = lookup.node; - if (!node) { - throw new FS.ErrnoError(44); - } - if (!node.node_ops.getattr) { - throw new FS.ErrnoError(63); - } - return node.node_ops.getattr(node); - }, - lstat: function(path) { - return FS.stat(path, true); - }, - chmod: function(path, mode, dontFollow) { - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { follow: !dontFollow }); - node = lookup.node; - } else { - node = path; - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63); - } - node.node_ops.setattr(node, { - mode: mode & 4095 | node.mode & ~4095, - timestamp: Date.now() - }); - }, - lchmod: function(path, mode) { - FS.chmod(path, mode, true); - }, - fchmod: function(fd, mode) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8); - } - FS.chmod(stream.node, mode); - }, - chown: function(path, uid, gid, dontFollow) { - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { follow: !dontFollow }); - node = lookup.node; - } else { - node = path; - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63); - } - node.node_ops.setattr(node, { timestamp: Date.now() }); - }, - lchown: function(path, uid, gid) { - FS.chown(path, uid, gid, true); - }, - fchown: function(fd, uid, gid) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8); - } - FS.chown(stream.node, uid, gid); - }, - truncate: function(path, len) { - if (len < 0) { - throw new FS.ErrnoError(28); - } - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { follow: true }); - node = lookup.node; - } else { - node = path; - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63); - } - if (FS.isDir(node.mode)) { - throw new FS.ErrnoError(31); - } - if (!FS.isFile(node.mode)) { - throw new FS.ErrnoError(28); - } - var errCode = FS.nodePermissions(node, "w"); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - node.node_ops.setattr(node, { size: len, timestamp: Date.now() }); - }, - ftruncate: function(fd, len) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8); - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(28); - } - FS.truncate(stream.node, len); - }, - utime: function(path, atime, mtime) { - var lookup = FS.lookupPath(path, { follow: true }); - var node = lookup.node; - node.node_ops.setattr(node, { timestamp: Math.max(atime, mtime) }); - }, - open: function(path, flags, mode, fd_start, fd_end) { - if (path === "") { - throw new FS.ErrnoError(44); - } - flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags; - mode = typeof mode === "undefined" ? 438 : mode; - if (flags & 64) { - mode = mode & 4095 | 32768; - } else { - mode = 0; - } - var node; - if (typeof path === "object") { - node = path; - } else { - path = PATH.normalize(path); - try { - var lookup = FS.lookupPath(path, { follow: !(flags & 131072) }); - node = lookup.node; - } catch (e) { - } - } - var created = false; - if (flags & 64) { - if (node) { - if (flags & 128) { - throw new FS.ErrnoError(20); - } - } else { - node = FS.mknod(path, mode, 0); - created = true; - } - } - if (!node) { - throw new FS.ErrnoError(44); - } - if (FS.isChrdev(node.mode)) { - flags &= ~512; - } - if (flags & 65536 && !FS.isDir(node.mode)) { - throw new FS.ErrnoError(54); - } - if (!created) { - var errCode = FS.mayOpen(node, flags); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - } - if (flags & 512) { - FS.truncate(node, 0); - } - flags &= ~(128 | 512 | 131072); - var stream = FS.createStream( - { - node, - path: FS.getPath(node), - flags, - seekable: true, - position: 0, - stream_ops: node.stream_ops, - ungotten: [], - error: false - }, - fd_start, - fd_end - ); - if (stream.stream_ops.open) { - stream.stream_ops.open(stream); - } - if (Module["logReadFiles"] && !(flags & 1)) { - if (!FS.readFiles) - FS.readFiles = {}; - if (!(path in FS.readFiles)) { - FS.readFiles[path] = 1; - err("FS.trackingDelegate error on read file: " + path); - } - } - try { - if (FS.trackingDelegate["onOpenFile"]) { - var trackingFlags = 0; - if ((flags & 2097155) !== 1) { - trackingFlags |= FS.tracking.openFlags.READ; - } - if ((flags & 2097155) !== 0) { - trackingFlags |= FS.tracking.openFlags.WRITE; - } - FS.trackingDelegate["onOpenFile"](path, trackingFlags); - } - } catch (e) { - err( - "FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message - ); - } - return stream; - }, - close: function(stream) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8); - } - if (stream.getdents) - stream.getdents = null; - try { - if (stream.stream_ops.close) { - stream.stream_ops.close(stream); - } - } catch (e) { - throw e; - } finally { - FS.closeStream(stream.fd); - } - stream.fd = null; - }, - isClosed: function(stream) { - return stream.fd === null; - }, - llseek: function(stream, offset, whence) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8); - } - if (!stream.seekable || !stream.stream_ops.llseek) { - throw new FS.ErrnoError(70); - } - if (whence != 0 && whence != 1 && whence != 2) { - throw new FS.ErrnoError(28); - } - stream.position = stream.stream_ops.llseek(stream, offset, whence); - stream.ungotten = []; - return stream.position; - }, - read: function(stream, buffer2, offset, length, position) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(28); - } - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8); - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(8); - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(31); - } - if (!stream.stream_ops.read) { - throw new FS.ErrnoError(28); - } - var seeking = typeof position !== "undefined"; - if (!seeking) { - position = stream.position; - } else if (!stream.seekable) { - throw new FS.ErrnoError(70); - } - var bytesRead = stream.stream_ops.read( - stream, - buffer2, - offset, - length, - position - ); - if (!seeking) - stream.position += bytesRead; - return bytesRead; - }, - write: function(stream, buffer2, offset, length, position, canOwn) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(28); - } - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8); - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8); - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(31); - } - if (!stream.stream_ops.write) { - throw new FS.ErrnoError(28); - } - if (stream.seekable && stream.flags & 1024) { - FS.llseek(stream, 0, 2); - } - var seeking = typeof position !== "undefined"; - if (!seeking) { - position = stream.position; - } else if (!stream.seekable) { - throw new FS.ErrnoError(70); - } - var bytesWritten = stream.stream_ops.write( - stream, - buffer2, - offset, - length, - position, - canOwn - ); - if (!seeking) - stream.position += bytesWritten; - try { - if (stream.path && FS.trackingDelegate["onWriteToFile"]) - FS.trackingDelegate["onWriteToFile"](stream.path); - } catch (e) { - err( - "FS.trackingDelegate['onWriteToFile']('" + stream.path + "') threw an exception: " + e.message - ); - } - return bytesWritten; - }, - allocate: function(stream, offset, length) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8); - } - if (offset < 0 || length <= 0) { - throw new FS.ErrnoError(28); - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8); - } - if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(43); - } - if (!stream.stream_ops.allocate) { - throw new FS.ErrnoError(138); - } - stream.stream_ops.allocate(stream, offset, length); - }, - mmap: function(stream, address, length, position, prot, flags) { - if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) { - throw new FS.ErrnoError(2); - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(2); - } - if (!stream.stream_ops.mmap) { - throw new FS.ErrnoError(43); - } - return stream.stream_ops.mmap( - stream, - address, - length, - position, - prot, - flags - ); - }, - msync: function(stream, buffer2, offset, length, mmapFlags) { - if (!stream || !stream.stream_ops.msync) { - return 0; - } - return stream.stream_ops.msync( - stream, - buffer2, - offset, - length, - mmapFlags - ); - }, - munmap: function(stream) { - return 0; - }, - ioctl: function(stream, cmd, arg) { - if (!stream.stream_ops.ioctl) { - throw new FS.ErrnoError(59); - } - return stream.stream_ops.ioctl(stream, cmd, arg); - }, - readFile: function(path, opts) { - opts = opts || {}; - opts.flags = opts.flags || 0; - opts.encoding = opts.encoding || "binary"; - if (opts.encoding !== "utf8" && opts.encoding !== "binary") { - throw new Error('Invalid encoding type "' + opts.encoding + '"'); - } - var ret; - var stream = FS.open(path, opts.flags); - var stat = FS.stat(path); - var length = stat.size; - var buf = new Uint8Array(length); - FS.read(stream, buf, 0, length, 0); - if (opts.encoding === "utf8") { - ret = UTF8ArrayToString(buf, 0); - } else if (opts.encoding === "binary") { - ret = buf; - } - FS.close(stream); - return ret; - }, - writeFile: function(path, data, opts) { - opts = opts || {}; - opts.flags = opts.flags || 577; - var stream = FS.open(path, opts.flags, opts.mode); - if (typeof data === "string") { - var buf = new Uint8Array(lengthBytesUTF8(data) + 1); - var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); - FS.write(stream, buf, 0, actualNumBytes, void 0, opts.canOwn); - } else if (ArrayBuffer.isView(data)) { - FS.write(stream, data, 0, data.byteLength, void 0, opts.canOwn); - } else { - throw new Error("Unsupported data type"); - } - FS.close(stream); - }, - cwd: function() { - return FS.currentPath; - }, - chdir: function(path) { - var lookup = FS.lookupPath(path, { follow: true }); - if (lookup.node === null) { - throw new FS.ErrnoError(44); - } - if (!FS.isDir(lookup.node.mode)) { - throw new FS.ErrnoError(54); - } - var errCode = FS.nodePermissions(lookup.node, "x"); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - FS.currentPath = lookup.path; - }, - createDefaultDirectories: function() { - FS.mkdir("/tmp"); - FS.mkdir("/home"); - FS.mkdir("/home/web_user"); - }, - createDefaultDevices: function() { - FS.mkdir("/dev"); - FS.registerDevice(FS.makedev(1, 3), { - read: function() { - return 0; - }, - write: function(stream, buffer2, offset, length, pos) { - return length; - } - }); - FS.mkdev("/dev/null", FS.makedev(1, 3)); - TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); - TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); - FS.mkdev("/dev/tty", FS.makedev(5, 0)); - FS.mkdev("/dev/tty1", FS.makedev(6, 0)); - var random_device = getRandomDevice(); - FS.createDevice("/dev", "random", random_device); - FS.createDevice("/dev", "urandom", random_device); - FS.mkdir("/dev/shm"); - FS.mkdir("/dev/shm/tmp"); - }, - createSpecialDirectories: function() { - FS.mkdir("/proc"); - var proc_self = FS.mkdir("/proc/self"); - FS.mkdir("/proc/self/fd"); - FS.mount( - { - mount: function() { - var node = FS.createNode(proc_self, "fd", 16384 | 511, 73); - node.node_ops = { - lookup: function(parent, name) { - var fd = +name; - var stream = FS.getStream(fd); - if (!stream) - throw new FS.ErrnoError(8); - var ret = { - parent: null, - mount: { mountpoint: "fake" }, - node_ops: { - readlink: function() { - return stream.path; - } - } - }; - ret.parent = ret; - return ret; - } - }; - return node; - } - }, - {}, - "/proc/self/fd" - ); - }, - createStandardStreams: function() { - if (Module["stdin"]) { - FS.createDevice("/dev", "stdin", Module["stdin"]); - } else { - FS.symlink("/dev/tty", "/dev/stdin"); - } - if (Module["stdout"]) { - FS.createDevice("/dev", "stdout", null, Module["stdout"]); - } else { - FS.symlink("/dev/tty", "/dev/stdout"); - } - if (Module["stderr"]) { - FS.createDevice("/dev", "stderr", null, Module["stderr"]); - } else { - FS.symlink("/dev/tty1", "/dev/stderr"); - } - FS.open("/dev/stdin", 0); - FS.open("/dev/stdout", 1); - FS.open("/dev/stderr", 1); - }, - ensureErrnoError: function() { - if (FS.ErrnoError) - return; - FS.ErrnoError = function ErrnoError(errno, node) { - this.node = node; - this.setErrno = function(errno2) { - this.errno = errno2; - }; - this.setErrno(errno); - this.message = "FS error"; - }; - FS.ErrnoError.prototype = new Error(); - FS.ErrnoError.prototype.constructor = FS.ErrnoError; - [44].forEach(function(code) { - FS.genericErrors[code] = new FS.ErrnoError(code); - FS.genericErrors[code].stack = ""; - }); - }, - staticInit: function() { - FS.ensureErrnoError(); - FS.nameTable = new Array(4096); - FS.mount(MEMFS, {}, "/"); - FS.createDefaultDirectories(); - FS.createDefaultDevices(); - FS.createSpecialDirectories(); - FS.filesystems = { MEMFS, NODEFS }; - }, - init: function(input, output, error) { - FS.init.initialized = true; - FS.ensureErrnoError(); - Module["stdin"] = input || Module["stdin"]; - Module["stdout"] = output || Module["stdout"]; - Module["stderr"] = error || Module["stderr"]; - FS.createStandardStreams(); - }, - quit: function() { - FS.init.initialized = false; - var fflush = Module["_fflush"]; - if (fflush) - fflush(0); - for (var i = 0; i < FS.streams.length; i++) { - var stream = FS.streams[i]; - if (!stream) { - continue; - } - FS.close(stream); - } - }, - getMode: function(canRead, canWrite) { - var mode = 0; - if (canRead) - mode |= 292 | 73; - if (canWrite) - mode |= 146; - return mode; - }, - findObject: function(path, dontResolveLastLink) { - var ret = FS.analyzePath(path, dontResolveLastLink); - if (ret.exists) { - return ret.object; - } else { - return null; - } - }, - analyzePath: function(path, dontResolveLastLink) { - try { - var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); - path = lookup.path; - } catch (e) { - } - var ret = { - isRoot: false, - exists: false, - error: 0, - name: null, - path: null, - object: null, - parentExists: false, - parentPath: null, - parentObject: null - }; - try { - var lookup = FS.lookupPath(path, { parent: true }); - ret.parentExists = true; - ret.parentPath = lookup.path; - ret.parentObject = lookup.node; - ret.name = PATH.basename(path); - lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); - ret.exists = true; - ret.path = lookup.path; - ret.object = lookup.node; - ret.name = lookup.node.name; - ret.isRoot = lookup.path === "/"; - } catch (e) { - ret.error = e.errno; - } - return ret; - }, - createPath: function(parent, path, canRead, canWrite) { - parent = typeof parent === "string" ? parent : FS.getPath(parent); - var parts = path.split("/").reverse(); - while (parts.length) { - var part = parts.pop(); - if (!part) - continue; - var current = PATH.join2(parent, part); - try { - FS.mkdir(current); - } catch (e) { - } - parent = current; - } - return current; - }, - createFile: function(parent, name, properties, canRead, canWrite) { - var path = PATH.join2( - typeof parent === "string" ? parent : FS.getPath(parent), - name - ); - var mode = FS.getMode(canRead, canWrite); - return FS.create(path, mode); - }, - createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { - var path = name ? PATH.join2( - typeof parent === "string" ? parent : FS.getPath(parent), - name - ) : parent; - var mode = FS.getMode(canRead, canWrite); - var node = FS.create(path, mode); - if (data) { - if (typeof data === "string") { - var arr = new Array(data.length); - for (var i = 0, len = data.length; i < len; ++i) - arr[i] = data.charCodeAt(i); - data = arr; - } - FS.chmod(node, mode | 146); - var stream = FS.open(node, 577); - FS.write(stream, data, 0, data.length, 0, canOwn); - FS.close(stream); - FS.chmod(node, mode); - } - return node; - }, - createDevice: function(parent, name, input, output) { - var path = PATH.join2( - typeof parent === "string" ? parent : FS.getPath(parent), - name - ); - var mode = FS.getMode(!!input, !!output); - if (!FS.createDevice.major) - FS.createDevice.major = 64; - var dev = FS.makedev(FS.createDevice.major++, 0); - FS.registerDevice(dev, { - open: function(stream) { - stream.seekable = false; - }, - close: function(stream) { - if (output && output.buffer && output.buffer.length) { - output(10); - } - }, - read: function(stream, buffer2, offset, length, pos) { - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = input(); - } catch (e) { - throw new FS.ErrnoError(29); - } - if (result === void 0 && bytesRead === 0) { - throw new FS.ErrnoError(6); - } - if (result === null || result === void 0) - break; - bytesRead++; - buffer2[offset + i] = result; - } - if (bytesRead) { - stream.node.timestamp = Date.now(); - } - return bytesRead; - }, - write: function(stream, buffer2, offset, length, pos) { - for (var i = 0; i < length; i++) { - try { - output(buffer2[offset + i]); - } catch (e) { - throw new FS.ErrnoError(29); - } - } - if (length) { - stream.node.timestamp = Date.now(); - } - return i; - } - }); - return FS.mkdev(path, mode, dev); - }, - forceLoadFile: function(obj) { - if (obj.isDevice || obj.isFolder || obj.link || obj.contents) - return true; - if (read_) { - try { - obj.contents = intArrayFromString(read_(obj.url), true); - obj.usedBytes = obj.contents.length; - } catch (e) { - throw new FS.ErrnoError(29); - } - } else { - throw new Error("Cannot load without read() or XMLHttpRequest."); - } - }, - createLazyFile: function(parent, name, url, canRead, canWrite) { - var properties; { - var properties = { isDevice: false, url }; - } - var node = FS.createFile(parent, name, properties, canRead, canWrite); - if (properties.contents) { - node.contents = properties.contents; - } else if (properties.url) { - node.contents = null; - node.url = properties.url; - } - Object.defineProperties(node, { - usedBytes: { - get: function() { - return this.contents.length; - } - } - }); - var stream_ops = {}; - var keys = Object.keys(node.stream_ops); - keys.forEach(function(key2) { - var fn = node.stream_ops[key2]; - stream_ops[key2] = function forceLoadLazyFile() { - FS.forceLoadFile(node); - return fn.apply(null, arguments); - }; - }); - stream_ops.read = function stream_ops_read(stream, buffer2, offset, length, position) { - FS.forceLoadFile(node); - var contents = stream.node.contents; - if (position >= contents.length) - return 0; - var size = Math.min(contents.length - position, length); - if (contents.slice) { - for (var i = 0; i < size; i++) { - buffer2[offset + i] = contents[position + i]; - } - } else { - for (var i = 0; i < size; i++) { - buffer2[offset + i] = contents.get(position + i); - } - } - return size; - }; - node.stream_ops = stream_ops; - return node; - }, - createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { - Browser.init(); - var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; - function processData(byteArray) { - function finish(byteArray2) { - if (preFinish) - preFinish(); - if (!dontCreateFile) { - FS.createDataFile( - parent, - name, - byteArray2, - canRead, - canWrite, - canOwn - ); - } - if (onload) - onload(); - removeRunDependency(); - } - var handled = false; - Module["preloadPlugins"].forEach(function(plugin) { - if (handled) - return; - if (plugin["canHandle"](fullname)) { - plugin["handle"](byteArray, fullname, finish, function() { - if (onerror) - onerror(); - removeRunDependency(); - }); - handled = true; - } - }); - if (!handled) - finish(byteArray); - } - addRunDependency(); - if (typeof url == "string") { - Browser.asyncLoad( - url, - function(byteArray) { - processData(byteArray); - }, - onerror - ); - } else { - processData(url); - } - }, - indexedDB: function() { - return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; - }, - DB_NAME: function() { - return "EM_FS_" + window.location.pathname; - }, - DB_VERSION: 20, - DB_STORE_NAME: "FILE_DATA", - saveFilesToDB: function(paths, onload, onerror) { - onload = onload || function() { - }; - onerror = onerror || function() { - }; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); - } catch (e) { - return onerror(e); - } - openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { - out("creating db"); - var db = openRequest.result; - db.createObjectStore(FS.DB_STORE_NAME); - }; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite"); - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0, fail = 0, total = paths.length; - function finish() { - if (fail == 0) - onload(); - else - onerror(); - } - paths.forEach(function(path) { - var putRequest = files.put( - FS.analyzePath(path).object.contents, - path - ); - putRequest.onsuccess = function putRequest_onsuccess() { - ok++; - if (ok + fail == total) - finish(); - }; - putRequest.onerror = function putRequest_onerror() { - fail++; - if (ok + fail == total) - finish(); - }; - }); - transaction.onerror = onerror; - }; - openRequest.onerror = onerror; - }, - loadFilesFromDB: function(paths, onload, onerror) { - onload = onload || function() { - }; - onerror = onerror || function() { - }; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); - } catch (e) { - return onerror(e); - } - openRequest.onupgradeneeded = onerror; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - try { - var transaction = db.transaction([FS.DB_STORE_NAME], "readonly"); - } catch (e) { - onerror(e); - return; - } - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0, fail = 0, total = paths.length; - function finish() { - if (fail == 0) - onload(); - else - onerror(); - } - paths.forEach(function(path) { - var getRequest = files.get(path); - getRequest.onsuccess = function getRequest_onsuccess() { - if (FS.analyzePath(path).exists) { - FS.unlink(path); - } - FS.createDataFile( - PATH.dirname(path), - PATH.basename(path), - getRequest.result, - true, - true, - true - ); - ok++; - if (ok + fail == total) - finish(); - }; - getRequest.onerror = function getRequest_onerror() { - fail++; - if (ok + fail == total) - finish(); - }; - }); - transaction.onerror = onerror; - }; - openRequest.onerror = onerror; - } - }; - var SYSCALLS = { - mappings: {}, - DEFAULT_POLLMASK: 5, - umask: 511, - calculateAt: function(dirfd, path, allowEmpty) { - if (path[0] === "/") { - return path; - } - var dir; - if (dirfd === -100) { - dir = FS.cwd(); - } else { - var dirstream = FS.getStream(dirfd); - if (!dirstream) - throw new FS.ErrnoError(8); - dir = dirstream.path; - } - if (path.length == 0) { - if (!allowEmpty) { - throw new FS.ErrnoError(44); - } - return dir; - } - return PATH.join2(dir, path); - }, - doStat: function(func, path, buf) { - try { - var stat = func(path); - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54; - } - throw e; - } - HEAP32[buf >> 2] = stat.dev; - HEAP32[buf + 4 >> 2] = 0; - HEAP32[buf + 8 >> 2] = stat.ino; - HEAP32[buf + 12 >> 2] = stat.mode; - HEAP32[buf + 16 >> 2] = stat.nlink; - HEAP32[buf + 20 >> 2] = stat.uid; - HEAP32[buf + 24 >> 2] = stat.gid; - HEAP32[buf + 28 >> 2] = stat.rdev; - HEAP32[buf + 32 >> 2] = 0; - tempI64 = [ - stat.size >>> 0, - (tempDouble = stat.size, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil( - (tempDouble - +(~~tempDouble >>> 0)) / 4294967296 - ) >>> 0 : 0) - ], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1]; - HEAP32[buf + 48 >> 2] = 4096; - HEAP32[buf + 52 >> 2] = stat.blocks; - HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0; - HEAP32[buf + 60 >> 2] = 0; - HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0; - HEAP32[buf + 68 >> 2] = 0; - HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0; - HEAP32[buf + 76 >> 2] = 0; - tempI64 = [ - stat.ino >>> 0, - (tempDouble = stat.ino, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil( - (tempDouble - +(~~tempDouble >>> 0)) / 4294967296 - ) >>> 0 : 0) - ], HEAP32[buf + 80 >> 2] = tempI64[0], HEAP32[buf + 84 >> 2] = tempI64[1]; - return 0; - }, - doMsync: function(addr, stream, len, flags, offset) { - var buffer2 = HEAPU8.slice(addr, addr + len); - FS.msync(stream, buffer2, offset, len, flags); - }, - doMkdir: function(path, mode) { - path = PATH.normalize(path); - if (path[path.length - 1] === "/") - path = path.substr(0, path.length - 1); - FS.mkdir(path, mode, 0); - return 0; - }, - doMknod: function(path, mode, dev) { - switch (mode & 61440) { - case 32768: - case 8192: - case 24576: - case 4096: - case 49152: - break; - default: - return -28; - } - FS.mknod(path, mode, dev); - return 0; - }, - doReadlink: function(path, buf, bufsize) { - if (bufsize <= 0) - return -28; - var ret = FS.readlink(path); - var len = Math.min(bufsize, lengthBytesUTF8(ret)); - var endChar = HEAP8[buf + len]; - stringToUTF8(ret, buf, bufsize + 1); - HEAP8[buf + len] = endChar; - return len; - }, - doAccess: function(path, amode) { - if (amode & ~7) { - return -28; - } - var node; - var lookup = FS.lookupPath(path, { follow: true }); - node = lookup.node; - if (!node) { - return -44; - } - var perms = ""; - if (amode & 4) - perms += "r"; - if (amode & 2) - perms += "w"; - if (amode & 1) - perms += "x"; - if (perms && FS.nodePermissions(node, perms)) { - return -2; - } - return 0; - }, - doDup: function(path, flags, suggestFD) { - var suggest = FS.getStream(suggestFD); - if (suggest) - FS.close(suggest); - return FS.open(path, flags, 0, suggestFD, suggestFD).fd; - }, - doReadv: function(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - var curr = FS.read(stream, HEAP8, ptr, len, offset); - if (curr < 0) - return -1; - ret += curr; - if (curr < len) - break; - } - return ret; - }, - doWritev: function(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - var curr = FS.write(stream, HEAP8, ptr, len, offset); - if (curr < 0) - return -1; - ret += curr; - } - return ret; - }, - varargs: void 0, - get: function() { - SYSCALLS.varargs += 4; - var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; - return ret; - }, - getStr: function(ptr) { - var ret = UTF8ToString(ptr); - return ret; - }, - getStreamFromFD: function(fd) { - var stream = FS.getStream(fd); - if (!stream) - throw new FS.ErrnoError(8); - return stream; - }, - get64: function(low, high) { - return low; - } - }; - function ___sys_chmod(path, mode) { - try { - path = SYSCALLS.getStr(path); - FS.chmod(path, mode); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return -e.errno; - } - } - function setErrNo(value) { - HEAP32[___errno_location() >> 2] = value; - return value; - } - function ___sys_fcntl64(fd, cmd, varargs) { - SYSCALLS.varargs = varargs; - try { - var stream = SYSCALLS.getStreamFromFD(fd); - switch (cmd) { - case 0: { - var arg = SYSCALLS.get(); - if (arg < 0) { - return -28; - } - var newStream; - newStream = FS.open(stream.path, stream.flags, 0, arg); - return newStream.fd; - } - case 1: - case 2: - return 0; - case 3: - return stream.flags; - case 4: { - var arg = SYSCALLS.get(); - stream.flags |= arg; - return 0; - } - case 12: { - var arg = SYSCALLS.get(); - var offset = 0; - HEAP16[arg + offset >> 1] = 2; - return 0; - } - case 13: - case 14: - return 0; - case 16: - case 8: - return -28; - case 9: - setErrNo(28); - return -1; - default: { - return -28; - } - } - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return -e.errno; - } - } - function ___sys_fstat64(fd, buf) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - return SYSCALLS.doStat(FS.stat, stream.path, buf); - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return -e.errno; - } - } - function ___sys_ioctl(fd, op, varargs) { - SYSCALLS.varargs = varargs; - try { - var stream = SYSCALLS.getStreamFromFD(fd); - switch (op) { - case 21509: - case 21505: { - if (!stream.tty) - return -59; - return 0; - } - case 21510: - case 21511: - case 21512: - case 21506: - case 21507: - case 21508: { - if (!stream.tty) - return -59; - return 0; - } - case 21519: { - if (!stream.tty) - return -59; - var argp = SYSCALLS.get(); - HEAP32[argp >> 2] = 0; - return 0; - } - case 21520: { - if (!stream.tty) - return -59; - return -28; - } - case 21531: { - var argp = SYSCALLS.get(); - return FS.ioctl(stream, op, argp); - } - case 21523: { - if (!stream.tty) - return -59; - return 0; - } - case 21524: { - if (!stream.tty) - return -59; - return 0; - } - default: - abort("bad ioctl syscall " + op); - } - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return -e.errno; - } - } - function ___sys_open(path, flags, varargs) { - SYSCALLS.varargs = varargs; - try { - var pathname = SYSCALLS.getStr(path); - var mode = varargs ? SYSCALLS.get() : 0; - var stream = FS.open(pathname, flags, mode); - return stream.fd; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return -e.errno; - } - } - function ___sys_rename(old_path, new_path) { - try { - old_path = SYSCALLS.getStr(old_path); - new_path = SYSCALLS.getStr(new_path); - FS.rename(old_path, new_path); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return -e.errno; - } - } - function ___sys_rmdir(path) { - try { - path = SYSCALLS.getStr(path); - FS.rmdir(path); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return -e.errno; - } - } - function ___sys_stat64(path, buf) { - try { - path = SYSCALLS.getStr(path); - return SYSCALLS.doStat(FS.stat, path, buf); - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return -e.errno; - } - } - function ___sys_unlink(path) { - try { - path = SYSCALLS.getStr(path); - FS.unlink(path); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return -e.errno; - } - } - function _emscripten_memcpy_big(dest, src, num) { - HEAPU8.copyWithin(dest, src, src + num); - } - function emscripten_realloc_buffer(size) { - try { - wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16); - updateGlobalBufferAndViews(wasmMemory.buffer); - return 1; - } catch (e) { - } - } - function _emscripten_resize_heap(requestedSize) { - var oldSize = HEAPU8.length; - requestedSize = requestedSize >>> 0; - var maxHeapSize = 2147483648; - if (requestedSize > maxHeapSize) { - return false; - } - for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { - var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); - overGrownHeapSize = Math.min( - overGrownHeapSize, - requestedSize + 100663296 - ); - var newSize = Math.min( - maxHeapSize, - alignUp(Math.max(requestedSize, overGrownHeapSize), 65536) - ); - var replacement = emscripten_realloc_buffer(newSize); - if (replacement) { - return true; - } - } - return false; - } - function _fd_close(fd) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - FS.close(stream); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return e.errno; - } - } - function _fd_fdstat_get(fd, pbuf) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4; - HEAP8[pbuf >> 0] = type; - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return e.errno; - } - } - function _fd_read(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doReadv(stream, iov, iovcnt); - HEAP32[pnum >> 2] = num; - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return e.errno; - } - } - function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var HIGH_OFFSET = 4294967296; - var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0); - var DOUBLE_LIMIT = 9007199254740992; - if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) { - return -61; - } - FS.llseek(stream, offset, whence); - tempI64 = [ - stream.position >>> 0, - (tempDouble = stream.position, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil( - (tempDouble - +(~~tempDouble >>> 0)) / 4294967296 - ) >>> 0 : 0) - ], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1]; - if (stream.getdents && offset === 0 && whence === 0) - stream.getdents = null; - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return e.errno; - } - } - function _fd_write(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doWritev(stream, iov, iovcnt); - HEAP32[pnum >> 2] = num; - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) - abort(e); - return e.errno; - } - } - function _setTempRet0(val) { - } - function _time(ptr) { - var ret = Date.now() / 1e3 | 0; - if (ptr) { - HEAP32[ptr >> 2] = ret; - } - return ret; - } - function _tzset() { - if (_tzset.called) - return; - _tzset.called = true; - var currentYear = new Date().getFullYear(); - var winter = new Date(currentYear, 0, 1); - var summer = new Date(currentYear, 6, 1); - var winterOffset = winter.getTimezoneOffset(); - var summerOffset = summer.getTimezoneOffset(); - var stdTimezoneOffset = Math.max(winterOffset, summerOffset); - HEAP32[__get_timezone() >> 2] = stdTimezoneOffset * 60; - HEAP32[__get_daylight() >> 2] = Number(winterOffset != summerOffset); - function extractZone(date) { - var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); - return match ? match[1] : "GMT"; - } - var winterName = extractZone(winter); - var summerName = extractZone(summer); - var winterNamePtr = allocateUTF8(winterName); - var summerNamePtr = allocateUTF8(summerName); - if (summerOffset < winterOffset) { - HEAP32[__get_tzname() >> 2] = winterNamePtr; - HEAP32[__get_tzname() + 4 >> 2] = summerNamePtr; - } else { - HEAP32[__get_tzname() >> 2] = summerNamePtr; - HEAP32[__get_tzname() + 4 >> 2] = winterNamePtr; - } - } - function _timegm(tmPtr) { - _tzset(); - var time = Date.UTC( - HEAP32[tmPtr + 20 >> 2] + 1900, - HEAP32[tmPtr + 16 >> 2], - HEAP32[tmPtr + 12 >> 2], - HEAP32[tmPtr + 8 >> 2], - HEAP32[tmPtr + 4 >> 2], - HEAP32[tmPtr >> 2], - 0 - ); - var date = new Date(time); - HEAP32[tmPtr + 24 >> 2] = date.getUTCDay(); - var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); - var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; - HEAP32[tmPtr + 28 >> 2] = yday; - return date.getTime() / 1e3 | 0; - } - var FSNode = function(parent, name, mode, rdev) { - if (!parent) { - parent = this; - } - this.parent = parent; - this.mount = parent.mount; - this.mounted = null; - this.id = FS.nextInode++; - this.name = name; - this.mode = mode; - this.node_ops = {}; - this.stream_ops = {}; - this.rdev = rdev; - }; - var readMode = 292 | 73; - var writeMode = 146; - Object.defineProperties(FSNode.prototype, { - read: { - get: function() { - return (this.mode & readMode) === readMode; - }, - set: function(val) { - val ? this.mode |= readMode : this.mode &= ~readMode; - } - }, - write: { - get: function() { - return (this.mode & writeMode) === writeMode; - }, - set: function(val) { - val ? this.mode |= writeMode : this.mode &= ~writeMode; - } - }, - isFolder: { - get: function() { - return FS.isDir(this.mode); - } - }, - isDevice: { - get: function() { - return FS.isChrdev(this.mode); - } - } - }); - FS.FSNode = FSNode; - FS.staticInit(); - { - var fs = frozenFs; - var NODEJS_PATH = path__default.default; - NODEFS.staticInit(); - } - { - var _wrapNodeError = function(func) { - return function() { - try { - return func.apply(this, arguments); - } catch (e) { - if (!e.code) - throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - }; - }; - var VFS = Object.assign({}, FS); - for (var _key in NODERAWFS) - FS[_key] = _wrapNodeError(NODERAWFS[_key]); - } - function intArrayFromString(stringy, dontAddNull, length) { - var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; - var u8array = new Array(len); - var numBytesWritten = stringToUTF8Array( - stringy, - u8array, - 0, - u8array.length - ); - if (dontAddNull) - u8array.length = numBytesWritten; - return u8array; - } - function intArrayFromBase64(s) { - { - var buf; - try { - buf = Buffer.from(s, "base64"); - } catch (_) { - buf = new Buffer(s, "base64"); - } - return new Uint8Array( - buf["buffer"], - buf["byteOffset"], - buf["byteLength"] - ); - } - } - function tryParseAsDataURI(filename) { - if (!isDataURI(filename)) { - return; - } - return intArrayFromBase64(filename.slice(dataURIPrefix.length)); - } - var asmLibraryArg = { - s: ___gmtime_r, - p: ___sys_chmod, - e: ___sys_fcntl64, - k: ___sys_fstat64, - o: ___sys_ioctl, - q: ___sys_open, - i: ___sys_rename, - r: ___sys_rmdir, - c: ___sys_stat64, - h: ___sys_unlink, - l: _emscripten_memcpy_big, - m: _emscripten_resize_heap, - f: _fd_close, - j: _fd_fdstat_get, - g: _fd_read, - n: _fd_seek, - d: _fd_write, - a: _setTempRet0, - b: _time, - t: _timegm - }; - var asm = createWasm(); - Module["___wasm_call_ctors"] = asm["v"]; - Module["_zip_ext_count_symlinks"] = asm["w"]; - Module["_zip_file_get_external_attributes"] = asm["x"]; - Module["_zipstruct_stat"] = asm["y"]; - Module["_zipstruct_statS"] = asm["z"]; - Module["_zipstruct_stat_name"] = asm["A"]; - Module["_zipstruct_stat_index"] = asm["B"]; - Module["_zipstruct_stat_size"] = asm["C"]; - Module["_zipstruct_stat_mtime"] = asm["D"]; - Module["_zipstruct_stat_crc"] = asm["E"]; - Module["_zipstruct_error"] = asm["F"]; - Module["_zipstruct_errorS"] = asm["G"]; - Module["_zipstruct_error_code_zip"] = asm["H"]; - Module["_zipstruct_stat_comp_size"] = asm["I"]; - Module["_zipstruct_stat_comp_method"] = asm["J"]; - Module["_zip_close"] = asm["K"]; - Module["_zip_delete"] = asm["L"]; - Module["_zip_dir_add"] = asm["M"]; - Module["_zip_discard"] = asm["N"]; - Module["_zip_error_init_with_code"] = asm["O"]; - Module["_zip_get_error"] = asm["P"]; - Module["_zip_file_get_error"] = asm["Q"]; - Module["_zip_error_strerror"] = asm["R"]; - Module["_zip_fclose"] = asm["S"]; - Module["_zip_file_add"] = asm["T"]; - Module["_free"] = asm["U"]; - var _malloc = Module["_malloc"] = asm["V"]; - var ___errno_location = Module["___errno_location"] = asm["W"]; - Module["_zip_source_error"] = asm["X"]; - Module["_zip_source_seek"] = asm["Y"]; - Module["_zip_file_set_external_attributes"] = asm["Z"]; - Module["_zip_file_set_mtime"] = asm["_"]; - Module["_zip_fopen"] = asm["$"]; - Module["_zip_fopen_index"] = asm["aa"]; - Module["_zip_fread"] = asm["ba"]; - Module["_zip_get_name"] = asm["ca"]; - Module["_zip_get_num_entries"] = asm["da"]; - Module["_zip_source_read"] = asm["ea"]; - Module["_zip_name_locate"] = asm["fa"]; - Module["_zip_open"] = asm["ga"]; - Module["_zip_open_from_source"] = asm["ha"]; - Module["_zip_set_file_compression"] = asm["ia"]; - Module["_zip_source_buffer"] = asm["ja"]; - Module["_zip_source_buffer_create"] = asm["ka"]; - Module["_zip_source_close"] = asm["la"]; - Module["_zip_source_free"] = asm["ma"]; - Module["_zip_source_keep"] = asm["na"]; - Module["_zip_source_open"] = asm["oa"]; - Module["_zip_source_set_mtime"] = asm["qa"]; - Module["_zip_source_tell"] = asm["ra"]; - Module["_zip_stat"] = asm["sa"]; - Module["_zip_stat_index"] = asm["ta"]; - var __get_tzname = Module["__get_tzname"] = asm["ua"]; - var __get_daylight = Module["__get_daylight"] = asm["va"]; - var __get_timezone = Module["__get_timezone"] = asm["wa"]; - var stackSave = Module["stackSave"] = asm["xa"]; - var stackRestore = Module["stackRestore"] = asm["ya"]; - var stackAlloc = Module["stackAlloc"] = asm["za"]; - Module["cwrap"] = cwrap; - Module["getValue"] = getValue; - var calledRun; - dependenciesFulfilled = function runCaller() { - if (!calledRun) - run(); - if (!calledRun) - dependenciesFulfilled = runCaller; - }; - function run(args) { - if (runDependencies > 0) { - return; - } - preRun(); - if (runDependencies > 0) { - return; - } - function doRun() { - if (calledRun) - return; - calledRun = true; - Module["calledRun"] = true; - if (ABORT) - return; - initRuntime(); - readyPromiseResolve(Module); - if (Module["onRuntimeInitialized"]) - Module["onRuntimeInitialized"](); - postRun(); - } - if (Module["setStatus"]) { - Module["setStatus"]("Running..."); - setTimeout(function() { - setTimeout(function() { - Module["setStatus"](""); - }, 1); - doRun(); - }, 1); - } else { - doRun(); - } - } - Module["run"] = run; - if (Module["preInit"]) { - if (typeof Module["preInit"] == "function") - Module["preInit"] = [Module["preInit"]]; - while (Module["preInit"].length > 0) { - Module["preInit"].pop()(); - } - } - run(); - return createModule2; - }; -}(); -module.exports = createModule; -}(libzipSync)); - -const createModule = libzipSync.exports; - -const number64 = [ - `number`, - `number` -]; -var Errors = /* @__PURE__ */ ((Errors2) => { - Errors2[Errors2["ZIP_ER_OK"] = 0] = "ZIP_ER_OK"; - Errors2[Errors2["ZIP_ER_MULTIDISK"] = 1] = "ZIP_ER_MULTIDISK"; - Errors2[Errors2["ZIP_ER_RENAME"] = 2] = "ZIP_ER_RENAME"; - Errors2[Errors2["ZIP_ER_CLOSE"] = 3] = "ZIP_ER_CLOSE"; - Errors2[Errors2["ZIP_ER_SEEK"] = 4] = "ZIP_ER_SEEK"; - Errors2[Errors2["ZIP_ER_READ"] = 5] = "ZIP_ER_READ"; - Errors2[Errors2["ZIP_ER_WRITE"] = 6] = "ZIP_ER_WRITE"; - Errors2[Errors2["ZIP_ER_CRC"] = 7] = "ZIP_ER_CRC"; - Errors2[Errors2["ZIP_ER_ZIPCLOSED"] = 8] = "ZIP_ER_ZIPCLOSED"; - Errors2[Errors2["ZIP_ER_NOENT"] = 9] = "ZIP_ER_NOENT"; - Errors2[Errors2["ZIP_ER_EXISTS"] = 10] = "ZIP_ER_EXISTS"; - Errors2[Errors2["ZIP_ER_OPEN"] = 11] = "ZIP_ER_OPEN"; - Errors2[Errors2["ZIP_ER_TMPOPEN"] = 12] = "ZIP_ER_TMPOPEN"; - Errors2[Errors2["ZIP_ER_ZLIB"] = 13] = "ZIP_ER_ZLIB"; - Errors2[Errors2["ZIP_ER_MEMORY"] = 14] = "ZIP_ER_MEMORY"; - Errors2[Errors2["ZIP_ER_CHANGED"] = 15] = "ZIP_ER_CHANGED"; - Errors2[Errors2["ZIP_ER_COMPNOTSUPP"] = 16] = "ZIP_ER_COMPNOTSUPP"; - Errors2[Errors2["ZIP_ER_EOF"] = 17] = "ZIP_ER_EOF"; - Errors2[Errors2["ZIP_ER_INVAL"] = 18] = "ZIP_ER_INVAL"; - Errors2[Errors2["ZIP_ER_NOZIP"] = 19] = "ZIP_ER_NOZIP"; - Errors2[Errors2["ZIP_ER_INTERNAL"] = 20] = "ZIP_ER_INTERNAL"; - Errors2[Errors2["ZIP_ER_INCONS"] = 21] = "ZIP_ER_INCONS"; - Errors2[Errors2["ZIP_ER_REMOVE"] = 22] = "ZIP_ER_REMOVE"; - Errors2[Errors2["ZIP_ER_DELETED"] = 23] = "ZIP_ER_DELETED"; - Errors2[Errors2["ZIP_ER_ENCRNOTSUPP"] = 24] = "ZIP_ER_ENCRNOTSUPP"; - Errors2[Errors2["ZIP_ER_RDONLY"] = 25] = "ZIP_ER_RDONLY"; - Errors2[Errors2["ZIP_ER_NOPASSWD"] = 26] = "ZIP_ER_NOPASSWD"; - Errors2[Errors2["ZIP_ER_WRONGPASSWD"] = 27] = "ZIP_ER_WRONGPASSWD"; - Errors2[Errors2["ZIP_ER_OPNOTSUPP"] = 28] = "ZIP_ER_OPNOTSUPP"; - Errors2[Errors2["ZIP_ER_INUSE"] = 29] = "ZIP_ER_INUSE"; - Errors2[Errors2["ZIP_ER_TELL"] = 30] = "ZIP_ER_TELL"; - Errors2[Errors2["ZIP_ER_COMPRESSED_DATA"] = 31] = "ZIP_ER_COMPRESSED_DATA"; - return Errors2; -})(Errors || {}); -const makeInterface = (libzip) => ({ - get HEAP8() { - return libzip.HEAP8; - }, - get HEAPU8() { - return libzip.HEAPU8; - }, - errors: Errors, - SEEK_SET: 0, - SEEK_CUR: 1, - SEEK_END: 2, - ZIP_CHECKCONS: 4, - ZIP_CREATE: 1, - ZIP_EXCL: 2, - ZIP_TRUNCATE: 8, - ZIP_RDONLY: 16, - ZIP_FL_OVERWRITE: 8192, - ZIP_FL_COMPRESSED: 4, - ZIP_OPSYS_DOS: 0, - ZIP_OPSYS_AMIGA: 1, - ZIP_OPSYS_OPENVMS: 2, - ZIP_OPSYS_UNIX: 3, - ZIP_OPSYS_VM_CMS: 4, - ZIP_OPSYS_ATARI_ST: 5, - ZIP_OPSYS_OS_2: 6, - ZIP_OPSYS_MACINTOSH: 7, - ZIP_OPSYS_Z_SYSTEM: 8, - ZIP_OPSYS_CPM: 9, - ZIP_OPSYS_WINDOWS_NTFS: 10, - ZIP_OPSYS_MVS: 11, - ZIP_OPSYS_VSE: 12, - ZIP_OPSYS_ACORN_RISC: 13, - ZIP_OPSYS_VFAT: 14, - ZIP_OPSYS_ALTERNATE_MVS: 15, - ZIP_OPSYS_BEOS: 16, - ZIP_OPSYS_TANDEM: 17, - ZIP_OPSYS_OS_400: 18, - ZIP_OPSYS_OS_X: 19, - ZIP_CM_DEFAULT: -1, - ZIP_CM_STORE: 0, - ZIP_CM_DEFLATE: 8, - uint08S: libzip._malloc(1), - uint16S: libzip._malloc(2), - uint32S: libzip._malloc(4), - uint64S: libzip._malloc(8), - malloc: libzip._malloc, - free: libzip._free, - getValue: libzip.getValue, - open: libzip.cwrap(`zip_open`, `number`, [`string`, `number`, `number`]), - openFromSource: libzip.cwrap(`zip_open_from_source`, `number`, [`number`, `number`, `number`]), - close: libzip.cwrap(`zip_close`, `number`, [`number`]), - discard: libzip.cwrap(`zip_discard`, null, [`number`]), - getError: libzip.cwrap(`zip_get_error`, `number`, [`number`]), - getName: libzip.cwrap(`zip_get_name`, `string`, [`number`, `number`, `number`]), - getNumEntries: libzip.cwrap(`zip_get_num_entries`, `number`, [`number`, `number`]), - delete: libzip.cwrap(`zip_delete`, `number`, [`number`, `number`]), - stat: libzip.cwrap(`zip_stat`, `number`, [`number`, `string`, `number`, `number`]), - statIndex: libzip.cwrap(`zip_stat_index`, `number`, [`number`, ...number64, `number`, `number`]), - fopen: libzip.cwrap(`zip_fopen`, `number`, [`number`, `string`, `number`]), - fopenIndex: libzip.cwrap(`zip_fopen_index`, `number`, [`number`, ...number64, `number`]), - fread: libzip.cwrap(`zip_fread`, `number`, [`number`, `number`, `number`, `number`]), - fclose: libzip.cwrap(`zip_fclose`, `number`, [`number`]), - dir: { - add: libzip.cwrap(`zip_dir_add`, `number`, [`number`, `string`]) - }, - file: { - add: libzip.cwrap(`zip_file_add`, `number`, [`number`, `string`, `number`, `number`]), - getError: libzip.cwrap(`zip_file_get_error`, `number`, [`number`]), - getExternalAttributes: libzip.cwrap(`zip_file_get_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), - setExternalAttributes: libzip.cwrap(`zip_file_set_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), - setMtime: libzip.cwrap(`zip_file_set_mtime`, `number`, [`number`, ...number64, `number`, `number`]), - setCompression: libzip.cwrap(`zip_set_file_compression`, `number`, [`number`, ...number64, `number`, `number`]) - }, - ext: { - countSymlinks: libzip.cwrap(`zip_ext_count_symlinks`, `number`, [`number`]) - }, - error: { - initWithCode: libzip.cwrap(`zip_error_init_with_code`, null, [`number`, `number`]), - strerror: libzip.cwrap(`zip_error_strerror`, `string`, [`number`]) - }, - name: { - locate: libzip.cwrap(`zip_name_locate`, `number`, [`number`, `string`, `number`]) - }, - source: { - fromUnattachedBuffer: libzip.cwrap(`zip_source_buffer_create`, `number`, [`number`, ...number64, `number`, `number`]), - fromBuffer: libzip.cwrap(`zip_source_buffer`, `number`, [`number`, `number`, ...number64, `number`]), - free: libzip.cwrap(`zip_source_free`, null, [`number`]), - keep: libzip.cwrap(`zip_source_keep`, null, [`number`]), - open: libzip.cwrap(`zip_source_open`, `number`, [`number`]), - close: libzip.cwrap(`zip_source_close`, `number`, [`number`]), - seek: libzip.cwrap(`zip_source_seek`, `number`, [`number`, ...number64, `number`]), - tell: libzip.cwrap(`zip_source_tell`, `number`, [`number`]), - read: libzip.cwrap(`zip_source_read`, `number`, [`number`, `number`, `number`]), - error: libzip.cwrap(`zip_source_error`, `number`, [`number`]), - setMtime: libzip.cwrap(`zip_source_set_mtime`, `number`, [`number`, `number`]) - }, - struct: { - stat: libzip.cwrap(`zipstruct_stat`, `number`, []), - statS: libzip.cwrap(`zipstruct_statS`, `number`, []), - statName: libzip.cwrap(`zipstruct_stat_name`, `string`, [`number`]), - statIndex: libzip.cwrap(`zipstruct_stat_index`, `number`, [`number`]), - statSize: libzip.cwrap(`zipstruct_stat_size`, `number`, [`number`]), - statCompSize: libzip.cwrap(`zipstruct_stat_comp_size`, `number`, [`number`]), - statCompMethod: libzip.cwrap(`zipstruct_stat_comp_method`, `number`, [`number`]), - statMtime: libzip.cwrap(`zipstruct_stat_mtime`, `number`, [`number`]), - statCrc: libzip.cwrap(`zipstruct_stat_crc`, `number`, [`number`]), - error: libzip.cwrap(`zipstruct_error`, `number`, []), - errorS: libzip.cwrap(`zipstruct_errorS`, `number`, []), - errorCodeZip: libzip.cwrap(`zipstruct_error_code_zip`, `number`, [`number`]) - } -}); - -let mod = null; -function getLibzipSync() { - if (mod === null) - mod = makeInterface(createModule()); - return mod; -} - -var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => { - ErrorCode2["API_ERROR"] = `API_ERROR`; - ErrorCode2["BUILTIN_NODE_RESOLUTION_FAILED"] = `BUILTIN_NODE_RESOLUTION_FAILED`; - ErrorCode2["EXPORTS_RESOLUTION_FAILED"] = `EXPORTS_RESOLUTION_FAILED`; - ErrorCode2["MISSING_DEPENDENCY"] = `MISSING_DEPENDENCY`; - ErrorCode2["MISSING_PEER_DEPENDENCY"] = `MISSING_PEER_DEPENDENCY`; - ErrorCode2["QUALIFIED_PATH_RESOLUTION_FAILED"] = `QUALIFIED_PATH_RESOLUTION_FAILED`; - ErrorCode2["INTERNAL"] = `INTERNAL`; - ErrorCode2["UNDECLARED_DEPENDENCY"] = `UNDECLARED_DEPENDENCY`; - ErrorCode2["UNSUPPORTED"] = `UNSUPPORTED`; - return ErrorCode2; -})(ErrorCode || {}); -const MODULE_NOT_FOUND_ERRORS = /* @__PURE__ */ new Set([ - "BUILTIN_NODE_RESOLUTION_FAILED" /* BUILTIN_NODE_RESOLUTION_FAILED */, - "MISSING_DEPENDENCY" /* MISSING_DEPENDENCY */, - "MISSING_PEER_DEPENDENCY" /* MISSING_PEER_DEPENDENCY */, - "QUALIFIED_PATH_RESOLUTION_FAILED" /* QUALIFIED_PATH_RESOLUTION_FAILED */, - "UNDECLARED_DEPENDENCY" /* UNDECLARED_DEPENDENCY */ -]); -function makeError(pnpCode, message, data = {}, code) { - code != null ? code : code = MODULE_NOT_FOUND_ERRORS.has(pnpCode) ? `MODULE_NOT_FOUND` : pnpCode; - const propertySpec = { - configurable: true, - writable: true, - enumerable: false - }; - return Object.defineProperties(new Error(message), { - code: { - ...propertySpec, - value: code - }, - pnpCode: { - ...propertySpec, - value: pnpCode - }, - data: { - ...propertySpec, - value: data - } - }); -} -function getIssuerModule(parent) { - let issuer = parent; - while (issuer && (issuer.id === `[eval]` || issuer.id === `` || !issuer.filename)) - issuer = issuer.parent; - return issuer || null; -} -function getPathForDisplay(p) { - return npath.normalize(npath.fromPortablePath(p)); -} - -const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); -const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13; - -const builtinModules = new Set(require$$0.Module.builtinModules || Object.keys(process.binding(`natives`))); -const isBuiltinModule = (request) => request.startsWith(`node:`) || builtinModules.has(request); -function readPackageScope(checkPath) { - const rootSeparatorIndex = checkPath.indexOf(npath.sep); - let separatorIndex; - do { - separatorIndex = checkPath.lastIndexOf(npath.sep); - checkPath = checkPath.slice(0, separatorIndex); - if (checkPath.endsWith(`${npath.sep}node_modules`)) - return false; - const pjson = readPackage(checkPath + npath.sep); - if (pjson) { - return { - data: pjson, - path: checkPath - }; - } - } while (separatorIndex > rootSeparatorIndex); - return false; -} -function readPackage(requestPath) { - const jsonPath = npath.resolve(requestPath, `package.json`); - if (!fs__default.default.existsSync(jsonPath)) - return null; - return JSON.parse(fs__default.default.readFileSync(jsonPath, `utf8`)); -} -function ERR_REQUIRE_ESM(filename, parentPath = null) { - const basename = parentPath && path__default.default.basename(filename) === path__default.default.basename(parentPath) ? filename : path__default.default.basename(filename); - const msg = `require() of ES Module ${filename}${parentPath ? ` from ${parentPath}` : ``} not supported. -Instead change the require of ${basename} in ${parentPath} to a dynamic import() which is available in all CommonJS modules.`; - const err = new Error(msg); - err.code = `ERR_REQUIRE_ESM`; - return err; -} -function reportRequiredFilesToWatchMode(files) { - if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { - files = files.map((filename) => npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename)))); - if (WATCH_MODE_MESSAGE_USES_ARRAYS) { - process.send({ "watch:require": files }); - } else { - for (const filename of files) { - process.send({ "watch:require": filename }); - } - } - } -} - -function applyPatch(pnpapi, opts) { - let enableNativeHooks = true; - process.versions.pnp = String(pnpapi.VERSIONS.std); - const moduleExports = require$$0__default.default; - moduleExports.findPnpApi = (lookupSource) => { - const lookupPath = lookupSource instanceof url.URL ? url.fileURLToPath(lookupSource) : lookupSource; - const apiPath = opts.manager.findApiPathFor(lookupPath); - if (apiPath === null) - return null; - const apiEntry = opts.manager.getApiEntry(apiPath, true); - return apiEntry.instance.findPackageLocator(lookupPath) ? apiEntry.instance : null; - }; - function getRequireStack(parent) { - const requireStack = []; - for (let cursor = parent; cursor; cursor = cursor.parent) - requireStack.push(cursor.filename || cursor.id); - return requireStack; - } - const originalModuleLoad = require$$0.Module._load; - require$$0.Module._load = function(request, parent, isMain) { - if (request === `pnpapi`) { - const parentApiPath = opts.manager.getApiPathFromParent(parent); - if (parentApiPath) { - return opts.manager.getApiEntry(parentApiPath, true).instance; - } - } - return originalModuleLoad.call(require$$0.Module, request, parent, isMain); - }; - function getIssuerSpecsFromPaths(paths) { - return paths.map((path) => ({ - apiPath: opts.manager.findApiPathFor(path), - path, - module: null - })); - } - function getIssuerSpecsFromModule(module) { - var _a; - if (module && module.id !== `` && module.id !== `internal/preload` && !module.parent && !module.filename && module.paths.length > 0) { - return [{ - apiPath: opts.manager.findApiPathFor(module.paths[0]), - path: module.paths[0], - module - }]; - } - const issuer = getIssuerModule(module); - if (issuer !== null) { - const path = npath.dirname(issuer.filename); - const apiPath = opts.manager.getApiPathFromParent(issuer); - return [{ apiPath, path, module }]; - } else { - const path = process.cwd(); - const apiPath = (_a = opts.manager.findApiPathFor(npath.join(path, `[file]`))) != null ? _a : opts.manager.getApiPathFromParent(null); - return [{ apiPath, path, module }]; - } - } - function makeFakeParent(path) { - const fakeParent = new require$$0.Module(``); - const fakeFilePath = npath.join(path, `[file]`); - fakeParent.paths = require$$0.Module._nodeModulePaths(fakeFilePath); - return fakeParent; - } - const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/; - const originalModuleResolveFilename = require$$0.Module._resolveFilename; - require$$0.Module._resolveFilename = function(request, parent, isMain, options) { - if (isBuiltinModule(request)) - return request; - if (!enableNativeHooks) - return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, options); - if (options && options.plugnplay === false) { - const { plugnplay, ...rest } = options; - const forwardedOptions = Object.keys(rest).length > 0 ? rest : void 0; - try { - enableNativeHooks = false; - return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, forwardedOptions); - } finally { - enableNativeHooks = true; - } - } - if (options) { - const optionNames = new Set(Object.keys(options)); - optionNames.delete(`paths`); - optionNames.delete(`plugnplay`); - if (optionNames.size > 0) { - throw makeError( - ErrorCode.UNSUPPORTED, - `Some options passed to require() aren't supported by PnP yet (${Array.from(optionNames).join(`, `)})` - ); - } - } - const issuerSpecs = options && options.paths ? getIssuerSpecsFromPaths(options.paths) : getIssuerSpecsFromModule(parent); - if (request.match(pathRegExp) === null) { - const parentDirectory = (parent == null ? void 0 : parent.filename) != null ? npath.dirname(parent.filename) : null; - const absoluteRequest = npath.isAbsolute(request) ? request : parentDirectory !== null ? npath.resolve(parentDirectory, request) : null; - if (absoluteRequest !== null) { - const apiPath = parent && parentDirectory === npath.dirname(absoluteRequest) ? opts.manager.getApiPathFromParent(parent) : opts.manager.findApiPathFor(absoluteRequest); - if (apiPath !== null) { - issuerSpecs.unshift({ - apiPath, - path: parentDirectory, - module: null - }); - } - } - } - let firstError; - for (const { apiPath, path, module } of issuerSpecs) { - let resolution; - const issuerApi = apiPath !== null ? opts.manager.getApiEntry(apiPath, true).instance : null; - try { - if (issuerApi !== null) { - resolution = issuerApi.resolveRequest(request, path !== null ? `${path}/` : null); - } else { - if (path === null) - throw new Error(`Assertion failed: Expected the path to be set`); - resolution = originalModuleResolveFilename.call(require$$0.Module, request, module || makeFakeParent(path), isMain); - } - } catch (error) { - firstError = firstError || error; - continue; - } - if (resolution !== null) { - return resolution; - } - } - const requireStack = getRequireStack(parent); - Object.defineProperty(firstError, `requireStack`, { - configurable: true, - writable: true, - enumerable: false, - value: requireStack - }); - if (requireStack.length > 0) - firstError.message += ` -Require stack: -- ${requireStack.join(` -- `)}`; - if (typeof firstError.pnpCode === `string`) - Error.captureStackTrace(firstError); - throw firstError; - }; - const originalFindPath = require$$0.Module._findPath; - require$$0.Module._findPath = function(request, paths, isMain) { - if (request === `pnpapi`) - return false; - if (!enableNativeHooks) - return originalFindPath.call(require$$0.Module, request, paths, isMain); - const isAbsolute = npath.isAbsolute(request); - if (isAbsolute) - paths = [``]; - else if (!paths || paths.length === 0) - return false; - for (const path of paths) { - let resolution; - try { - const pnpApiPath = opts.manager.findApiPathFor(isAbsolute ? request : path); - if (pnpApiPath !== null) { - const api = opts.manager.getApiEntry(pnpApiPath, true).instance; - resolution = api.resolveRequest(request, path) || false; - } else { - resolution = originalFindPath.call(require$$0.Module, request, [path], isMain); - } - } catch (error) { - continue; - } - if (resolution) { - return resolution; - } - } - return false; - }; - const originalExtensionJSFunction = require$$0.Module._extensions[`.js`]; - require$$0.Module._extensions[`.js`] = function(module, filename) { - var _a, _b; - if (filename.endsWith(`.js`)) { - const pkg = readPackageScope(filename); - if (pkg && ((_a = pkg.data) == null ? void 0 : _a.type) === `module`) { - const err = ERR_REQUIRE_ESM(filename, (_b = module.parent) == null ? void 0 : _b.filename); - Error.captureStackTrace(err); - throw err; - } - } - originalExtensionJSFunction.call(this, module, filename); - }; - const originalDlopen = process.dlopen; - process.dlopen = function(...args) { - const [module, filename, ...rest] = args; - return originalDlopen.call( - this, - module, - npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename))), - ...rest - ); - }; - const originalEmit = process.emit; - process.emit = function(name, data, ...args) { - if (name === `warning` && typeof data === `object` && data.name === `ExperimentalWarning` && (data.message.includes(`--experimental-loader`) || data.message.includes(`Custom ESM Loaders is an experimental feature`))) - return false; - return originalEmit.apply(process, arguments); - }; - patchFs(fs__default.default, new PosixFS(opts.fakeFs)); -} - -function hydrateRuntimeState(data, { basePath }) { - const portablePath = npath.toPortablePath(basePath); - const absolutePortablePath = ppath.resolve(portablePath); - const ignorePattern = data.ignorePatternData !== null ? new RegExp(data.ignorePatternData) : null; - const packageLocatorsByLocations = /* @__PURE__ */ new Map(); - const packageRegistry = new Map(data.packageRegistryData.map(([packageName, packageStoreData]) => { - return [packageName, new Map(packageStoreData.map(([packageReference, packageInformationData]) => { - var _a; - if (packageName === null !== (packageReference === null)) - throw new Error(`Assertion failed: The name and reference should be null, or neither should`); - const discardFromLookup = (_a = packageInformationData.discardFromLookup) != null ? _a : false; - const packageLocator = { name: packageName, reference: packageReference }; - const entry = packageLocatorsByLocations.get(packageInformationData.packageLocation); - if (!entry) { - packageLocatorsByLocations.set(packageInformationData.packageLocation, { locator: packageLocator, discardFromLookup }); - } else { - entry.discardFromLookup = entry.discardFromLookup && discardFromLookup; - if (!discardFromLookup) { - entry.locator = packageLocator; - } - } - let resolvedPackageLocation = null; - return [packageReference, { - packageDependencies: new Map(packageInformationData.packageDependencies), - packagePeers: new Set(packageInformationData.packagePeers), - linkType: packageInformationData.linkType, - discardFromLookup, - get packageLocation() { - return resolvedPackageLocation || (resolvedPackageLocation = ppath.join(absolutePortablePath, packageInformationData.packageLocation)); - } - }]; - }))]; - })); - const fallbackExclusionList = new Map(data.fallbackExclusionList.map(([packageName, packageReferences]) => { - return [packageName, new Set(packageReferences)]; - })); - const fallbackPool = new Map(data.fallbackPool); - const dependencyTreeRoots = data.dependencyTreeRoots; - const enableTopLevelFallback = data.enableTopLevelFallback; - return { - basePath: portablePath, - dependencyTreeRoots, - enableTopLevelFallback, - fallbackExclusionList, - fallbackPool, - ignorePattern, - packageLocatorsByLocations, - packageRegistry - }; -} - -const ArrayIsArray = Array.isArray; -const JSONStringify = JSON.stringify; -const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; -const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); -const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); -const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); -const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); -const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); -const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); -const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); -const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); -const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); -const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); -const SafeMap = Map; -const JSONParse = JSON.parse; - -function createErrorType(code, messageCreator, errorType) { - return class extends errorType { - constructor(...args) { - super(messageCreator(...args)); - this.code = code; - this.name = `${errorType.name} [${code}]`; - } - }; -} -const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( - `ERR_PACKAGE_IMPORT_NOT_DEFINED`, - (specifier, packagePath, base) => { - return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; - }, - TypeError -); -const ERR_INVALID_MODULE_SPECIFIER = createErrorType( - `ERR_INVALID_MODULE_SPECIFIER`, - (request, reason, base = void 0) => { - return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; - }, - TypeError -); -const ERR_INVALID_PACKAGE_TARGET = createErrorType( - `ERR_INVALID_PACKAGE_TARGET`, - (pkgPath, key, target, isImport = false, base = void 0) => { - const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); - if (key === `.`) { - assert__default.default(isImport === false); - return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; - } - return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( - target - )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; - }, - Error -); -const ERR_INVALID_PACKAGE_CONFIG = createErrorType( - `ERR_INVALID_PACKAGE_CONFIG`, - (path, base, message) => { - return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; - }, - Error -); -const ERR_PACKAGE_PATH_NOT_EXPORTED = createErrorType( - "ERR_PACKAGE_PATH_NOT_EXPORTED", - (pkgPath, subpath, base = void 0) => { - if (subpath === ".") - return `No "exports" main defined in ${pkgPath}package.json${base ? ` imported from ${base}` : ""}`; - return `Package subpath '${subpath}' is not defined by "exports" in ${pkgPath}package.json${base ? ` imported from ${base}` : ""}`; - }, - Error -); - -function filterOwnProperties(source, keys) { - const filtered = /* @__PURE__ */ Object.create(null); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - if (ObjectPrototypeHasOwnProperty(source, key)) { - filtered[key] = source[key]; - } - } - return filtered; -} - -const packageJSONCache = new SafeMap(); -function getPackageConfig(path, specifier, base, readFileSyncFn) { - const existing = packageJSONCache.get(path); - if (existing !== void 0) { - return existing; - } - const source = readFileSyncFn(path); - if (source === void 0) { - const packageConfig2 = { - pjsonPath: path, - exists: false, - main: void 0, - name: void 0, - type: "none", - exports: void 0, - imports: void 0 - }; - packageJSONCache.set(path, packageConfig2); - return packageConfig2; - } - let packageJSON; - try { - packageJSON = JSONParse(source); - } catch (error) { - throw new ERR_INVALID_PACKAGE_CONFIG( - path, - (base ? `"${specifier}" from ` : "") + url.fileURLToPath(base || specifier), - error.message - ); - } - let { imports, main, name, type } = filterOwnProperties(packageJSON, [ - "imports", - "main", - "name", - "type" - ]); - const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; - if (typeof imports !== "object" || imports === null) { - imports = void 0; - } - if (typeof main !== "string") { - main = void 0; - } - if (typeof name !== "string") { - name = void 0; - } - if (type !== "module" && type !== "commonjs") { - type = "none"; - } - const packageConfig = { - pjsonPath: path, - exists: true, - main, - name, - type, - exports, - imports - }; - packageJSONCache.set(path, packageConfig); - return packageConfig; -} -function getPackageScopeConfig(resolved, readFileSyncFn) { - let packageJSONUrl = new URL("./package.json", resolved); - while (true) { - const packageJSONPath2 = packageJSONUrl.pathname; - if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { - break; - } - const packageConfig2 = getPackageConfig( - url.fileURLToPath(packageJSONUrl), - resolved, - void 0, - readFileSyncFn - ); - if (packageConfig2.exists) { - return packageConfig2; - } - const lastPackageJSONUrl = packageJSONUrl; - packageJSONUrl = new URL("../package.json", packageJSONUrl); - if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { - break; - } - } - const packageJSONPath = url.fileURLToPath(packageJSONUrl); - const packageConfig = { - pjsonPath: packageJSONPath, - exists: false, - main: void 0, - name: void 0, - type: "none", - exports: void 0, - imports: void 0 - }; - packageJSONCache.set(packageJSONPath, packageConfig); - return packageConfig; -} - -/** - @license - Copyright Node.js contributors. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. -*/ -function throwImportNotDefined(specifier, packageJSONUrl, base) { - throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( - specifier, - packageJSONUrl && url.fileURLToPath(new URL(".", packageJSONUrl)), - url.fileURLToPath(base) - ); -} -function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { - const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${url.fileURLToPath(packageJSONUrl)}`; - throw new ERR_INVALID_MODULE_SPECIFIER( - subpath, - reason, - base && url.fileURLToPath(base) - ); -} -function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { - if (typeof target === "object" && target !== null) { - target = JSONStringify(target, null, ""); - } else { - target = `${target}`; - } - throw new ERR_INVALID_PACKAGE_TARGET( - url.fileURLToPath(new URL(".", packageJSONUrl)), - subpath, - target, - internal, - base && url.fileURLToPath(base) - ); -} -const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; -const patternRegEx = /\*/g; -function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { - if (subpath !== "" && !pattern && target[target.length - 1] !== "/") - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - if (!StringPrototypeStartsWith(target, "./")) { - if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { - let isURL = false; - try { - new URL(target); - isURL = true; - } catch { - } - if (!isURL) { - const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; - return exportTarget; - } - } - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - } - if (RegExpPrototypeExec( - invalidSegmentRegEx, - StringPrototypeSlice(target, 2) - ) !== null) - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - const resolved = new URL(target, packageJSONUrl); - const resolvedPath = resolved.pathname; - const packagePath = new URL(".", packageJSONUrl).pathname; - if (!StringPrototypeStartsWith(resolvedPath, packagePath)) - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - if (subpath === "") - return resolved; - if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { - const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; - throwInvalidSubpath(request, packageJSONUrl, internal, base); - } - if (pattern) { - return new URL( - RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) - ); - } - return new URL(subpath, resolved); -} -function isArrayIndex(key) { - const keyNum = +key; - if (`${keyNum}` !== key) - return false; - return keyNum >= 0 && keyNum < 4294967295; -} -function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { - if (typeof target === "string") { - return resolvePackageTargetString( - target, - subpath, - packageSubpath, - packageJSONUrl, - base, - pattern, - internal); - } else if (ArrayIsArray(target)) { - if (target.length === 0) { - return null; - } - let lastException; - for (let i = 0; i < target.length; i++) { - const targetItem = target[i]; - let resolveResult; - try { - resolveResult = resolvePackageTarget( - packageJSONUrl, - targetItem, - subpath, - packageSubpath, - base, - pattern, - internal, - conditions - ); - } catch (e) { - lastException = e; - if (e.code === "ERR_INVALID_PACKAGE_TARGET") { - continue; - } - throw e; - } - if (resolveResult === void 0) { - continue; - } - if (resolveResult === null) { - lastException = null; - continue; - } - return resolveResult; - } - if (lastException === void 0 || lastException === null) - return lastException; - throw lastException; - } else if (typeof target === "object" && target !== null) { - const keys = ObjectGetOwnPropertyNames(target); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - if (isArrayIndex(key)) { - throw new ERR_INVALID_PACKAGE_CONFIG( - url.fileURLToPath(packageJSONUrl), - base, - '"exports" cannot contain numeric property keys.' - ); - } - } - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - if (key === "default" || conditions.has(key)) { - const conditionalTarget = target[key]; - const resolveResult = resolvePackageTarget( - packageJSONUrl, - conditionalTarget, - subpath, - packageSubpath, - base, - pattern, - internal, - conditions - ); - if (resolveResult === void 0) - continue; - return resolveResult; - } - } - return void 0; - } else if (target === null) { - return null; - } - throwInvalidPackageTarget( - packageSubpath, - target, - packageJSONUrl, - internal, - base - ); -} -function patternKeyCompare(a, b) { - const aPatternIndex = StringPrototypeIndexOf(a, "*"); - const bPatternIndex = StringPrototypeIndexOf(b, "*"); - const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; - const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; - if (baseLenA > baseLenB) - return -1; - if (baseLenB > baseLenA) - return 1; - if (aPatternIndex === -1) - return 1; - if (bPatternIndex === -1) - return -1; - if (a.length > b.length) - return -1; - if (b.length > a.length) - return 1; - return 0; -} -function isConditionalExportsMainSugar(exports, packageJSONUrl, base) { - if (typeof exports === "string" || ArrayIsArray(exports)) - return true; - if (typeof exports !== "object" || exports === null) - return false; - const keys = ObjectGetOwnPropertyNames(exports); - let isConditionalSugar = false; - let i = 0; - for (let j = 0; j < keys.length; j++) { - const key = keys[j]; - const curIsConditionalSugar = key === "" || key[0] !== "."; - if (i++ === 0) { - isConditionalSugar = curIsConditionalSugar; - } else if (isConditionalSugar !== curIsConditionalSugar) { - throw new ERR_INVALID_PACKAGE_CONFIG( - url.fileURLToPath(packageJSONUrl), - base, - `"exports" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.` - ); - } - } - return isConditionalSugar; -} -function throwExportsNotFound(subpath, packageJSONUrl, base) { - throw new ERR_PACKAGE_PATH_NOT_EXPORTED( - url.fileURLToPath(new URL(".", packageJSONUrl)), - subpath, - base && url.fileURLToPath(base) - ); -} -const emittedPackageWarnings = /* @__PURE__ */ new Set(); -function emitTrailingSlashPatternDeprecation(match, pjsonUrl, base) { - const pjsonPath = url.fileURLToPath(pjsonUrl); - if (emittedPackageWarnings.has(pjsonPath + "|" + match)) - return; - emittedPackageWarnings.add(pjsonPath + "|" + match); - process.emitWarning( - `Use of deprecated trailing slash pattern mapping "${match}" in the "exports" field module resolution of the package at ${pjsonPath}${base ? ` imported from ${url.fileURLToPath(base)}` : ""}. Mapping specifiers ending in "/" is no longer supported.`, - "DeprecationWarning", - "DEP0155" - ); -} -function packageExportsResolve({ - packageJSONUrl, - packageSubpath, - exports, - base, - conditions -}) { - if (isConditionalExportsMainSugar(exports, packageJSONUrl, base)) - exports = { ".": exports }; - if (ObjectPrototypeHasOwnProperty(exports, packageSubpath) && !StringPrototypeIncludes(packageSubpath, "*") && !StringPrototypeEndsWith(packageSubpath, "/")) { - const target = exports[packageSubpath]; - const resolveResult = resolvePackageTarget( - packageJSONUrl, - target, - "", - packageSubpath, - base, - false, - false, - conditions - ); - if (resolveResult == null) { - throwExportsNotFound(packageSubpath, packageJSONUrl, base); - } - return resolveResult; - } - let bestMatch = ""; - let bestMatchSubpath; - const keys = ObjectGetOwnPropertyNames(exports); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - const patternIndex = StringPrototypeIndexOf(key, "*"); - if (patternIndex !== -1 && StringPrototypeStartsWith( - packageSubpath, - StringPrototypeSlice(key, 0, patternIndex) - )) { - if (StringPrototypeEndsWith(packageSubpath, "/")) - emitTrailingSlashPatternDeprecation( - packageSubpath, - packageJSONUrl, - base - ); - const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); - if (packageSubpath.length >= key.length && StringPrototypeEndsWith(packageSubpath, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { - bestMatch = key; - bestMatchSubpath = StringPrototypeSlice( - packageSubpath, - patternIndex, - packageSubpath.length - patternTrailer.length - ); - } - } - } - if (bestMatch) { - const target = exports[bestMatch]; - const resolveResult = resolvePackageTarget( - packageJSONUrl, - target, - bestMatchSubpath, - bestMatch, - base, - true, - false, - conditions - ); - if (resolveResult == null) { - throwExportsNotFound(packageSubpath, packageJSONUrl, base); - } - return resolveResult; - } - throwExportsNotFound(packageSubpath, packageJSONUrl, base); -} -function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { - if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { - const reason = "is not a valid internal imports specifier name"; - throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, url.fileURLToPath(base)); - } - let packageJSONUrl; - const packageConfig = getPackageScopeConfig(base, readFileSyncFn); - if (packageConfig.exists) { - packageJSONUrl = url.pathToFileURL(packageConfig.pjsonPath); - const imports = packageConfig.imports; - if (imports) { - if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { - const resolveResult = resolvePackageTarget( - packageJSONUrl, - imports[name], - "", - name, - base, - false, - true, - conditions - ); - if (resolveResult != null) { - return resolveResult; - } - } else { - let bestMatch = ""; - let bestMatchSubpath; - const keys = ObjectGetOwnPropertyNames(imports); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - const patternIndex = StringPrototypeIndexOf(key, "*"); - if (patternIndex !== -1 && StringPrototypeStartsWith( - name, - StringPrototypeSlice(key, 0, patternIndex) - )) { - const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); - if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { - bestMatch = key; - bestMatchSubpath = StringPrototypeSlice( - name, - patternIndex, - name.length - patternTrailer.length - ); - } - } - } - if (bestMatch) { - const target = imports[bestMatch]; - const resolveResult = resolvePackageTarget( - packageJSONUrl, - target, - bestMatchSubpath, - bestMatch, - base, - true, - true, - conditions - ); - if (resolveResult != null) { - return resolveResult; - } - } - } - } - } - throwImportNotDefined(name, packageJSONUrl, base); -} - -const flagSymbol = Symbol('arg flag'); - -class ArgError extends Error { - constructor(msg, code) { - super(msg); - this.name = 'ArgError'; - this.code = code; - - Object.setPrototypeOf(this, ArgError.prototype); - } -} - -function arg( - opts, - { - argv = process.argv.slice(2), - permissive = false, - stopAtPositional = false - } = {} -) { - if (!opts) { - throw new ArgError( - 'argument specification object is required', - 'ARG_CONFIG_NO_SPEC' - ); - } - - const result = { _: [] }; - - const aliases = {}; - const handlers = {}; - - for (const key of Object.keys(opts)) { - if (!key) { - throw new ArgError( - 'argument key cannot be an empty string', - 'ARG_CONFIG_EMPTY_KEY' - ); - } - - if (key[0] !== '-') { - throw new ArgError( - `argument key must start with '-' but found: '${key}'`, - 'ARG_CONFIG_NONOPT_KEY' - ); - } - - if (key.length === 1) { - throw new ArgError( - `argument key must have a name; singular '-' keys are not allowed: ${key}`, - 'ARG_CONFIG_NONAME_KEY' - ); - } - - if (typeof opts[key] === 'string') { - aliases[key] = opts[key]; - continue; - } - - let type = opts[key]; - let isFlag = false; - - if ( - Array.isArray(type) && - type.length === 1 && - typeof type[0] === 'function' - ) { - const [fn] = type; - type = (value, name, prev = []) => { - prev.push(fn(value, name, prev[prev.length - 1])); - return prev; - }; - isFlag = fn === Boolean || fn[flagSymbol] === true; - } else if (typeof type === 'function') { - isFlag = type === Boolean || type[flagSymbol] === true; - } else { - throw new ArgError( - `type missing or not a function or valid array type: ${key}`, - 'ARG_CONFIG_VAD_TYPE' - ); - } - - if (key[1] !== '-' && key.length > 2) { - throw new ArgError( - `short argument keys (with a single hyphen) must have only one character: ${key}`, - 'ARG_CONFIG_SHORTOPT_TOOLONG' - ); - } - - handlers[key] = [type, isFlag]; - } - - for (let i = 0, len = argv.length; i < len; i++) { - const wholeArg = argv[i]; - - if (stopAtPositional && result._.length > 0) { - result._ = result._.concat(argv.slice(i)); - break; - } - - if (wholeArg === '--') { - result._ = result._.concat(argv.slice(i + 1)); - break; - } - - if (wholeArg.length > 1 && wholeArg[0] === '-') { - /* eslint-disable operator-linebreak */ - const separatedArguments = - wholeArg[1] === '-' || wholeArg.length === 2 - ? [wholeArg] - : wholeArg - .slice(1) - .split('') - .map((a) => `-${a}`); - /* eslint-enable operator-linebreak */ - - for (let j = 0; j < separatedArguments.length; j++) { - const arg = separatedArguments[j]; - const [originalArgName, argStr] = - arg[1] === '-' ? arg.split(/=(.*)/, 2) : [arg, undefined]; - - let argName = originalArgName; - while (argName in aliases) { - argName = aliases[argName]; - } - - if (!(argName in handlers)) { - if (permissive) { - result._.push(arg); - continue; - } else { - throw new ArgError( - `unknown or unexpected option: ${originalArgName}`, - 'ARG_UNKNOWN_OPTION' - ); - } - } - - const [type, isFlag] = handlers[argName]; - - if (!isFlag && j + 1 < separatedArguments.length) { - throw new ArgError( - `option requires argument (but was followed by another short argument): ${originalArgName}`, - 'ARG_MISSING_REQUIRED_SHORTARG' - ); - } - - if (isFlag) { - result[argName] = type(true, argName, result[argName]); - } else if (argStr === undefined) { - if ( - argv.length < i + 2 || - (argv[i + 1].length > 1 && - argv[i + 1][0] === '-' && - !( - argv[i + 1].match(/^-?\d*(\.(?=\d))?\d*$/) && - (type === Number || - // eslint-disable-next-line no-undef - (typeof BigInt !== 'undefined' && type === BigInt)) - )) - ) { - const extended = - originalArgName === argName ? '' : ` (alias for ${argName})`; - throw new ArgError( - `option requires argument: ${originalArgName}${extended}`, - 'ARG_MISSING_REQUIRED_LONGARG' - ); - } - - result[argName] = type(argv[i + 1], argName, result[argName]); - ++i; - } else { - result[argName] = type(argStr, argName, result[argName]); - } - } - } else { - result._.push(wholeArg); - } - } - - return result; -} - -arg.flag = (fn) => { - fn[flagSymbol] = true; - return fn; -}; - -// Utility types -arg.COUNT = arg.flag((v, name, existingCount) => (existingCount || 0) + 1); - -// Expose error class -arg.ArgError = ArgError; - -var arg_1 = arg; - -/** - @license - The MIT License (MIT) - - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ -function getOptionValue(opt) { - parseOptions(); - return options[opt]; -} -let options; -function parseOptions() { - if (!options) { - options = { - "--conditions": [], - ...parseArgv(getNodeOptionsEnvArgv()), - ...parseArgv(process.execArgv) - }; - } -} -function parseArgv(argv) { - return arg_1( - { - "--conditions": [String], - "-C": "--conditions" - }, - { - argv, - permissive: true - } - ); -} -function getNodeOptionsEnvArgv() { - const errors = []; - const envArgv = ParseNodeOptionsEnvVar(process.env.NODE_OPTIONS || "", errors); - if (errors.length !== 0) ; - return envArgv; -} -function ParseNodeOptionsEnvVar(node_options, errors) { - const env_argv = []; - let is_in_string = false; - let will_start_new_arg = true; - for (let index = 0; index < node_options.length; ++index) { - let c = node_options[index]; - if (c === "\\" && is_in_string) { - if (index + 1 === node_options.length) { - errors.push("invalid value for NODE_OPTIONS (invalid escape)\n"); - return env_argv; - } else { - c = node_options[++index]; - } - } else if (c === " " && !is_in_string) { - will_start_new_arg = true; - continue; - } else if (c === '"') { - is_in_string = !is_in_string; - continue; - } - if (will_start_new_arg) { - env_argv.push(c); - will_start_new_arg = false; - } else { - env_argv[env_argv.length - 1] += c; - } - } - if (is_in_string) { - errors.push("invalid value for NODE_OPTIONS (unterminated string)\n"); - } - return env_argv; -} - -function makeApi(runtimeState, opts) { - const alwaysWarnOnFallback = Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK) > 0; - const debugLevel = Number(process.env.PNP_DEBUG_LEVEL); - const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; - const isStrictRegExp = /^(\/|\.{1,2}(\/|$))/; - const isDirRegExp = /\/$/; - const isRelativeRegexp = /^\.{0,2}\//; - const topLevelLocator = { name: null, reference: null }; - const fallbackLocators = []; - const emittedWarnings = /* @__PURE__ */ new Set(); - if (runtimeState.enableTopLevelFallback === true) - fallbackLocators.push(topLevelLocator); - if (opts.compatibilityMode !== false) { - for (const name of [`react-scripts`, `gatsby`]) { - const packageStore = runtimeState.packageRegistry.get(name); - if (packageStore) { - for (const reference of packageStore.keys()) { - if (reference === null) { - throw new Error(`Assertion failed: This reference shouldn't be null`); - } else { - fallbackLocators.push({ name, reference }); - } - } - } - } - } - const { - ignorePattern, - packageRegistry, - packageLocatorsByLocations - } = runtimeState; - function makeLogEntry(name, args) { - return { - fn: name, - args, - error: null, - result: null - }; - } - function trace(entry) { - var _a, _b, _c, _d, _e, _f; - const colors = (_c = (_b = (_a = process.stderr) == null ? void 0 : _a.hasColors) == null ? void 0 : _b.call(_a)) != null ? _c : process.stdout.isTTY; - const c = (n, str) => `\x1B[${n}m${str}\x1B[0m`; - const error = entry.error; - if (error) - console.error(c(`31;1`, `\u2716 ${(_d = entry.error) == null ? void 0 : _d.message.replace(/\n.*/s, ``)}`)); - else - console.error(c(`33;1`, `\u203C Resolution`)); - if (entry.args.length > 0) - console.error(); - for (const arg of entry.args) - console.error(` ${c(`37;1`, `In \u2190`)} ${nodeUtils.inspect(arg, { colors, compact: true })}`); - if (entry.result) { - console.error(); - console.error(` ${c(`37;1`, `Out \u2192`)} ${nodeUtils.inspect(entry.result, { colors, compact: true })}`); - } - const stack = (_f = (_e = new Error().stack.match(/(?<=^ +)at.*/gm)) == null ? void 0 : _e.slice(2)) != null ? _f : []; - if (stack.length > 0) { - console.error(); - for (const line of stack) { - console.error(` ${c(`38;5;244`, line)}`); - } - } - console.error(); - } - function maybeLog(name, fn) { - if (opts.allowDebug === false) - return fn; - if (Number.isFinite(debugLevel)) { - if (debugLevel >= 2) { - return (...args) => { - const logEntry = makeLogEntry(name, args); - try { - return logEntry.result = fn(...args); - } catch (error) { - throw logEntry.error = error; - } finally { - trace(logEntry); - } - }; - } else if (debugLevel >= 1) { - return (...args) => { - try { - return fn(...args); - } catch (error) { - const logEntry = makeLogEntry(name, args); - logEntry.error = error; - trace(logEntry); - throw error; - } - }; - } - } - return fn; - } - function getPackageInformationSafe(packageLocator) { - const packageInformation = getPackageInformation(packageLocator); - if (!packageInformation) { - throw makeError( - ErrorCode.INTERNAL, - `Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)` - ); - } - return packageInformation; - } - function isDependencyTreeRoot(packageLocator) { - if (packageLocator.name === null) - return true; - for (const dependencyTreeRoot of runtimeState.dependencyTreeRoots) - if (dependencyTreeRoot.name === packageLocator.name && dependencyTreeRoot.reference === packageLocator.reference) - return true; - return false; - } - const defaultExportsConditions = /* @__PURE__ */ new Set([ - `node`, - `require`, - ...getOptionValue(`--conditions`) - ]); - function applyNodeExportsResolution(unqualifiedPath, conditions = defaultExportsConditions, issuer) { - const locator = findPackageLocator(ppath.join(unqualifiedPath, `internal.js`), { - resolveIgnored: true, - includeDiscardFromLookup: true - }); - if (locator === null) { - throw makeError( - ErrorCode.INTERNAL, - `The locator that owns the "${unqualifiedPath}" path can't be found inside the dependency tree (this is probably an internal error)` - ); - } - const { packageLocation } = getPackageInformationSafe(locator); - const manifestPath = ppath.join(packageLocation, Filename.manifest); - if (!opts.fakeFs.existsSync(manifestPath)) - return null; - const pkgJson = JSON.parse(opts.fakeFs.readFileSync(manifestPath, `utf8`)); - if (pkgJson.exports == null) - return null; - let subpath = ppath.contains(packageLocation, unqualifiedPath); - if (subpath === null) { - throw makeError( - ErrorCode.INTERNAL, - `unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)` - ); - } - if (subpath !== `.` && !isRelativeRegexp.test(subpath)) - subpath = `./${subpath}`; - try { - const resolvedExport = packageExportsResolve({ - packageJSONUrl: url.pathToFileURL(npath.fromPortablePath(manifestPath)), - packageSubpath: subpath, - exports: pkgJson.exports, - base: issuer ? url.pathToFileURL(npath.fromPortablePath(issuer)) : null, - conditions - }); - return npath.toPortablePath(url.fileURLToPath(resolvedExport)); - } catch (error) { - throw makeError( - ErrorCode.EXPORTS_RESOLUTION_FAILED, - error.message, - { unqualifiedPath: getPathForDisplay(unqualifiedPath), locator, pkgJson, subpath: getPathForDisplay(subpath), conditions }, - error.code - ); - } - } - function applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }) { - let stat; - try { - candidates.push(unqualifiedPath); - stat = opts.fakeFs.statSync(unqualifiedPath); - } catch (error) { - } - if (stat && !stat.isDirectory()) - return opts.fakeFs.realpathSync(unqualifiedPath); - if (stat && stat.isDirectory()) { - let pkgJson; - try { - pkgJson = JSON.parse(opts.fakeFs.readFileSync(ppath.join(unqualifiedPath, Filename.manifest), `utf8`)); - } catch (error) { - } - let nextUnqualifiedPath; - if (pkgJson && pkgJson.main) - nextUnqualifiedPath = ppath.resolve(unqualifiedPath, pkgJson.main); - if (nextUnqualifiedPath && nextUnqualifiedPath !== unqualifiedPath) { - const resolution = applyNodeExtensionResolution(nextUnqualifiedPath, candidates, { extensions }); - if (resolution !== null) { - return resolution; - } - } - } - for (let i = 0, length = extensions.length; i < length; i++) { - const candidateFile = `${unqualifiedPath}${extensions[i]}`; - candidates.push(candidateFile); - if (opts.fakeFs.existsSync(candidateFile)) { - return candidateFile; - } - } - if (stat && stat.isDirectory()) { - for (let i = 0, length = extensions.length; i < length; i++) { - const candidateFile = ppath.format({ dir: unqualifiedPath, name: `index`, ext: extensions[i] }); - candidates.push(candidateFile); - if (opts.fakeFs.existsSync(candidateFile)) { - return candidateFile; - } - } - } - return null; - } - function makeFakeModule(path) { - const fakeModule = new require$$0.Module(path, null); - fakeModule.filename = path; - fakeModule.paths = require$$0.Module._nodeModulePaths(path); - return fakeModule; - } - function callNativeResolution(request, issuer) { - if (issuer.endsWith(`/`)) - issuer = ppath.join(issuer, `internal.js`); - return require$$0.Module._resolveFilename(npath.fromPortablePath(request), makeFakeModule(npath.fromPortablePath(issuer)), false, { plugnplay: false }); - } - function isPathIgnored(path) { - if (ignorePattern === null) - return false; - const subPath = ppath.contains(runtimeState.basePath, path); - if (subPath === null) - return false; - if (ignorePattern.test(subPath.replace(/\/$/, ``))) { - return true; - } else { - return false; - } - } - const VERSIONS = { std: 3, resolveVirtual: 1, getAllLocators: 1 }; - const topLevel = topLevelLocator; - function getPackageInformation({ name, reference }) { - const packageInformationStore = packageRegistry.get(name); - if (!packageInformationStore) - return null; - const packageInformation = packageInformationStore.get(reference); - if (!packageInformation) - return null; - return packageInformation; - } - function findPackageDependents({ name, reference }) { - const dependents = []; - for (const [dependentName, packageInformationStore] of packageRegistry) { - if (dependentName === null) - continue; - for (const [dependentReference, packageInformation] of packageInformationStore) { - if (dependentReference === null) - continue; - const dependencyReference = packageInformation.packageDependencies.get(name); - if (dependencyReference !== reference) - continue; - if (dependentName === name && dependentReference === reference) - continue; - dependents.push({ - name: dependentName, - reference: dependentReference - }); - } - } - return dependents; - } - function findBrokenPeerDependencies(dependency, initialPackage) { - const brokenPackages = /* @__PURE__ */ new Map(); - const alreadyVisited = /* @__PURE__ */ new Set(); - const traversal = (currentPackage) => { - const identifier = JSON.stringify(currentPackage.name); - if (alreadyVisited.has(identifier)) - return; - alreadyVisited.add(identifier); - const dependents = findPackageDependents(currentPackage); - for (const dependent of dependents) { - const dependentInformation = getPackageInformationSafe(dependent); - if (dependentInformation.packagePeers.has(dependency)) { - traversal(dependent); - } else { - let brokenSet = brokenPackages.get(dependent.name); - if (typeof brokenSet === `undefined`) - brokenPackages.set(dependent.name, brokenSet = /* @__PURE__ */ new Set()); - brokenSet.add(dependent.reference); - } - } - }; - traversal(initialPackage); - const brokenList = []; - for (const name of [...brokenPackages.keys()].sort()) - for (const reference of [...brokenPackages.get(name)].sort()) - brokenList.push({ name, reference }); - return brokenList; - } - function findPackageLocator(location, { resolveIgnored = false, includeDiscardFromLookup = false } = {}) { - if (isPathIgnored(location) && !resolveIgnored) - return null; - let relativeLocation = ppath.relative(runtimeState.basePath, location); - if (!relativeLocation.match(isStrictRegExp)) - relativeLocation = `./${relativeLocation}`; - if (!relativeLocation.endsWith(`/`)) - relativeLocation = `${relativeLocation}/`; - do { - const entry = packageLocatorsByLocations.get(relativeLocation); - if (typeof entry === `undefined` || entry.discardFromLookup && !includeDiscardFromLookup) { - relativeLocation = relativeLocation.substring(0, relativeLocation.lastIndexOf(`/`, relativeLocation.length - 2) + 1); - continue; - } - return entry.locator; - } while (relativeLocation !== ``); - return null; - } - function tryReadFile(filePath) { - try { - return opts.fakeFs.readFileSync(npath.toPortablePath(filePath), `utf8`); - } catch (err) { - if (err.code === `ENOENT`) - return void 0; - throw err; - } - } - function resolveToUnqualified(request, issuer, { considerBuiltins = true } = {}) { - if (request.startsWith(`#`)) - throw new Error(`resolveToUnqualified can not handle private import mappings`); - if (request === `pnpapi`) - return npath.toPortablePath(opts.pnpapiResolution); - if (considerBuiltins && isBuiltinModule(request)) - return null; - const requestForDisplay = getPathForDisplay(request); - const issuerForDisplay = issuer && getPathForDisplay(issuer); - if (issuer && isPathIgnored(issuer)) { - if (!ppath.isAbsolute(request) || findPackageLocator(request) === null) { - const result = callNativeResolution(request, issuer); - if (result === false) { - throw makeError( - ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, - `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) - -Require request: "${requestForDisplay}" -Required by: ${issuerForDisplay} -`, - { request: requestForDisplay, issuer: issuerForDisplay } - ); - } - return npath.toPortablePath(result); - } - } - let unqualifiedPath; - const dependencyNameMatch = request.match(pathRegExp); - if (!dependencyNameMatch) { - if (ppath.isAbsolute(request)) { - unqualifiedPath = ppath.normalize(request); - } else { - if (!issuer) { - throw makeError( - ErrorCode.API_ERROR, - `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, - { request: requestForDisplay, issuer: issuerForDisplay } - ); - } - const absoluteIssuer = ppath.resolve(issuer); - if (issuer.match(isDirRegExp)) { - unqualifiedPath = ppath.normalize(ppath.join(absoluteIssuer, request)); - } else { - unqualifiedPath = ppath.normalize(ppath.join(ppath.dirname(absoluteIssuer), request)); - } - } - } else { - if (!issuer) { - throw makeError( - ErrorCode.API_ERROR, - `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, - { request: requestForDisplay, issuer: issuerForDisplay } - ); - } - const [, dependencyName, subPath] = dependencyNameMatch; - const issuerLocator = findPackageLocator(issuer); - if (!issuerLocator) { - const result = callNativeResolution(request, issuer); - if (result === false) { - throw makeError( - ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, - `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). - -Require path: "${requestForDisplay}" -Required by: ${issuerForDisplay} -`, - { request: requestForDisplay, issuer: issuerForDisplay } - ); - } - return npath.toPortablePath(result); - } - const issuerInformation = getPackageInformationSafe(issuerLocator); - let dependencyReference = issuerInformation.packageDependencies.get(dependencyName); - let fallbackReference = null; - if (dependencyReference == null) { - if (issuerLocator.name !== null) { - const exclusionEntry = runtimeState.fallbackExclusionList.get(issuerLocator.name); - const canUseFallbacks = !exclusionEntry || !exclusionEntry.has(issuerLocator.reference); - if (canUseFallbacks) { - for (let t = 0, T = fallbackLocators.length; t < T; ++t) { - const fallbackInformation = getPackageInformationSafe(fallbackLocators[t]); - const reference = fallbackInformation.packageDependencies.get(dependencyName); - if (reference == null) - continue; - if (alwaysWarnOnFallback) - fallbackReference = reference; - else - dependencyReference = reference; - break; - } - if (runtimeState.enableTopLevelFallback) { - if (dependencyReference == null && fallbackReference === null) { - const reference = runtimeState.fallbackPool.get(dependencyName); - if (reference != null) { - fallbackReference = reference; - } - } - } - } - } - } - let error = null; - if (dependencyReference === null) { - if (isDependencyTreeRoot(issuerLocator)) { - error = makeError( - ErrorCode.MISSING_PEER_DEPENDENCY, - `Your application tried to access ${dependencyName} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerForDisplay} -`, - { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } - ); - } else { - const brokenAncestors = findBrokenPeerDependencies(dependencyName, issuerLocator); - if (brokenAncestors.every((ancestor) => isDependencyTreeRoot(ancestor))) { - error = makeError( - ErrorCode.MISSING_PEER_DEPENDENCY, - `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) -${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} -`).join(``)} -`, - { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors } - ); - } else { - error = makeError( - ErrorCode.MISSING_PEER_DEPENDENCY, - `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) - -${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} -`).join(``)} -`, - { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors } - ); - } - } - } else if (dependencyReference === void 0) { - if (!considerBuiltins && isBuiltinModule(request)) { - if (isDependencyTreeRoot(issuerLocator)) { - error = makeError( - ErrorCode.UNDECLARED_DEPENDENCY, - `Your application tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerForDisplay} -`, - { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } - ); - } else { - error = makeError( - ErrorCode.UNDECLARED_DEPENDENCY, - `${issuerLocator.name} tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in ${issuerLocator.name}'s dependencies, this makes the require call ambiguous and unsound. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerForDisplay} -`, - { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName } - ); - } - } else { - if (isDependencyTreeRoot(issuerLocator)) { - error = makeError( - ErrorCode.UNDECLARED_DEPENDENCY, - `Your application tried to access ${dependencyName}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerForDisplay} -`, - { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } - ); - } else { - error = makeError( - ErrorCode.UNDECLARED_DEPENDENCY, - `${issuerLocator.name} tried to access ${dependencyName}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) -`, - { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName } - ); - } - } - } - if (dependencyReference == null) { - if (fallbackReference === null || error === null) - throw error || new Error(`Assertion failed: Expected an error to have been set`); - dependencyReference = fallbackReference; - const message = error.message.replace(/\n.*/g, ``); - error.message = message; - if (!emittedWarnings.has(message) && debugLevel !== 0) { - emittedWarnings.add(message); - process.emitWarning(error); - } - } - const dependencyLocator = Array.isArray(dependencyReference) ? { name: dependencyReference[0], reference: dependencyReference[1] } : { name: dependencyName, reference: dependencyReference }; - const dependencyInformation = getPackageInformationSafe(dependencyLocator); - if (!dependencyInformation.packageLocation) { - throw makeError( - ErrorCode.MISSING_DEPENDENCY, - `A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. - -Required package: ${dependencyLocator.name}@${dependencyLocator.reference}${dependencyLocator.name !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) -`, - { request: requestForDisplay, issuer: issuerForDisplay, dependencyLocator: Object.assign({}, dependencyLocator) } - ); - } - const dependencyLocation = dependencyInformation.packageLocation; - if (subPath) { - unqualifiedPath = ppath.join(dependencyLocation, subPath); - } else { - unqualifiedPath = dependencyLocation; - } - } - return ppath.normalize(unqualifiedPath); - } - function resolveUnqualifiedExport(request, unqualifiedPath, conditions = defaultExportsConditions, issuer) { - if (isStrictRegExp.test(request)) - return unqualifiedPath; - const unqualifiedExportPath = applyNodeExportsResolution(unqualifiedPath, conditions, issuer); - if (unqualifiedExportPath) { - return ppath.normalize(unqualifiedExportPath); - } else { - return unqualifiedPath; - } - } - function resolveUnqualified(unqualifiedPath, { extensions = Object.keys(require$$0.Module._extensions) } = {}) { - var _a, _b; - const candidates = []; - const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }); - if (qualifiedPath) { - return ppath.normalize(qualifiedPath); - } else { - reportRequiredFilesToWatchMode(candidates.map((candidate) => npath.fromPortablePath(candidate))); - const unqualifiedPathForDisplay = getPathForDisplay(unqualifiedPath); - const containingPackage = findPackageLocator(unqualifiedPath); - if (containingPackage) { - const { packageLocation } = getPackageInformationSafe(containingPackage); - let exists = true; - try { - opts.fakeFs.accessSync(packageLocation); - } catch (err) { - if ((err == null ? void 0 : err.code) === `ENOENT`) { - exists = false; - } else { - const readableError = ((_b = (_a = err == null ? void 0 : err.message) != null ? _a : err) != null ? _b : `empty exception thrown`).replace(/^[A-Z]/, ($0) => $0.toLowerCase()); - throw makeError(ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, `Required package exists but could not be accessed (${readableError}). - -Missing package: ${containingPackage.name}@${containingPackage.reference} -Expected package location: ${getPathForDisplay(packageLocation)} -`, { unqualifiedPath: unqualifiedPathForDisplay, extensions }); - } - } - if (!exists) { - const errorMessage = packageLocation.includes(`/unplugged/`) ? `Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).` : `Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.`; - throw makeError( - ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, - `${errorMessage} - -Missing package: ${containingPackage.name}@${containingPackage.reference} -Expected package location: ${getPathForDisplay(packageLocation)} -`, - { unqualifiedPath: unqualifiedPathForDisplay, extensions } - ); - } - } - throw makeError( - ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, - `Qualified path resolution failed: we looked for the following paths, but none could be accessed. - -Source path: ${unqualifiedPathForDisplay} -${candidates.map((candidate) => `Not found: ${getPathForDisplay(candidate)} -`).join(``)}`, - { unqualifiedPath: unqualifiedPathForDisplay, extensions } - ); - } - } - function resolvePrivateRequest(request, issuer, opts2) { - var _a; - if (!issuer) - throw new Error(`Assertion failed: An issuer is required to resolve private import mappings`); - const resolved = packageImportsResolve({ - name: request, - base: url.pathToFileURL(npath.fromPortablePath(issuer)), - conditions: (_a = opts2.conditions) != null ? _a : defaultExportsConditions, - readFileSyncFn: tryReadFile - }); - if (resolved instanceof url.URL) { - return resolveUnqualified(npath.toPortablePath(url.fileURLToPath(resolved)), { extensions: opts2.extensions }); - } else { - if (resolved.startsWith(`#`)) - throw new Error(`Mapping from one private import to another isn't allowed`); - return resolveRequest(resolved, issuer, opts2); - } - } - function resolveRequest(request, issuer, opts2 = {}) { - try { - if (request.startsWith(`#`)) - return resolvePrivateRequest(request, issuer, opts2); - const { considerBuiltins, extensions, conditions } = opts2; - const unqualifiedPath = resolveToUnqualified(request, issuer, { considerBuiltins }); - if (request === `pnpapi`) - return unqualifiedPath; - if (unqualifiedPath === null) - return null; - const isIssuerIgnored = () => issuer !== null ? isPathIgnored(issuer) : false; - const remappedPath = (!considerBuiltins || !isBuiltinModule(request)) && !isIssuerIgnored() ? resolveUnqualifiedExport(request, unqualifiedPath, conditions, issuer) : unqualifiedPath; - return resolveUnqualified(remappedPath, { extensions }); - } catch (error) { - if (Object.prototype.hasOwnProperty.call(error, `pnpCode`)) - Object.assign(error.data, { request: getPathForDisplay(request), issuer: issuer && getPathForDisplay(issuer) }); - throw error; - } - } - function resolveVirtual(request) { - const normalized = ppath.normalize(request); - const resolved = VirtualFS.resolveVirtual(normalized); - return resolved !== normalized ? resolved : null; - } - return { - VERSIONS, - topLevel, - getLocator: (name, referencish) => { - if (Array.isArray(referencish)) { - return { name: referencish[0], reference: referencish[1] }; - } else { - return { name, reference: referencish }; - } - }, - getDependencyTreeRoots: () => { - return [...runtimeState.dependencyTreeRoots]; - }, - getAllLocators() { - const locators = []; - for (const [name, entry] of packageRegistry) - for (const reference of entry.keys()) - if (name !== null && reference !== null) - locators.push({ name, reference }); - return locators; - }, - getPackageInformation: (locator) => { - const info = getPackageInformation(locator); - if (info === null) - return null; - const packageLocation = npath.fromPortablePath(info.packageLocation); - const nativeInfo = { ...info, packageLocation }; - return nativeInfo; - }, - findPackageLocator: (path) => { - return findPackageLocator(npath.toPortablePath(path)); - }, - resolveToUnqualified: maybeLog(`resolveToUnqualified`, (request, issuer, opts2) => { - const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null; - const resolution = resolveToUnqualified(npath.toPortablePath(request), portableIssuer, opts2); - if (resolution === null) - return null; - return npath.fromPortablePath(resolution); - }), - resolveUnqualified: maybeLog(`resolveUnqualified`, (unqualifiedPath, opts2) => { - return npath.fromPortablePath(resolveUnqualified(npath.toPortablePath(unqualifiedPath), opts2)); - }), - resolveRequest: maybeLog(`resolveRequest`, (request, issuer, opts2) => { - const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null; - const resolution = resolveRequest(npath.toPortablePath(request), portableIssuer, opts2); - if (resolution === null) - return null; - return npath.fromPortablePath(resolution); - }), - resolveVirtual: maybeLog(`resolveVirtual`, (path) => { - const result = resolveVirtual(npath.toPortablePath(path)); - if (result !== null) { - return npath.fromPortablePath(result); - } else { - return null; - } - }) - }; -} - -function makeManager(pnpapi, opts) { - const initialApiPath = npath.toPortablePath(pnpapi.resolveToUnqualified(`pnpapi`, null)); - const initialApiStats = opts.fakeFs.statSync(npath.toPortablePath(initialApiPath)); - const apiMetadata = /* @__PURE__ */ new Map([ - [initialApiPath, { - instance: pnpapi, - stats: initialApiStats, - lastRefreshCheck: Date.now() - }] - ]); - function loadApiInstance(pnpApiPath) { - const nativePath = npath.fromPortablePath(pnpApiPath); - const module = new require$$0.Module(nativePath, null); - module.load(nativePath); - return module.exports; - } - function refreshApiEntry(pnpApiPath, apiEntry) { - const timeNow = Date.now(); - if (timeNow - apiEntry.lastRefreshCheck < 500) - return; - apiEntry.lastRefreshCheck = timeNow; - const stats = opts.fakeFs.statSync(pnpApiPath); - if (stats.mtime > apiEntry.stats.mtime) { - process.emitWarning(`[Warning] The runtime detected new informations in a PnP file; reloading the API instance (${npath.fromPortablePath(pnpApiPath)})`); - apiEntry.stats = stats; - apiEntry.instance = loadApiInstance(pnpApiPath); - } - } - function getApiEntry(pnpApiPath, refresh = false) { - let apiEntry = apiMetadata.get(pnpApiPath); - if (typeof apiEntry !== `undefined`) { - if (refresh) { - refreshApiEntry(pnpApiPath, apiEntry); - } - } else { - apiMetadata.set(pnpApiPath, apiEntry = { - instance: loadApiInstance(pnpApiPath), - stats: opts.fakeFs.statSync(pnpApiPath), - lastRefreshCheck: Date.now() - }); - } - return apiEntry; - } - const findApiPathCache = /* @__PURE__ */ new Map(); - function addToCacheAndReturn(start, end, target) { - if (target !== null) - target = VirtualFS.resolveVirtual(target); - let curr; - let next = start; - do { - curr = next; - findApiPathCache.set(curr, target); - next = ppath.dirname(curr); - } while (curr !== end); - return target; - } - function findApiPathFor(modulePath) { - let bestCandidate = null; - for (const [apiPath, apiEntry] of apiMetadata) { - const locator = apiEntry.instance.findPackageLocator(modulePath); - if (!locator) - continue; - if (apiMetadata.size === 1) - return apiPath; - const packageInformation = apiEntry.instance.getPackageInformation(locator); - if (!packageInformation) - throw new Error(`Assertion failed: Couldn't get package information for '${modulePath}'`); - if (!bestCandidate) - bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [] }; - if (packageInformation.packageLocation === bestCandidate.packageLocation) { - bestCandidate.apiPaths.push(apiPath); - } else if (packageInformation.packageLocation.length > bestCandidate.packageLocation.length) { - bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [apiPath] }; - } - } - if (bestCandidate) { - if (bestCandidate.apiPaths.length === 1) - return bestCandidate.apiPaths[0]; - const controlSegment = bestCandidate.apiPaths.map((apiPath) => ` ${npath.fromPortablePath(apiPath)}`).join(` -`); - throw new Error(`Unable to locate pnpapi, the module '${modulePath}' is controlled by multiple pnpapi instances. -This is usually caused by using the global cache (enableGlobalCache: true) - -Controlled by: -${controlSegment} -`); - } - const start = ppath.resolve(npath.toPortablePath(modulePath)); - let curr; - let next = start; - do { - curr = next; - const cached = findApiPathCache.get(curr); - if (cached !== void 0) - return addToCacheAndReturn(start, curr, cached); - const cjsCandidate = ppath.join(curr, Filename.pnpCjs); - if (opts.fakeFs.existsSync(cjsCandidate) && opts.fakeFs.statSync(cjsCandidate).isFile()) - return addToCacheAndReturn(start, curr, cjsCandidate); - const legacyCjsCandidate = ppath.join(curr, Filename.pnpJs); - if (opts.fakeFs.existsSync(legacyCjsCandidate) && opts.fakeFs.statSync(legacyCjsCandidate).isFile()) - return addToCacheAndReturn(start, curr, legacyCjsCandidate); - next = ppath.dirname(curr); - } while (curr !== PortablePath.root); - return addToCacheAndReturn(start, curr, null); - } - const moduleToApiPathCache = /* @__PURE__ */ new WeakMap(); - function getApiPathFromParent(parent) { - if (parent == null) - return initialApiPath; - let apiPath = moduleToApiPathCache.get(parent); - if (typeof apiPath !== `undefined`) - return apiPath; - apiPath = parent.filename ? findApiPathFor(parent.filename) : null; - moduleToApiPathCache.set(parent, apiPath); - return apiPath; - } - return { - getApiPathFromParent, - findApiPathFor, - getApiEntry - }; -} - -const localFs = { ...fs__default.default }; -const nodeFs = new NodeFS(localFs); -const defaultRuntimeState = $$SETUP_STATE(hydrateRuntimeState); -const defaultPnpapiResolution = __filename; -const defaultFsLayer = new VirtualFS({ - baseFs: new ZipOpenFS({ - baseFs: nodeFs, - libzip: () => getLibzipSync(), - maxOpenFiles: 80, - readOnlyArchives: true - }) -}); -class DynamicFS extends ProxiedFS { - constructor() { - super(ppath); - this.baseFs = defaultFsLayer; - } - mapToBase(p) { - return p; - } - mapFromBase(p) { - return p; - } -} -const dynamicFsLayer = new DynamicFS(); -let manager; -const defaultApi = Object.assign(makeApi(defaultRuntimeState, { - fakeFs: dynamicFsLayer, - pnpapiResolution: defaultPnpapiResolution -}), { - makeApi: ({ - basePath = void 0, - fakeFs = dynamicFsLayer, - pnpapiResolution = defaultPnpapiResolution, - ...rest - }) => { - const apiRuntimeState = typeof basePath !== `undefined` ? $$SETUP_STATE(hydrateRuntimeState, basePath) : defaultRuntimeState; - return makeApi(apiRuntimeState, { - fakeFs, - pnpapiResolution, - ...rest - }); - }, - setup: (api) => { - applyPatch(api || defaultApi, { - fakeFs: defaultFsLayer, - manager - }); - dynamicFsLayer.baseFs = new NodeFS(fs__default.default); - } -}); -manager = makeManager(defaultApi, { - fakeFs: dynamicFsLayer -}); -if (module.parent && module.parent.id === `internal/preload`) { - defaultApi.setup(); - if (module.filename) { - delete require$$0__default.default._cache[module.filename]; - } -} -if (process.mainModule === module) { - const reportError = (code, message, data) => { - process.stdout.write(`${JSON.stringify([{ code, message, data }, null])} -`); - }; - const reportSuccess = (resolution) => { - process.stdout.write(`${JSON.stringify([null, resolution])} -`); - }; - const processResolution = (request, issuer) => { - try { - reportSuccess(defaultApi.resolveRequest(request, issuer)); - } catch (error) { - reportError(error.code, error.message, error.data); - } - }; - const processRequest = (data) => { - try { - const [request, issuer] = JSON.parse(data); - processResolution(request, issuer); - } catch (error) { - reportError(`INVALID_JSON`, error.message, error.data); - } - }; - if (process.argv.length > 2) { - if (process.argv.length !== 4) { - process.stderr.write(`Usage: ${process.argv[0]} ${process.argv[1]} -`); - process.exitCode = 64; - } else { - processResolution(process.argv[2], process.argv[3]); - } - } else { - let buffer = ``; - const decoder = new StringDecoder__default.default.StringDecoder(); - process.stdin.on(`data`, (chunk) => { - buffer += decoder.write(chunk); - do { - const index = buffer.indexOf(` -`); - if (index === -1) - break; - const line = buffer.slice(0, index); - buffer = buffer.slice(index + 1); - processRequest(line); - } while (true); - }); - } -} - -module.exports = defaultApi; diff --git a/extensions/puppet/.pnp.loader.mjs b/extensions/puppet/.pnp.loader.mjs deleted file mode 100644 index 4b7f9f8..0000000 --- a/extensions/puppet/.pnp.loader.mjs +++ /dev/null @@ -1,2047 +0,0 @@ -import { URL as URL$1, fileURLToPath, pathToFileURL } from 'url'; -import fs from 'fs'; -import path from 'path'; -import moduleExports, { Module } from 'module'; -import { EOL } from 'os'; -import assert from 'assert'; - -const SAFE_TIME = 456789e3; - -const PortablePath = { - root: `/`, - dot: `.`, - parent: `..` -}; -const npath = Object.create(path); -const ppath = Object.create(path.posix); -npath.cwd = () => process.cwd(); -ppath.cwd = () => toPortablePath(process.cwd()); -ppath.resolve = (...segments) => { - if (segments.length > 0 && ppath.isAbsolute(segments[0])) { - return path.posix.resolve(...segments); - } else { - return path.posix.resolve(ppath.cwd(), ...segments); - } -}; -const contains = function(pathUtils, from, to) { - from = pathUtils.normalize(from); - to = pathUtils.normalize(to); - if (from === to) - return `.`; - if (!from.endsWith(pathUtils.sep)) - from = from + pathUtils.sep; - if (to.startsWith(from)) { - return to.slice(from.length); - } else { - return null; - } -}; -npath.fromPortablePath = fromPortablePath; -npath.toPortablePath = toPortablePath; -npath.contains = (from, to) => contains(npath, from, to); -ppath.contains = (from, to) => contains(ppath, from, to); -const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; -const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; -const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; -const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; -function fromPortablePath(p) { - if (process.platform !== `win32`) - return p; - let portablePathMatch, uncPortablePathMatch; - if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) - p = portablePathMatch[1]; - else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) - p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; - else - return p; - return p.replace(/\//g, `\\`); -} -function toPortablePath(p) { - if (process.platform !== `win32`) - return p; - p = p.replace(/\\/g, `/`); - let windowsPathMatch, uncWindowsPathMatch; - if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) - p = `/${windowsPathMatch[1]}`; - else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) - p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; - return p; -} -function convertPath(targetPathUtils, sourcePath) { - return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); -} - -const defaultTime = new Date(SAFE_TIME * 1e3); -async function copyPromise(destinationFs, destination, sourceFs, source, opts) { - const normalizedDestination = destinationFs.pathUtils.normalize(destination); - const normalizedSource = sourceFs.pathUtils.normalize(source); - const prelayout = []; - const postlayout = []; - const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); - await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); - const updateTime = typeof destinationFs.lutimesPromise === `function` ? destinationFs.lutimesPromise.bind(destinationFs) : destinationFs.utimesPromise.bind(destinationFs); - await copyImpl(prelayout, postlayout, updateTime, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); - for (const operation of prelayout) - await operation(); - await Promise.all(postlayout.map((operation) => { - return operation(); - })); -} -async function copyImpl(prelayout, postlayout, updateTime, destinationFs, destination, sourceFs, source, opts) { - var _a, _b; - const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; - const sourceStat = await sourceFs.lstatPromise(source); - const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; - let updated; - switch (true) { - case sourceStat.isDirectory(): - { - updated = await copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } - break; - case sourceStat.isFile(): - { - updated = await copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } - break; - case sourceStat.isSymbolicLink(): - { - updated = await copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } - break; - default: - { - throw new Error(`Unsupported file type (${sourceStat.mode})`); - } - } - if (updated || ((_a = destinationStat == null ? void 0 : destinationStat.mtime) == null ? void 0 : _a.getTime()) !== mtime.getTime() || ((_b = destinationStat == null ? void 0 : destinationStat.atime) == null ? void 0 : _b.getTime()) !== atime.getTime()) { - postlayout.push(() => updateTime(destination, atime, mtime)); - updated = true; - } - if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { - postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); - updated = true; - } - return updated; -} -async function maybeLStat(baseFs, p) { - try { - return await baseFs.lstatPromise(p); - } catch (e) { - return null; - } -} -async function copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - if (destinationStat !== null && !destinationStat.isDirectory()) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - let updated = false; - if (destinationStat === null) { - prelayout.push(async () => { - try { - await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); - } catch (err) { - if (err.code !== `EEXIST`) { - throw err; - } - } - }); - updated = true; - } - const entries = await sourceFs.readdirPromise(source); - const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; - if (opts.stableSort) { - for (const entry of entries.sort()) { - if (await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { - updated = true; - } - } - } else { - const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { - await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); - })); - if (entriesUpdateStatus.some((status) => status)) { - updated = true; - } - } - return updated; -} -const isCloneSupportedCache = /* @__PURE__ */ new WeakMap(); -function makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy) { - return async () => { - await opFs.linkPromise(source, destination); - if (linkStrategy === "readOnly" /* ReadOnly */) { - sourceStat.mode &= ~146; - await opFs.chmodPromise(destination, sourceStat.mode); - } - }; -} -function makeCloneLinkOperation(opFs, destination, source, sourceStat, linkStrategy) { - const isCloneSupported = isCloneSupportedCache.get(opFs); - if (typeof isCloneSupported === `undefined`) { - return async () => { - try { - await opFs.copyFilePromise(source, destination, fs.constants.COPYFILE_FICLONE_FORCE); - isCloneSupportedCache.set(opFs, true); - } catch (err) { - if (err.code === `ENOSYS` || err.code === `ENOTSUP`) { - isCloneSupportedCache.set(opFs, false); - await makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy)(); - } else { - throw err; - } - } - }; - } else { - if (isCloneSupported) { - return async () => opFs.copyFilePromise(source, destination, fs.constants.COPYFILE_FICLONE_FORCE); - } else { - return makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy); - } - } -} -async function copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - var _a; - if (destinationStat !== null) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - const linkStrategy = (_a = opts.linkStrategy) != null ? _a : null; - const op = destinationFs === sourceFs ? linkStrategy !== null ? makeCloneLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.copyFilePromise(source, destination, fs.constants.COPYFILE_FICLONE) : linkStrategy !== null ? makeLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.writeFilePromise(destination, await sourceFs.readFilePromise(source)); - prelayout.push(async () => op()); - return true; -} -async function copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - if (destinationStat !== null) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - prelayout.push(async () => { - await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); - }); - return true; -} - -function makeError(code, message) { - return Object.assign(new Error(`${code}: ${message}`), { code }); -} -function ENOSYS(message, reason) { - return makeError(`ENOSYS`, `${message}, ${reason}`); -} - -class FakeFS { - constructor(pathUtils) { - this.pathUtils = pathUtils; - } - async *genTraversePromise(init, { stableSort = false } = {}) { - const stack = [init]; - while (stack.length > 0) { - const p = stack.shift(); - const entry = await this.lstatPromise(p); - if (entry.isDirectory()) { - const entries = await this.readdirPromise(p); - if (stableSort) { - for (const entry2 of entries.sort()) { - stack.push(this.pathUtils.join(p, entry2)); - } - } else { - throw new Error(`Not supported`); - } - } else { - yield p; - } - } - } - async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { - let stat; - try { - stat = await this.lstatPromise(p); - } catch (error) { - if (error.code === `ENOENT`) { - return; - } else { - throw error; - } - } - if (stat.isDirectory()) { - if (recursive) { - const entries = await this.readdirPromise(p); - await Promise.all(entries.map((entry) => { - return this.removePromise(this.pathUtils.resolve(p, entry)); - })); - } - for (let t = 0; t <= maxRetries; t++) { - try { - await this.rmdirPromise(p); - break; - } catch (error) { - if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { - throw error; - } else if (t < maxRetries) { - await new Promise((resolve) => setTimeout(resolve, t * 100)); - } - } - } - } else { - await this.unlinkPromise(p); - } - } - removeSync(p, { recursive = true } = {}) { - let stat; - try { - stat = this.lstatSync(p); - } catch (error) { - if (error.code === `ENOENT`) { - return; - } else { - throw error; - } - } - if (stat.isDirectory()) { - if (recursive) - for (const entry of this.readdirSync(p)) - this.removeSync(this.pathUtils.resolve(p, entry)); - this.rmdirSync(p); - } else { - this.unlinkSync(p); - } - } - async mkdirpPromise(p, { chmod, utimes } = {}) { - p = this.resolve(p); - if (p === this.pathUtils.dirname(p)) - return void 0; - const parts = p.split(this.pathUtils.sep); - let createdDirectory; - for (let u = 2; u <= parts.length; ++u) { - const subPath = parts.slice(0, u).join(this.pathUtils.sep); - if (!this.existsSync(subPath)) { - try { - await this.mkdirPromise(subPath); - } catch (error) { - if (error.code === `EEXIST`) { - continue; - } else { - throw error; - } - } - createdDirectory != null ? createdDirectory : createdDirectory = subPath; - if (chmod != null) - await this.chmodPromise(subPath, chmod); - if (utimes != null) { - await this.utimesPromise(subPath, utimes[0], utimes[1]); - } else { - const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); - await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); - } - } - } - return createdDirectory; - } - mkdirpSync(p, { chmod, utimes } = {}) { - p = this.resolve(p); - if (p === this.pathUtils.dirname(p)) - return void 0; - const parts = p.split(this.pathUtils.sep); - let createdDirectory; - for (let u = 2; u <= parts.length; ++u) { - const subPath = parts.slice(0, u).join(this.pathUtils.sep); - if (!this.existsSync(subPath)) { - try { - this.mkdirSync(subPath); - } catch (error) { - if (error.code === `EEXIST`) { - continue; - } else { - throw error; - } - } - createdDirectory != null ? createdDirectory : createdDirectory = subPath; - if (chmod != null) - this.chmodSync(subPath, chmod); - if (utimes != null) { - this.utimesSync(subPath, utimes[0], utimes[1]); - } else { - const parentStat = this.statSync(this.pathUtils.dirname(subPath)); - this.utimesSync(subPath, parentStat.atime, parentStat.mtime); - } - } - } - return createdDirectory; - } - async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { - return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); - } - copySync(destination, source, { baseFs = this, overwrite = true } = {}) { - const stat = baseFs.lstatSync(source); - const exists = this.existsSync(destination); - if (stat.isDirectory()) { - this.mkdirpSync(destination); - const directoryListing = baseFs.readdirSync(source); - for (const entry of directoryListing) { - this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); - } - } else if (stat.isFile()) { - if (!exists || overwrite) { - if (exists) - this.removeSync(destination); - const content = baseFs.readFileSync(source); - this.writeFileSync(destination, content); - } - } else if (stat.isSymbolicLink()) { - if (!exists || overwrite) { - if (exists) - this.removeSync(destination); - const target = baseFs.readlinkSync(source); - this.symlinkSync(convertPath(this.pathUtils, target), destination); - } - } else { - throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); - } - const mode = stat.mode & 511; - this.chmodSync(destination, mode); - } - async changeFilePromise(p, content, opts = {}) { - if (Buffer.isBuffer(content)) { - return this.changeFileBufferPromise(p, content, opts); - } else { - return this.changeFileTextPromise(p, content, opts); - } - } - async changeFileBufferPromise(p, content, { mode } = {}) { - let current = Buffer.alloc(0); - try { - current = await this.readFilePromise(p); - } catch (error) { - } - if (Buffer.compare(current, content) === 0) - return; - await this.writeFilePromise(p, content, { mode }); - } - async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { - let current = ``; - try { - current = await this.readFilePromise(p, `utf8`); - } catch (error) { - } - const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; - if (current === normalizedContent) - return; - await this.writeFilePromise(p, normalizedContent, { mode }); - } - changeFileSync(p, content, opts = {}) { - if (Buffer.isBuffer(content)) { - return this.changeFileBufferSync(p, content, opts); - } else { - return this.changeFileTextSync(p, content, opts); - } - } - changeFileBufferSync(p, content, { mode } = {}) { - let current = Buffer.alloc(0); - try { - current = this.readFileSync(p); - } catch (error) { - } - if (Buffer.compare(current, content) === 0) - return; - this.writeFileSync(p, content, { mode }); - } - changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { - let current = ``; - try { - current = this.readFileSync(p, `utf8`); - } catch (error) { - } - const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; - if (current === normalizedContent) - return; - this.writeFileSync(p, normalizedContent, { mode }); - } - async movePromise(fromP, toP) { - try { - await this.renamePromise(fromP, toP); - } catch (error) { - if (error.code === `EXDEV`) { - await this.copyPromise(toP, fromP); - await this.removePromise(fromP); - } else { - throw error; - } - } - } - moveSync(fromP, toP) { - try { - this.renameSync(fromP, toP); - } catch (error) { - if (error.code === `EXDEV`) { - this.copySync(toP, fromP); - this.removeSync(fromP); - } else { - throw error; - } - } - } - async lockPromise(affectedPath, callback) { - const lockPath = `${affectedPath}.flock`; - const interval = 1e3 / 60; - const startTime = Date.now(); - let fd = null; - const isAlive = async () => { - let pid; - try { - [pid] = await this.readJsonPromise(lockPath); - } catch (error) { - return Date.now() - startTime < 500; - } - try { - process.kill(pid, 0); - return true; - } catch (error) { - return false; - } - }; - while (fd === null) { - try { - fd = await this.openPromise(lockPath, `wx`); - } catch (error) { - if (error.code === `EEXIST`) { - if (!await isAlive()) { - try { - await this.unlinkPromise(lockPath); - continue; - } catch (error2) { - } - } - if (Date.now() - startTime < 60 * 1e3) { - await new Promise((resolve) => setTimeout(resolve, interval)); - } else { - throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); - } - } else { - throw error; - } - } - } - await this.writePromise(fd, JSON.stringify([process.pid])); - try { - return await callback(); - } finally { - try { - await this.closePromise(fd); - await this.unlinkPromise(lockPath); - } catch (error) { - } - } - } - async readJsonPromise(p) { - const content = await this.readFilePromise(p, `utf8`); - try { - return JSON.parse(content); - } catch (error) { - error.message += ` (in ${p})`; - throw error; - } - } - readJsonSync(p) { - const content = this.readFileSync(p, `utf8`); - try { - return JSON.parse(content); - } catch (error) { - error.message += ` (in ${p})`; - throw error; - } - } - async writeJsonPromise(p, data) { - return await this.writeFilePromise(p, `${JSON.stringify(data, null, 2)} -`); - } - writeJsonSync(p, data) { - return this.writeFileSync(p, `${JSON.stringify(data, null, 2)} -`); - } - async preserveTimePromise(p, cb) { - const stat = await this.lstatPromise(p); - const result = await cb(); - if (typeof result !== `undefined`) - p = result; - if (this.lutimesPromise) { - await this.lutimesPromise(p, stat.atime, stat.mtime); - } else if (!stat.isSymbolicLink()) { - await this.utimesPromise(p, stat.atime, stat.mtime); - } - } - async preserveTimeSync(p, cb) { - const stat = this.lstatSync(p); - const result = cb(); - if (typeof result !== `undefined`) - p = result; - if (this.lutimesSync) { - this.lutimesSync(p, stat.atime, stat.mtime); - } else if (!stat.isSymbolicLink()) { - this.utimesSync(p, stat.atime, stat.mtime); - } - } -} -class BasePortableFakeFS extends FakeFS { - constructor() { - super(ppath); - } -} -function getEndOfLine(content) { - const matches = content.match(/\r?\n/g); - if (matches === null) - return EOL; - const crlf = matches.filter((nl) => nl === `\r -`).length; - const lf = matches.length - crlf; - return crlf > lf ? `\r -` : ` -`; -} -function normalizeLineEndings(originalContent, newContent) { - return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); -} - -class NodeFS extends BasePortableFakeFS { - constructor(realFs = fs) { - super(); - this.realFs = realFs; - if (typeof this.realFs.lutimes !== `undefined`) { - this.lutimesPromise = this.lutimesPromiseImpl; - this.lutimesSync = this.lutimesSyncImpl; - } - } - getExtractHint() { - return false; - } - getRealPath() { - return PortablePath.root; - } - resolve(p) { - return ppath.resolve(p); - } - async openPromise(p, flags, mode) { - return await new Promise((resolve, reject) => { - this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); - }); - } - openSync(p, flags, mode) { - return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); - } - async opendirPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (typeof opts !== `undefined`) { - this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }).then((dir) => { - return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true }); - }); - } - opendirSync(p, opts) { - const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); - return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true }); - } - async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { - return await new Promise((resolve, reject) => { - this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { - if (error) { - reject(error); - } else { - resolve(bytesRead); - } - }); - }); - } - readSync(fd, buffer, offset, length, position) { - return this.realFs.readSync(fd, buffer, offset, length, position); - } - async writePromise(fd, buffer, offset, length, position) { - return await new Promise((resolve, reject) => { - if (typeof buffer === `string`) { - return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); - } else { - return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); - } - }); - } - writeSync(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return this.realFs.writeSync(fd, buffer, offset); - } else { - return this.realFs.writeSync(fd, buffer, offset, length, position); - } - } - async closePromise(fd) { - await new Promise((resolve, reject) => { - this.realFs.close(fd, this.makeCallback(resolve, reject)); - }); - } - closeSync(fd) { - this.realFs.closeSync(fd); - } - createReadStream(p, opts) { - const realPath = p !== null ? npath.fromPortablePath(p) : p; - return this.realFs.createReadStream(realPath, opts); - } - createWriteStream(p, opts) { - const realPath = p !== null ? npath.fromPortablePath(p) : p; - return this.realFs.createWriteStream(realPath, opts); - } - async realpathPromise(p) { - return await new Promise((resolve, reject) => { - this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); - }).then((path) => { - return npath.toPortablePath(path); - }); - } - realpathSync(p) { - return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); - } - async existsPromise(p) { - return await new Promise((resolve) => { - this.realFs.exists(npath.fromPortablePath(p), resolve); - }); - } - accessSync(p, mode) { - return this.realFs.accessSync(npath.fromPortablePath(p), mode); - } - async accessPromise(p, mode) { - return await new Promise((resolve, reject) => { - this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); - }); - } - existsSync(p) { - return this.realFs.existsSync(npath.fromPortablePath(p)); - } - async statPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - statSync(p, opts) { - if (opts) { - return this.realFs.statSync(npath.fromPortablePath(p), opts); - } else { - return this.realFs.statSync(npath.fromPortablePath(p)); - } - } - async fstatPromise(fd, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.fstat(fd, this.makeCallback(resolve, reject)); - } - }); - } - fstatSync(fd, opts) { - if (opts) { - return this.realFs.fstatSync(fd, opts); - } else { - return this.realFs.fstatSync(fd); - } - } - async lstatPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - lstatSync(p, opts) { - if (opts) { - return this.realFs.lstatSync(npath.fromPortablePath(p), opts); - } else { - return this.realFs.lstatSync(npath.fromPortablePath(p)); - } - } - async fchmodPromise(fd, mask) { - return await new Promise((resolve, reject) => { - this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); - }); - } - fchmodSync(fd, mask) { - return this.realFs.fchmodSync(fd, mask); - } - async chmodPromise(p, mask) { - return await new Promise((resolve, reject) => { - this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); - }); - } - chmodSync(p, mask) { - return this.realFs.chmodSync(npath.fromPortablePath(p), mask); - } - async fchownPromise(fd, uid, gid) { - return await new Promise((resolve, reject) => { - this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); - }); - } - fchownSync(fd, uid, gid) { - return this.realFs.fchownSync(fd, uid, gid); - } - async chownPromise(p, uid, gid) { - return await new Promise((resolve, reject) => { - this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); - }); - } - chownSync(p, uid, gid) { - return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); - } - async renamePromise(oldP, newP) { - return await new Promise((resolve, reject) => { - this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); - }); - } - renameSync(oldP, newP) { - return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); - } - async copyFilePromise(sourceP, destP, flags = 0) { - return await new Promise((resolve, reject) => { - this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); - }); - } - copyFileSync(sourceP, destP, flags = 0) { - return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); - } - async appendFilePromise(p, content, opts) { - return await new Promise((resolve, reject) => { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); - } - }); - } - appendFileSync(p, content, opts) { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.appendFileSync(fsNativePath, content, opts); - } else { - this.realFs.appendFileSync(fsNativePath, content); - } - } - async writeFilePromise(p, content, opts) { - return await new Promise((resolve, reject) => { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); - } - }); - } - writeFileSync(p, content, opts) { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.writeFileSync(fsNativePath, content, opts); - } else { - this.realFs.writeFileSync(fsNativePath, content); - } - } - async unlinkPromise(p) { - return await new Promise((resolve, reject) => { - this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - }); - } - unlinkSync(p) { - return this.realFs.unlinkSync(npath.fromPortablePath(p)); - } - async utimesPromise(p, atime, mtime) { - return await new Promise((resolve, reject) => { - this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); - }); - } - utimesSync(p, atime, mtime) { - this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); - } - async lutimesPromiseImpl(p, atime, mtime) { - const lutimes = this.realFs.lutimes; - if (typeof lutimes === `undefined`) - throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`); - return await new Promise((resolve, reject) => { - lutimes.call(this.realFs, npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); - }); - } - lutimesSyncImpl(p, atime, mtime) { - const lutimesSync = this.realFs.lutimesSync; - if (typeof lutimesSync === `undefined`) - throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`); - lutimesSync.call(this.realFs, npath.fromPortablePath(p), atime, mtime); - } - async mkdirPromise(p, opts) { - return await new Promise((resolve, reject) => { - this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - }); - } - mkdirSync(p, opts) { - return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); - } - async rmdirPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - rmdirSync(p, opts) { - return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); - } - async linkPromise(existingP, newP) { - return await new Promise((resolve, reject) => { - this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); - }); - } - linkSync(existingP, newP) { - return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); - } - async symlinkPromise(target, p, type) { - return await new Promise((resolve, reject) => { - this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); - }); - } - symlinkSync(target, p, type) { - return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); - } - async readFilePromise(p, encoding) { - return await new Promise((resolve, reject) => { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); - }); - } - readFileSync(p, encoding) { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - return this.realFs.readFileSync(fsNativePath, encoding); - } - async readdirPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts == null ? void 0 : opts.withFileTypes) { - this.realFs.readdir(npath.fromPortablePath(p), { withFileTypes: true }, this.makeCallback(resolve, reject)); - } else { - this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback((value) => resolve(value), reject)); - } - }); - } - readdirSync(p, opts) { - if (opts == null ? void 0 : opts.withFileTypes) { - return this.realFs.readdirSync(npath.fromPortablePath(p), { withFileTypes: true }); - } else { - return this.realFs.readdirSync(npath.fromPortablePath(p)); - } - } - async readlinkPromise(p) { - return await new Promise((resolve, reject) => { - this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - }).then((path) => { - return npath.toPortablePath(path); - }); - } - readlinkSync(p) { - return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); - } - async truncatePromise(p, len) { - return await new Promise((resolve, reject) => { - this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); - }); - } - truncateSync(p, len) { - return this.realFs.truncateSync(npath.fromPortablePath(p), len); - } - async ftruncatePromise(fd, len) { - return await new Promise((resolve, reject) => { - this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); - }); - } - ftruncateSync(fd, len) { - return this.realFs.ftruncateSync(fd, len); - } - watch(p, a, b) { - return this.realFs.watch( - npath.fromPortablePath(p), - a, - b - ); - } - watchFile(p, a, b) { - return this.realFs.watchFile( - npath.fromPortablePath(p), - a, - b - ); - } - unwatchFile(p, cb) { - return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); - } - makeCallback(resolve, reject) { - return (err, result) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }; - } -} - -class ProxiedFS extends FakeFS { - getExtractHint(hints) { - return this.baseFs.getExtractHint(hints); - } - resolve(path) { - return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); - } - getRealPath() { - return this.mapFromBase(this.baseFs.getRealPath()); - } - async openPromise(p, flags, mode) { - return this.baseFs.openPromise(this.mapToBase(p), flags, mode); - } - openSync(p, flags, mode) { - return this.baseFs.openSync(this.mapToBase(p), flags, mode); - } - async opendirPromise(p, opts) { - return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); - } - opendirSync(p, opts) { - return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); - } - async readPromise(fd, buffer, offset, length, position) { - return await this.baseFs.readPromise(fd, buffer, offset, length, position); - } - readSync(fd, buffer, offset, length, position) { - return this.baseFs.readSync(fd, buffer, offset, length, position); - } - async writePromise(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return await this.baseFs.writePromise(fd, buffer, offset); - } else { - return await this.baseFs.writePromise(fd, buffer, offset, length, position); - } - } - writeSync(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return this.baseFs.writeSync(fd, buffer, offset); - } else { - return this.baseFs.writeSync(fd, buffer, offset, length, position); - } - } - async closePromise(fd) { - return this.baseFs.closePromise(fd); - } - closeSync(fd) { - this.baseFs.closeSync(fd); - } - createReadStream(p, opts) { - return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); - } - createWriteStream(p, opts) { - return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); - } - async realpathPromise(p) { - return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); - } - realpathSync(p) { - return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); - } - async existsPromise(p) { - return this.baseFs.existsPromise(this.mapToBase(p)); - } - existsSync(p) { - return this.baseFs.existsSync(this.mapToBase(p)); - } - accessSync(p, mode) { - return this.baseFs.accessSync(this.mapToBase(p), mode); - } - async accessPromise(p, mode) { - return this.baseFs.accessPromise(this.mapToBase(p), mode); - } - async statPromise(p, opts) { - return this.baseFs.statPromise(this.mapToBase(p), opts); - } - statSync(p, opts) { - return this.baseFs.statSync(this.mapToBase(p), opts); - } - async fstatPromise(fd, opts) { - return this.baseFs.fstatPromise(fd, opts); - } - fstatSync(fd, opts) { - return this.baseFs.fstatSync(fd, opts); - } - lstatPromise(p, opts) { - return this.baseFs.lstatPromise(this.mapToBase(p), opts); - } - lstatSync(p, opts) { - return this.baseFs.lstatSync(this.mapToBase(p), opts); - } - async fchmodPromise(fd, mask) { - return this.baseFs.fchmodPromise(fd, mask); - } - fchmodSync(fd, mask) { - return this.baseFs.fchmodSync(fd, mask); - } - async chmodPromise(p, mask) { - return this.baseFs.chmodPromise(this.mapToBase(p), mask); - } - chmodSync(p, mask) { - return this.baseFs.chmodSync(this.mapToBase(p), mask); - } - async fchownPromise(fd, uid, gid) { - return this.baseFs.fchownPromise(fd, uid, gid); - } - fchownSync(fd, uid, gid) { - return this.baseFs.fchownSync(fd, uid, gid); - } - async chownPromise(p, uid, gid) { - return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); - } - chownSync(p, uid, gid) { - return this.baseFs.chownSync(this.mapToBase(p), uid, gid); - } - async renamePromise(oldP, newP) { - return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); - } - renameSync(oldP, newP) { - return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); - } - async copyFilePromise(sourceP, destP, flags = 0) { - return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); - } - copyFileSync(sourceP, destP, flags = 0) { - return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); - } - async appendFilePromise(p, content, opts) { - return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); - } - appendFileSync(p, content, opts) { - return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); - } - async writeFilePromise(p, content, opts) { - return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); - } - writeFileSync(p, content, opts) { - return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); - } - async unlinkPromise(p) { - return this.baseFs.unlinkPromise(this.mapToBase(p)); - } - unlinkSync(p) { - return this.baseFs.unlinkSync(this.mapToBase(p)); - } - async utimesPromise(p, atime, mtime) { - return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); - } - utimesSync(p, atime, mtime) { - return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); - } - async mkdirPromise(p, opts) { - return this.baseFs.mkdirPromise(this.mapToBase(p), opts); - } - mkdirSync(p, opts) { - return this.baseFs.mkdirSync(this.mapToBase(p), opts); - } - async rmdirPromise(p, opts) { - return this.baseFs.rmdirPromise(this.mapToBase(p), opts); - } - rmdirSync(p, opts) { - return this.baseFs.rmdirSync(this.mapToBase(p), opts); - } - async linkPromise(existingP, newP) { - return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); - } - linkSync(existingP, newP) { - return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); - } - async symlinkPromise(target, p, type) { - const mappedP = this.mapToBase(p); - if (this.pathUtils.isAbsolute(target)) - return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); - const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); - const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); - return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); - } - symlinkSync(target, p, type) { - const mappedP = this.mapToBase(p); - if (this.pathUtils.isAbsolute(target)) - return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); - const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); - const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); - return this.baseFs.symlinkSync(mappedTarget, mappedP, type); - } - async readFilePromise(p, encoding) { - if (encoding === `utf8`) { - return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); - } else { - return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); - } - } - readFileSync(p, encoding) { - if (encoding === `utf8`) { - return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); - } else { - return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); - } - } - async readdirPromise(p, opts) { - return this.baseFs.readdirPromise(this.mapToBase(p), opts); - } - readdirSync(p, opts) { - return this.baseFs.readdirSync(this.mapToBase(p), opts); - } - async readlinkPromise(p) { - return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); - } - readlinkSync(p) { - return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); - } - async truncatePromise(p, len) { - return this.baseFs.truncatePromise(this.mapToBase(p), len); - } - truncateSync(p, len) { - return this.baseFs.truncateSync(this.mapToBase(p), len); - } - async ftruncatePromise(fd, len) { - return this.baseFs.ftruncatePromise(fd, len); - } - ftruncateSync(fd, len) { - return this.baseFs.ftruncateSync(fd, len); - } - watch(p, a, b) { - return this.baseFs.watch( - this.mapToBase(p), - a, - b - ); - } - watchFile(p, a, b) { - return this.baseFs.watchFile( - this.mapToBase(p), - a, - b - ); - } - unwatchFile(p, cb) { - return this.baseFs.unwatchFile(this.mapToBase(p), cb); - } - fsMapToBase(p) { - if (typeof p === `number`) { - return p; - } else { - return this.mapToBase(p); - } - } -} - -const NUMBER_REGEXP = /^[0-9]+$/; -const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; -const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; -class VirtualFS extends ProxiedFS { - constructor({ baseFs = new NodeFS() } = {}) { - super(ppath); - this.baseFs = baseFs; - } - static makeVirtualPath(base, component, to) { - if (ppath.basename(base) !== `__virtual__`) - throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); - if (!ppath.basename(component).match(VALID_COMPONENT)) - throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); - const target = ppath.relative(ppath.dirname(base), to); - const segments = target.split(`/`); - let depth = 0; - while (depth < segments.length && segments[depth] === `..`) - depth += 1; - const finalSegments = segments.slice(depth); - const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); - return fullVirtualPath; - } - static resolveVirtual(p) { - const match = p.match(VIRTUAL_REGEXP); - if (!match || !match[3] && match[5]) - return p; - const target = ppath.dirname(match[1]); - if (!match[3] || !match[4]) - return target; - const isnum = NUMBER_REGEXP.test(match[4]); - if (!isnum) - return p; - const depth = Number(match[4]); - const backstep = `../`.repeat(depth); - const subpath = match[5] || `.`; - return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); - } - getExtractHint(hints) { - return this.baseFs.getExtractHint(hints); - } - getRealPath() { - return this.baseFs.getRealPath(); - } - realpathSync(p) { - const match = p.match(VIRTUAL_REGEXP); - if (!match) - return this.baseFs.realpathSync(p); - if (!match[5]) - return p; - const realpath = this.baseFs.realpathSync(this.mapToBase(p)); - return VirtualFS.makeVirtualPath(match[1], match[3], realpath); - } - async realpathPromise(p) { - const match = p.match(VIRTUAL_REGEXP); - if (!match) - return await this.baseFs.realpathPromise(p); - if (!match[5]) - return p; - const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); - return VirtualFS.makeVirtualPath(match[1], match[3], realpath); - } - mapToBase(p) { - if (p === ``) - return p; - if (this.pathUtils.isAbsolute(p)) - return VirtualFS.resolveVirtual(p); - const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); - const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); - return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; - } - mapFromBase(p) { - return p; - } -} - -const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); -const HAS_CONSOLIDATED_HOOKS = major > 16 || major === 16 && minor >= 12; -const HAS_UNFLAGGED_JSON_MODULES = major > 17 || major === 17 && minor >= 5 || major === 16 && minor >= 15; -const HAS_JSON_IMPORT_ASSERTION_REQUIREMENT = major > 17 || major === 17 && minor >= 1 || major === 16 && minor > 14; -const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13; -const HAS_LAZY_LOADED_TRANSLATORS = major > 19 || major === 19 && minor >= 3; - -const builtinModules = new Set(Module.builtinModules || Object.keys(process.binding(`natives`))); -const isBuiltinModule = (request) => request.startsWith(`node:`) || builtinModules.has(request); -function readPackageScope(checkPath) { - const rootSeparatorIndex = checkPath.indexOf(npath.sep); - let separatorIndex; - do { - separatorIndex = checkPath.lastIndexOf(npath.sep); - checkPath = checkPath.slice(0, separatorIndex); - if (checkPath.endsWith(`${npath.sep}node_modules`)) - return false; - const pjson = readPackage(checkPath + npath.sep); - if (pjson) { - return { - data: pjson, - path: checkPath - }; - } - } while (separatorIndex > rootSeparatorIndex); - return false; -} -function readPackage(requestPath) { - const jsonPath = npath.resolve(requestPath, `package.json`); - if (!fs.existsSync(jsonPath)) - return null; - return JSON.parse(fs.readFileSync(jsonPath, `utf8`)); -} - -async function tryReadFile$1(path2) { - try { - return await fs.promises.readFile(path2, `utf8`); - } catch (error) { - if (error.code === `ENOENT`) - return null; - throw error; - } -} -function tryParseURL(str, base) { - try { - return new URL$1(str, base); - } catch { - return null; - } -} -let entrypointPath = null; -function setEntrypointPath(file) { - entrypointPath = file; -} -function getFileFormat(filepath) { - var _a, _b; - const ext = path.extname(filepath); - switch (ext) { - case `.mjs`: { - return `module`; - } - case `.cjs`: { - return `commonjs`; - } - case `.wasm`: { - throw new Error( - `Unknown file extension ".wasm" for ${filepath}` - ); - } - case `.json`: { - if (HAS_UNFLAGGED_JSON_MODULES) - return `json`; - throw new Error( - `Unknown file extension ".json" for ${filepath}` - ); - } - case `.js`: { - const pkg = readPackageScope(filepath); - if (!pkg) - return `commonjs`; - return (_a = pkg.data.type) != null ? _a : `commonjs`; - } - default: { - if (entrypointPath !== filepath) - return null; - const pkg = readPackageScope(filepath); - if (!pkg) - return `commonjs`; - if (pkg.data.type === `module`) - return null; - return (_b = pkg.data.type) != null ? _b : `commonjs`; - } - } -} - -async function getFormat$1(resolved, context, defaultGetFormat) { - const url = tryParseURL(resolved); - if ((url == null ? void 0 : url.protocol) !== `file:`) - return defaultGetFormat(resolved, context, defaultGetFormat); - const format = getFileFormat(fileURLToPath(url)); - if (format) { - return { - format - }; - } - return defaultGetFormat(resolved, context, defaultGetFormat); -} - -async function getSource$1(urlString, context, defaultGetSource) { - const url = tryParseURL(urlString); - if ((url == null ? void 0 : url.protocol) !== `file:`) - return defaultGetSource(urlString, context, defaultGetSource); - return { - source: await fs.promises.readFile(fileURLToPath(url), `utf8`) - }; -} - -async function load$1(urlString, context, nextLoad) { - var _a; - const url = tryParseURL(urlString); - if ((url == null ? void 0 : url.protocol) !== `file:`) - return nextLoad(urlString, context, nextLoad); - const filePath = fileURLToPath(url); - const format = getFileFormat(filePath); - if (!format) - return nextLoad(urlString, context, nextLoad); - if (HAS_JSON_IMPORT_ASSERTION_REQUIREMENT && format === `json` && ((_a = context.importAssertions) == null ? void 0 : _a.type) !== `json`) { - const err = new TypeError(`[ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "${urlString}" needs an import assertion of type "json"`); - err.code = `ERR_IMPORT_ASSERTION_TYPE_MISSING`; - throw err; - } - if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { - const pathToSend = pathToFileURL( - npath.fromPortablePath( - VirtualFS.resolveVirtual(npath.toPortablePath(filePath)) - ) - ).href; - process.send({ - "watch:import": WATCH_MODE_MESSAGE_USES_ARRAYS ? [pathToSend] : pathToSend - }); - } - return { - format, - source: format === `commonjs` ? void 0 : await fs.promises.readFile(filePath, `utf8`), - shortCircuit: true - }; -} - -const ArrayIsArray = Array.isArray; -const JSONStringify = JSON.stringify; -const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; -const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); -const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); -const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); -const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); -const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); -const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); -const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); -const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); -const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); -const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); -const SafeMap = Map; -const JSONParse = JSON.parse; - -function createErrorType(code, messageCreator, errorType) { - return class extends errorType { - constructor(...args) { - super(messageCreator(...args)); - this.code = code; - this.name = `${errorType.name} [${code}]`; - } - }; -} -const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( - `ERR_PACKAGE_IMPORT_NOT_DEFINED`, - (specifier, packagePath, base) => { - return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; - }, - TypeError -); -const ERR_INVALID_MODULE_SPECIFIER = createErrorType( - `ERR_INVALID_MODULE_SPECIFIER`, - (request, reason, base = void 0) => { - return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; - }, - TypeError -); -const ERR_INVALID_PACKAGE_TARGET = createErrorType( - `ERR_INVALID_PACKAGE_TARGET`, - (pkgPath, key, target, isImport = false, base = void 0) => { - const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); - if (key === `.`) { - assert(isImport === false); - return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; - } - return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( - target - )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; - }, - Error -); -const ERR_INVALID_PACKAGE_CONFIG = createErrorType( - `ERR_INVALID_PACKAGE_CONFIG`, - (path, base, message) => { - return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; - }, - Error -); - -function filterOwnProperties(source, keys) { - const filtered = /* @__PURE__ */ Object.create(null); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - if (ObjectPrototypeHasOwnProperty(source, key)) { - filtered[key] = source[key]; - } - } - return filtered; -} - -const packageJSONCache = new SafeMap(); -function getPackageConfig(path, specifier, base, readFileSyncFn) { - const existing = packageJSONCache.get(path); - if (existing !== void 0) { - return existing; - } - const source = readFileSyncFn(path); - if (source === void 0) { - const packageConfig2 = { - pjsonPath: path, - exists: false, - main: void 0, - name: void 0, - type: "none", - exports: void 0, - imports: void 0 - }; - packageJSONCache.set(path, packageConfig2); - return packageConfig2; - } - let packageJSON; - try { - packageJSON = JSONParse(source); - } catch (error) { - throw new ERR_INVALID_PACKAGE_CONFIG( - path, - (base ? `"${specifier}" from ` : "") + fileURLToPath(base || specifier), - error.message - ); - } - let { imports, main, name, type } = filterOwnProperties(packageJSON, [ - "imports", - "main", - "name", - "type" - ]); - const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; - if (typeof imports !== "object" || imports === null) { - imports = void 0; - } - if (typeof main !== "string") { - main = void 0; - } - if (typeof name !== "string") { - name = void 0; - } - if (type !== "module" && type !== "commonjs") { - type = "none"; - } - const packageConfig = { - pjsonPath: path, - exists: true, - main, - name, - type, - exports, - imports - }; - packageJSONCache.set(path, packageConfig); - return packageConfig; -} -function getPackageScopeConfig(resolved, readFileSyncFn) { - let packageJSONUrl = new URL("./package.json", resolved); - while (true) { - const packageJSONPath2 = packageJSONUrl.pathname; - if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { - break; - } - const packageConfig2 = getPackageConfig( - fileURLToPath(packageJSONUrl), - resolved, - void 0, - readFileSyncFn - ); - if (packageConfig2.exists) { - return packageConfig2; - } - const lastPackageJSONUrl = packageJSONUrl; - packageJSONUrl = new URL("../package.json", packageJSONUrl); - if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { - break; - } - } - const packageJSONPath = fileURLToPath(packageJSONUrl); - const packageConfig = { - pjsonPath: packageJSONPath, - exists: false, - main: void 0, - name: void 0, - type: "none", - exports: void 0, - imports: void 0 - }; - packageJSONCache.set(packageJSONPath, packageConfig); - return packageConfig; -} - -/** - @license - Copyright Node.js contributors. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. -*/ -function throwImportNotDefined(specifier, packageJSONUrl, base) { - throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( - specifier, - packageJSONUrl && fileURLToPath(new URL(".", packageJSONUrl)), - fileURLToPath(base) - ); -} -function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { - const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${fileURLToPath(packageJSONUrl)}`; - throw new ERR_INVALID_MODULE_SPECIFIER( - subpath, - reason, - base && fileURLToPath(base) - ); -} -function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { - if (typeof target === "object" && target !== null) { - target = JSONStringify(target, null, ""); - } else { - target = `${target}`; - } - throw new ERR_INVALID_PACKAGE_TARGET( - fileURLToPath(new URL(".", packageJSONUrl)), - subpath, - target, - internal, - base && fileURLToPath(base) - ); -} -const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; -const patternRegEx = /\*/g; -function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { - if (subpath !== "" && !pattern && target[target.length - 1] !== "/") - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - if (!StringPrototypeStartsWith(target, "./")) { - if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { - let isURL = false; - try { - new URL(target); - isURL = true; - } catch { - } - if (!isURL) { - const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; - return exportTarget; - } - } - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - } - if (RegExpPrototypeExec( - invalidSegmentRegEx, - StringPrototypeSlice(target, 2) - ) !== null) - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - const resolved = new URL(target, packageJSONUrl); - const resolvedPath = resolved.pathname; - const packagePath = new URL(".", packageJSONUrl).pathname; - if (!StringPrototypeStartsWith(resolvedPath, packagePath)) - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - if (subpath === "") - return resolved; - if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { - const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; - throwInvalidSubpath(request, packageJSONUrl, internal, base); - } - if (pattern) { - return new URL( - RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) - ); - } - return new URL(subpath, resolved); -} -function isArrayIndex(key) { - const keyNum = +key; - if (`${keyNum}` !== key) - return false; - return keyNum >= 0 && keyNum < 4294967295; -} -function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { - if (typeof target === "string") { - return resolvePackageTargetString( - target, - subpath, - packageSubpath, - packageJSONUrl, - base, - pattern, - internal); - } else if (ArrayIsArray(target)) { - if (target.length === 0) { - return null; - } - let lastException; - for (let i = 0; i < target.length; i++) { - const targetItem = target[i]; - let resolveResult; - try { - resolveResult = resolvePackageTarget( - packageJSONUrl, - targetItem, - subpath, - packageSubpath, - base, - pattern, - internal, - conditions - ); - } catch (e) { - lastException = e; - if (e.code === "ERR_INVALID_PACKAGE_TARGET") { - continue; - } - throw e; - } - if (resolveResult === void 0) { - continue; - } - if (resolveResult === null) { - lastException = null; - continue; - } - return resolveResult; - } - if (lastException === void 0 || lastException === null) - return lastException; - throw lastException; - } else if (typeof target === "object" && target !== null) { - const keys = ObjectGetOwnPropertyNames(target); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - if (isArrayIndex(key)) { - throw new ERR_INVALID_PACKAGE_CONFIG( - fileURLToPath(packageJSONUrl), - base, - '"exports" cannot contain numeric property keys.' - ); - } - } - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - if (key === "default" || conditions.has(key)) { - const conditionalTarget = target[key]; - const resolveResult = resolvePackageTarget( - packageJSONUrl, - conditionalTarget, - subpath, - packageSubpath, - base, - pattern, - internal, - conditions - ); - if (resolveResult === void 0) - continue; - return resolveResult; - } - } - return void 0; - } else if (target === null) { - return null; - } - throwInvalidPackageTarget( - packageSubpath, - target, - packageJSONUrl, - internal, - base - ); -} -function patternKeyCompare(a, b) { - const aPatternIndex = StringPrototypeIndexOf(a, "*"); - const bPatternIndex = StringPrototypeIndexOf(b, "*"); - const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; - const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; - if (baseLenA > baseLenB) - return -1; - if (baseLenB > baseLenA) - return 1; - if (aPatternIndex === -1) - return 1; - if (bPatternIndex === -1) - return -1; - if (a.length > b.length) - return -1; - if (b.length > a.length) - return 1; - return 0; -} -function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { - if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { - const reason = "is not a valid internal imports specifier name"; - throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath(base)); - } - let packageJSONUrl; - const packageConfig = getPackageScopeConfig(base, readFileSyncFn); - if (packageConfig.exists) { - packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); - const imports = packageConfig.imports; - if (imports) { - if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { - const resolveResult = resolvePackageTarget( - packageJSONUrl, - imports[name], - "", - name, - base, - false, - true, - conditions - ); - if (resolveResult != null) { - return resolveResult; - } - } else { - let bestMatch = ""; - let bestMatchSubpath; - const keys = ObjectGetOwnPropertyNames(imports); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - const patternIndex = StringPrototypeIndexOf(key, "*"); - if (patternIndex !== -1 && StringPrototypeStartsWith( - name, - StringPrototypeSlice(key, 0, patternIndex) - )) { - const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); - if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { - bestMatch = key; - bestMatchSubpath = StringPrototypeSlice( - name, - patternIndex, - name.length - patternTrailer.length - ); - } - } - } - if (bestMatch) { - const target = imports[bestMatch]; - const resolveResult = resolvePackageTarget( - packageJSONUrl, - target, - bestMatchSubpath, - bestMatch, - base, - true, - true, - conditions - ); - if (resolveResult != null) { - return resolveResult; - } - } - } - } - } - throwImportNotDefined(name, packageJSONUrl, base); -} - -const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; -const isRelativeRegexp = /^\.{0,2}\//; -function tryReadFile(filePath) { - try { - return fs.readFileSync(filePath, `utf8`); - } catch (err) { - if (err.code === `ENOENT`) - return void 0; - throw err; - } -} -async function resolvePrivateRequest(specifier, issuer, context, nextResolve) { - const resolved = packageImportsResolve({ - name: specifier, - base: pathToFileURL(issuer), - conditions: new Set(context.conditions), - readFileSyncFn: tryReadFile - }); - if (resolved instanceof URL$1) { - return { url: resolved.href, shortCircuit: true }; - } else { - if (resolved.startsWith(`#`)) - throw new Error(`Mapping from one private import to another isn't allowed`); - return resolve$1(resolved, context, nextResolve); - } -} -async function resolve$1(originalSpecifier, context, nextResolve) { - var _a, _b; - const { findPnpApi } = moduleExports; - if (!findPnpApi || isBuiltinModule(originalSpecifier)) - return nextResolve(originalSpecifier, context, nextResolve); - let specifier = originalSpecifier; - const url = tryParseURL(specifier, isRelativeRegexp.test(specifier) ? context.parentURL : void 0); - if (url) { - if (url.protocol !== `file:`) - return nextResolve(originalSpecifier, context, nextResolve); - specifier = fileURLToPath(url); - } - const { parentURL, conditions = [] } = context; - const issuer = parentURL && ((_a = tryParseURL(parentURL)) == null ? void 0 : _a.protocol) === `file:` ? fileURLToPath(parentURL) : process.cwd(); - const pnpapi = (_b = findPnpApi(issuer)) != null ? _b : url ? findPnpApi(specifier) : null; - if (!pnpapi) - return nextResolve(originalSpecifier, context, nextResolve); - if (specifier.startsWith(`#`)) - return resolvePrivateRequest(specifier, issuer, context, nextResolve); - const dependencyNameMatch = specifier.match(pathRegExp); - let allowLegacyResolve = false; - if (dependencyNameMatch) { - const [, dependencyName, subPath] = dependencyNameMatch; - if (subPath === `` && dependencyName !== `pnpapi`) { - const resolved = pnpapi.resolveToUnqualified(`${dependencyName}/package.json`, issuer); - if (resolved) { - const content = await tryReadFile$1(resolved); - if (content) { - const pkg = JSON.parse(content); - allowLegacyResolve = pkg.exports == null; - } - } - } - } - let result; - try { - result = pnpapi.resolveRequest(specifier, issuer, { - conditions: new Set(conditions), - extensions: allowLegacyResolve ? void 0 : [] - }); - } catch (err) { - if (err instanceof Error && `code` in err && err.code === `MODULE_NOT_FOUND`) - err.code = `ERR_MODULE_NOT_FOUND`; - throw err; - } - if (!result) - throw new Error(`Resolving '${specifier}' from '${issuer}' failed`); - const resultURL = pathToFileURL(result); - if (url) { - resultURL.search = url.search; - resultURL.hash = url.hash; - } - if (!parentURL) - setEntrypointPath(fileURLToPath(resultURL)); - return { - url: resultURL.href, - shortCircuit: true - }; -} - -if (!HAS_LAZY_LOADED_TRANSLATORS) { - const binding = process.binding(`fs`); - const originalfstat = binding.fstat; - const ZIP_MASK = 4278190080; - const ZIP_MAGIC = 704643072; - binding.fstat = function(...args) { - const [fd, useBigint, req] = args; - if ((fd & ZIP_MASK) === ZIP_MAGIC && useBigint === false && req === void 0) { - try { - const stats = fs.fstatSync(fd); - return new Float64Array([ - stats.dev, - stats.mode, - stats.nlink, - stats.uid, - stats.gid, - stats.rdev, - stats.blksize, - stats.ino, - stats.size, - stats.blocks - ]); - } catch { - } - } - return originalfstat.apply(this, args); - }; -} - -const resolve = resolve$1; -const getFormat = HAS_CONSOLIDATED_HOOKS ? void 0 : getFormat$1; -const getSource = HAS_CONSOLIDATED_HOOKS ? void 0 : getSource$1; -const load = HAS_CONSOLIDATED_HOOKS ? load$1 : void 0; - -export { getFormat, getSource, load, resolve }; diff --git a/extensions/puppet/Anchor.toml b/extensions/puppet/Anchor.toml index 90667dd..3eb04e9 100644 --- a/extensions/puppet/Anchor.toml +++ b/extensions/puppet/Anchor.toml @@ -9,7 +9,6 @@ puppet = "6nxvjh3D3kLkkb25sgRUdyomfYqeoUv7gfRFgcScy6jN" [registry] url = "https://api.apr.dev" -# url = "http://127.0.0.1:8899" [provider] cluster = "Localnet" @@ -19,4 +18,4 @@ wallet = "~/.config/solana/id.json" # address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" [scripts] -test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" +test = "pnpm run test" diff --git a/extensions/puppet/package.json b/extensions/puppet/package.json index 797b28d..c826f88 100644 --- a/extensions/puppet/package.json +++ b/extensions/puppet/package.json @@ -2,7 +2,8 @@ "license": "ISC", "scripts": { "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check", + "test": "ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" }, "dependencies": { "@coral-xyz/anchor": "^0.30.1" @@ -14,7 +15,7 @@ "@types/chai": "^4.3.0", "@types/mocha": "^9.0.0", "chai": "^4.3.4", - "mocha": "^9.0.3", + "mocha": "^9.2.2", "prettier": "^2.6.2", "ts-mocha": "^10.0.0", "typescript": "^4.3.5" From a22f278f205d4be92fb85b6e171ae8bf6ad23e76 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Mon, 9 Sep 2024 22:36:59 +0800 Subject: [PATCH 04/29] chore: delete unused log --- extensions/puppet/tests/puppet.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index d6f996e..342df52 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -92,8 +92,6 @@ describe("puppet program", () => { .signers([payer]) .rpc(); - console.log("Your transaction signature", tx); - const deviceBinding = await program.account.deviceBinding.fetch( deviceBindingPDA ); From d6d747c525af34a46e7308a848e976ac92567ce8 Mon Sep 17 00:00:00 2001 From: Jun Jiang Date: Mon, 9 Sep 2024 22:59:06 +0800 Subject: [PATCH 05/29] Cargo workspace ignore extensions --- Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index e6f9c59..7a1903c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,9 @@ members = [ "cli", "examples/kwil" ] +exclude = [ + "extensions", +] [workspace.dependencies] borsh = "1.5.1" From c30aac47b10a888de0877bb0755021fb7fd24c7c Mon Sep 17 00:00:00 2001 From: Jun Jiang Date: Mon, 9 Sep 2024 23:08:31 +0800 Subject: [PATCH 06/29] Cargo workspace ignore templates --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index 7a1903c..0c9736d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ members = [ ] exclude = [ "extensions", + "templates", ] [workspace.dependencies] From affcfbcfa488b9928dd680b77962e7d11321b68f Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Tue, 10 Sep 2024 11:57:14 +0800 Subject: [PATCH 07/29] feat: add unbind --- .../puppet/programs/puppet/src/errors.rs | 6 ++ .../programs/puppet/src/instructions/bind.rs | 23 ++++- .../programs/puppet/src/instructions/mod.rs | 2 + .../puppet/src/instructions/unbind.rs | 34 +++++++ extensions/puppet/programs/puppet/src/lib.rs | 4 + extensions/puppet/tests/puppet.ts | 95 +++++++++++-------- 6 files changed, 121 insertions(+), 43 deletions(-) create mode 100644 extensions/puppet/programs/puppet/src/instructions/unbind.rs diff --git a/extensions/puppet/programs/puppet/src/errors.rs b/extensions/puppet/programs/puppet/src/errors.rs index f7d906f..a3db2ce 100644 --- a/extensions/puppet/programs/puppet/src/errors.rs +++ b/extensions/puppet/programs/puppet/src/errors.rs @@ -8,6 +8,12 @@ pub enum ErrorCode { #[msg("The payer does not own the specified device.")] PayerDoesNotOwnDevice, + #[msg("The given device has already bound a nft.")] + DeviceAlreadyBound, + + #[msg("The given nft has already bound a device.")] + NFTAlreadyBound, + #[msg("The provided device does not match the binding.")] DeviceDoesNotMatch, diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs index 4c8e120..0bbd724 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -19,7 +19,7 @@ pub struct Bind<'info> { )] pub device_account: Account<'info, TokenAccount>, #[account( - init, + init_if_needed, payer = payer, space = 8 + 32 + 1, seeds = [b"device_binding", device_account.key().as_ref()], @@ -27,7 +27,7 @@ pub struct Bind<'info> { )] pub device_binding: Account<'info, DeviceBinding>, #[account( - init, + init_if_needed, payer = payer, space = 8 + 32 + 1, seeds = [b"nft_binding", nft_account.key().as_ref()], @@ -47,8 +47,23 @@ pub struct BindParams { } pub fn bind(ctx: Context, params: BindParams) -> Result<()> { - ctx.accounts.device_binding.nft = params.nft; - ctx.accounts.nft_binding.device = params.device; + let device_binding = &mut ctx.accounts.device_binding; + let nft_binding = &mut ctx.accounts.nft_binding; + + require_keys_eq!( + device_binding.nft, + Pubkey::default(), + ErrorCode::DeviceAlreadyBound + ); + + require_keys_eq!( + nft_binding.device, + Pubkey::default(), + ErrorCode::NFTAlreadyBound + ); + + device_binding.nft = params.nft; + nft_binding.device = params.device; Ok(()) } diff --git a/extensions/puppet/programs/puppet/src/instructions/mod.rs b/extensions/puppet/programs/puppet/src/instructions/mod.rs index f0f589e..16c0db9 100644 --- a/extensions/puppet/programs/puppet/src/instructions/mod.rs +++ b/extensions/puppet/programs/puppet/src/instructions/mod.rs @@ -1,10 +1,12 @@ pub use bind::*; +pub use unbind::*; pub use check_bound_by_device::*; pub use check_bound_by_nft::*; pub use get_nft_by_device::*; pub use get_device_by_nft::*; pub mod bind; +pub mod unbind; pub mod check_bound_by_device; pub mod check_bound_by_nft; pub mod get_nft_by_device; diff --git a/extensions/puppet/programs/puppet/src/instructions/unbind.rs b/extensions/puppet/programs/puppet/src/instructions/unbind.rs new file mode 100644 index 0000000..560b7a1 --- /dev/null +++ b/extensions/puppet/programs/puppet/src/instructions/unbind.rs @@ -0,0 +1,34 @@ +use crate::errors::ErrorCode; +use crate::state::{DeviceBinding, NFTBinding}; +use anchor_lang::prelude::*; +use anchor_spl::token::TokenAccount; + +#[derive(Accounts)] +pub struct Unbind<'info> { + #[account( + constraint = nft_account.owner == payer.key() @ ErrorCode::PayerDoesNotOwnNFT + )] + pub nft_account: Account<'info, TokenAccount>, + #[account( + constraint = device_account.owner == payer.key() @ ErrorCode::PayerDoesNotOwnDevice + )] + pub device_account: Account<'info, TokenAccount>, + #[account( + mut, + constraint = device_binding.nft == nft_account.key() @ ErrorCode::NFTDoesNotMatch + )] + pub device_binding: Account<'info, DeviceBinding>, + #[account( + mut, + constraint = nft_binding.device == device_account.key() @ ErrorCode::DeviceDoesNotMatch + )] + pub nft_binding: Account<'info, NFTBinding>, + pub payer: Signer<'info>, +} + +pub fn unbind(ctx: Context) -> Result<()> { + ctx.accounts.device_binding.nft = Pubkey::default(); + ctx.accounts.nft_binding.device = Pubkey::default(); + + Ok(()) +} \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/lib.rs b/extensions/puppet/programs/puppet/src/lib.rs index 2b29d8d..4174a20 100644 --- a/extensions/puppet/programs/puppet/src/lib.rs +++ b/extensions/puppet/programs/puppet/src/lib.rs @@ -15,6 +15,10 @@ pub mod puppet { instructions::bind(ctx, params) } + pub fn unbind(ctx: Context) -> Result<()> { + instructions::unbind(ctx) + } + pub fn check_bound_by_device(ctx: Context, device: Pubkey) -> Result { instructions::check_bound_by_device(ctx, device) } diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index 342df52..a166871 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -78,7 +78,7 @@ describe("puppet program", () => { nftBindingPDA = nftBindingPubkey; }); - it("binds NFT to device", async () => { + it("binds device and nft", async () => { const tx = await program.methods .bind({ device: deviceAccount, @@ -101,21 +101,27 @@ describe("puppet program", () => { assert.equal(nftBinding.device.toString(), deviceAccount.toString()); }); + it("unbinds device and nft", async () => { + await program.methods + .unbind() + .accounts({ + payer: payer.publicKey, + deviceAccount: deviceAccount, + nftAccount: nftAccount, + deviceBinding: deviceBindingPDA, + nftBinding: nftBindingPDA, + }) + .signers([payer]) + .rpc(); + + const deviceBinding = await program.account.deviceBinding.fetch(deviceBindingPDA); + const nftBinding = await program.account.nftBinding.fetch(nftBindingPDA); + + assert.equal(deviceBinding.nft.toString(), PublicKey.default.toString()); + assert.equal(nftBinding.device.toString(), PublicKey.default.toString()); + }); + it("fails to bind if payer does not own nft", async () => { - const unboundDeviceAccount = ( - await getOrCreateAssociatedTokenAccount( - provider.connection, - payer, - await createMint( - provider.connection, - payer, - payer.publicKey, - null, - 0 - ), - payer.publicKey - ) - ).address const nftAccountNotOwned = ( await getOrCreateAssociatedTokenAccount( provider.connection, @@ -128,12 +134,12 @@ describe("puppet program", () => { try { await program.methods .bind({ - device: unboundDeviceAccount, + device: deviceAccount, nft: nftAccountNotOwned, }) .accounts({ payer: payer.publicKey, - deviceAccount: unboundDeviceAccount, + deviceAccount: deviceAccount, nftAccount: nftAccountNotOwned, }) .signers([payer]) @@ -145,20 +151,6 @@ describe("puppet program", () => { }); it("fails to bind if payer does not own device", async () => { - const unboundNftAccount = ( - await getOrCreateAssociatedTokenAccount( - provider.connection, - payer, - await createMint( - provider.connection, - payer, - payer.publicKey, - null, - 0 - ), - payer.publicKey - ) - ).address const deviceAccountNotOwned = ( await getOrCreateAssociatedTokenAccount( provider.connection, @@ -172,12 +164,12 @@ describe("puppet program", () => { await program.methods .bind({ device: deviceAccountNotOwned, - nft: unboundNftAccount, + nft: nftAccount, }) .accounts({ payer: payer.publicKey, deviceAccount: deviceAccountNotOwned, - nftAccount: unboundNftAccount, + nftAccount: nftAccount, }) .signers([payer]) .rpc(); @@ -188,14 +180,34 @@ describe("puppet program", () => { }); it("fails to bind if device already bound", async () => { + await program.methods + .bind({ + device: deviceAccount, + nft: nftAccount, + }) + .accounts({ + payer: payer.publicKey, + deviceAccount: deviceAccount, + nftAccount: nftAccount, + }) + .signers([payer]) + .rpc(); + const nftAccountUnbound = ( await getOrCreateAssociatedTokenAccount( provider.connection, payer, - deviceMint, + await createMint( + provider.connection, + payer, + payer.publicKey, + null, + 0 + ), payer.publicKey ) ).address; + try { await program.methods .bind({ @@ -211,8 +223,7 @@ describe("puppet program", () => { .rpc(); assert.fail("Expected error but none was thrown"); } catch (err) { - const logs = err.logs || []; - assert.isTrue(logs.some((log) => log.includes("already in use"))); + assert.equal(err.error.errorCode.code, "DeviceAlreadyBound"); } }); @@ -221,10 +232,17 @@ describe("puppet program", () => { await getOrCreateAssociatedTokenAccount( provider.connection, payer, - deviceMint, + await createMint( + provider.connection, + payer, + payer.publicKey, + null, + 0 + ), payer.publicKey ) ).address; + try { await program.methods .bind({ @@ -240,8 +258,7 @@ describe("puppet program", () => { .rpc(); assert.fail("Expected error but none was thrown"); } catch (err) { - const logs = err.logs || []; - assert.isTrue(logs.some((log) => log.includes("already in use"))); + assert.equal(err.error.errorCode.code, "NFTAlreadyBound"); } }); }); From 145862d795f82375ed6d39ded391959cc7f0f00b Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Thu, 12 Sep 2024 14:58:32 +0800 Subject: [PATCH 08/29] feat: bind collection --- .../puppet/programs/puppet/src/errors.rs | 12 +++ .../programs/puppet/src/instructions/bind.rs | 16 +++- .../src/instructions/bind_collection.rs | 74 +++++++++++++++++++ .../programs/puppet/src/instructions/mod.rs | 16 ++-- .../puppet/src/instructions/unbind.rs | 34 --------- extensions/puppet/programs/puppet/src/lib.rs | 8 +- .../src/state/device_collection_binding.rs | 7 ++ .../puppet/programs/puppet/src/state/mod.rs | 12 ++- .../src/state/nft_collection_binding.rs | 7 ++ extensions/puppet/tests/puppet.ts | 20 ----- 10 files changed, 135 insertions(+), 71 deletions(-) create mode 100644 extensions/puppet/programs/puppet/src/instructions/bind_collection.rs delete mode 100644 extensions/puppet/programs/puppet/src/instructions/unbind.rs create mode 100644 extensions/puppet/programs/puppet/src/state/device_collection_binding.rs create mode 100644 extensions/puppet/programs/puppet/src/state/nft_collection_binding.rs diff --git a/extensions/puppet/programs/puppet/src/errors.rs b/extensions/puppet/programs/puppet/src/errors.rs index a3db2ce..f559506 100644 --- a/extensions/puppet/programs/puppet/src/errors.rs +++ b/extensions/puppet/programs/puppet/src/errors.rs @@ -2,6 +2,18 @@ use anchor_lang::error_code; #[error_code] pub enum ErrorCode { + #[msg("The given device collection does not match the collection binding.")] + DeviceCollectionDoesNotMatch, + + #[msg("The given nft collection does not match the collection binding.")] + NFTCollectionDoesNotMatch, + + #[msg("The given device collection has already bound.")] + DeviceCollectionAlreadyBound, + + #[msg("The given nft collection has already bound.")] + NFTCollectionAlreadyBound, + #[msg("The payer does not own the specified NFT.")] PayerDoesNotOwnNFT, diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs index 0bbd724..c079953 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -1,5 +1,5 @@ use crate::errors::ErrorCode; -use crate::state::{DeviceBinding, NFTBinding}; +use crate::state::{DeviceBinding, DeviceCollectionBinding, NFTBinding, NFTCollectionBinding}; use anchor_lang::prelude::*; use anchor_spl::token::TokenAccount; @@ -34,6 +34,8 @@ pub struct Bind<'info> { bump )] pub nft_binding: Account<'info, NFTBinding>, + pub device_collection_binding: Account<'info, DeviceCollectionBinding>, + pub nft_collection_binding: Account<'info, NFTCollectionBinding>, #[account(mut)] pub payer: Signer<'info>, pub rent: Sysvar<'info, Rent>, @@ -50,6 +52,18 @@ pub fn bind(ctx: Context, params: BindParams) -> Result<()> { let device_binding = &mut ctx.accounts.device_binding; let nft_binding = &mut ctx.accounts.nft_binding; + require_keys_eq!( + ctx.accounts.device_account.mint, + ctx.accounts.nft_collection_binding.device_collection, + ErrorCode::DeviceCollectionDoesNotMatch + ); + + require_keys_eq!( + ctx.accounts.nft_account.mint, + ctx.accounts.device_collection_binding.nft_collection, + ErrorCode::NFTCollectionDoesNotMatch + ); + require_keys_eq!( device_binding.nft, Pubkey::default(), diff --git a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs new file mode 100644 index 0000000..1e4dfe3 --- /dev/null +++ b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs @@ -0,0 +1,74 @@ +use crate::errors::ErrorCode; +use crate::state::{DeviceCollectionBinding, NFTCollectionBinding}; +use anchor_lang::prelude::*; +use anchor_spl::token::Mint; + +#[derive(Accounts)] +#[instruction( + params: BindCollectionParams +)] +pub struct BindCollection<'info> { + /// CHECK: + #[account( + constraint = product_mint_account.key() == params.device_collection, + seeds = [b"DePHY_ID-PRODUCT", payer.key().as_ref(), params.product_metadata_name.as_ref()], + bump = params.product_mint_bump, + seeds::program = params.dephy_id_program.key() + )] + pub product_mint_account: AccountInfo<'info>, + #[account( + constraint = nft_mint_account.key() == params.nft_collection, + )] + pub nft_mint_account: Account<'info, Mint>, + #[account( + init_if_needed, + payer = payer, + space = 8 + 32 + 1, + seeds = [b"device_collection_binding", product_mint_account.key().as_ref()], + bump + )] + pub device_collection_binding: Account<'info, DeviceCollectionBinding>, + #[account( + init_if_needed, + payer = payer, + space = 8 + 32 + 1, + seeds = [b"nft_collection_binding", nft_mint_account.key().as_ref()], + bump + )] + pub nft_collection_binding: Account<'info, NFTCollectionBinding>, + #[account(mut)] + pub payer: Signer<'info>, + pub rent: Sysvar<'info, Rent>, + pub system_program: Program<'info, System> +} + +#[derive(AnchorSerialize, AnchorDeserialize, Debug, Clone)] +pub struct BindCollectionParams { + pub dephy_id_program: Pubkey, + pub product_mint_bump: u8, + pub product_metadata_name: String, + pub device_collection: Pubkey, + pub nft_collection: Pubkey +} + +pub fn bind_collection(ctx: Context, params: BindCollectionParams) -> Result<()> { + let device_collection_binding = &mut ctx.accounts.device_collection_binding; + let nft_collection_binding = &mut ctx.accounts.nft_collection_binding; + + require_keys_eq!( + device_collection_binding.nft_collection, + Pubkey::default(), + ErrorCode::DeviceCollectionAlreadyBound + ); + + require_keys_eq!( + nft_collection_binding.device_collection, + Pubkey::default(), + ErrorCode::NFTCollectionAlreadyBound + ); + + device_collection_binding.nft_collection = params.nft_collection; + nft_collection_binding.device_collection = params.device_collection; + + Ok(()) +} diff --git a/extensions/puppet/programs/puppet/src/instructions/mod.rs b/extensions/puppet/programs/puppet/src/instructions/mod.rs index 16c0db9..5d896ae 100644 --- a/extensions/puppet/programs/puppet/src/instructions/mod.rs +++ b/extensions/puppet/programs/puppet/src/instructions/mod.rs @@ -1,13 +1,13 @@ +pub mod bind_collection; +pub mod bind; +pub mod check_bound_by_device; +pub mod check_bound_by_nft; +pub mod get_nft_by_device; +pub mod get_device_by_nft; + +pub use bind_collection::*; pub use bind::*; -pub use unbind::*; pub use check_bound_by_device::*; pub use check_bound_by_nft::*; pub use get_nft_by_device::*; pub use get_device_by_nft::*; - -pub mod bind; -pub mod unbind; -pub mod check_bound_by_device; -pub mod check_bound_by_nft; -pub mod get_nft_by_device; -pub mod get_device_by_nft; \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/instructions/unbind.rs b/extensions/puppet/programs/puppet/src/instructions/unbind.rs deleted file mode 100644 index 560b7a1..0000000 --- a/extensions/puppet/programs/puppet/src/instructions/unbind.rs +++ /dev/null @@ -1,34 +0,0 @@ -use crate::errors::ErrorCode; -use crate::state::{DeviceBinding, NFTBinding}; -use anchor_lang::prelude::*; -use anchor_spl::token::TokenAccount; - -#[derive(Accounts)] -pub struct Unbind<'info> { - #[account( - constraint = nft_account.owner == payer.key() @ ErrorCode::PayerDoesNotOwnNFT - )] - pub nft_account: Account<'info, TokenAccount>, - #[account( - constraint = device_account.owner == payer.key() @ ErrorCode::PayerDoesNotOwnDevice - )] - pub device_account: Account<'info, TokenAccount>, - #[account( - mut, - constraint = device_binding.nft == nft_account.key() @ ErrorCode::NFTDoesNotMatch - )] - pub device_binding: Account<'info, DeviceBinding>, - #[account( - mut, - constraint = nft_binding.device == device_account.key() @ ErrorCode::DeviceDoesNotMatch - )] - pub nft_binding: Account<'info, NFTBinding>, - pub payer: Signer<'info>, -} - -pub fn unbind(ctx: Context) -> Result<()> { - ctx.accounts.device_binding.nft = Pubkey::default(); - ctx.accounts.nft_binding.device = Pubkey::default(); - - Ok(()) -} \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/lib.rs b/extensions/puppet/programs/puppet/src/lib.rs index 4174a20..3a562b1 100644 --- a/extensions/puppet/programs/puppet/src/lib.rs +++ b/extensions/puppet/programs/puppet/src/lib.rs @@ -11,12 +11,12 @@ declare_id!("6nxvjh3D3kLkkb25sgRUdyomfYqeoUv7gfRFgcScy6jN"); pub mod puppet { use super::*; - pub fn bind(ctx: Context, params: BindParams) -> Result<()> { - instructions::bind(ctx, params) + pub fn bind_collection(ctx: Context, params: BindCollectionParams) -> Result<()> { + instructions::bind_collection(ctx, params) } - pub fn unbind(ctx: Context) -> Result<()> { - instructions::unbind(ctx) + pub fn bind(ctx: Context, params: BindParams) -> Result<()> { + instructions::bind(ctx, params) } pub fn check_bound_by_device(ctx: Context, device: Pubkey) -> Result { diff --git a/extensions/puppet/programs/puppet/src/state/device_collection_binding.rs b/extensions/puppet/programs/puppet/src/state/device_collection_binding.rs new file mode 100644 index 0000000..c00b84c --- /dev/null +++ b/extensions/puppet/programs/puppet/src/state/device_collection_binding.rs @@ -0,0 +1,7 @@ +use anchor_lang::prelude::*; + +#[account] +pub struct DeviceCollectionBinding { + pub nft_collection: Pubkey, + pub bump: u8, +} diff --git a/extensions/puppet/programs/puppet/src/state/mod.rs b/extensions/puppet/programs/puppet/src/state/mod.rs index 30cb379..77f483e 100644 --- a/extensions/puppet/programs/puppet/src/state/mod.rs +++ b/extensions/puppet/programs/puppet/src/state/mod.rs @@ -1,5 +1,9 @@ -pub use device_binding::*; -pub use nft_binding::*; - +pub mod device_collection_binding; +pub mod nft_collection_binding; pub mod device_binding; -pub mod nft_binding; \ No newline at end of file +pub mod nft_binding; + +pub use device_collection_binding::*; +pub use nft_collection_binding::*; +pub use device_binding::*; +pub use nft_binding::*; \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/state/nft_collection_binding.rs b/extensions/puppet/programs/puppet/src/state/nft_collection_binding.rs new file mode 100644 index 0000000..c7796b0 --- /dev/null +++ b/extensions/puppet/programs/puppet/src/state/nft_collection_binding.rs @@ -0,0 +1,7 @@ +use anchor_lang::prelude::*; + +#[account] +pub struct NFTCollectionBinding { + pub device_collection: Pubkey, + pub bump: u8, +} diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index a166871..c19aa5b 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -101,26 +101,6 @@ describe("puppet program", () => { assert.equal(nftBinding.device.toString(), deviceAccount.toString()); }); - it("unbinds device and nft", async () => { - await program.methods - .unbind() - .accounts({ - payer: payer.publicKey, - deviceAccount: deviceAccount, - nftAccount: nftAccount, - deviceBinding: deviceBindingPDA, - nftBinding: nftBindingPDA, - }) - .signers([payer]) - .rpc(); - - const deviceBinding = await program.account.deviceBinding.fetch(deviceBindingPDA); - const nftBinding = await program.account.nftBinding.fetch(nftBindingPDA); - - assert.equal(deviceBinding.nft.toString(), PublicKey.default.toString()); - assert.equal(nftBinding.device.toString(), PublicKey.default.toString()); - }); - it("fails to bind if payer does not own nft", async () => { const nftAccountNotOwned = ( await getOrCreateAssociatedTokenAccount( From d1db9a346789822f386223e41d787b8bb9a16e25 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Thu, 12 Sep 2024 16:45:09 +0800 Subject: [PATCH 09/29] fix: binding check --- .../puppet/programs/puppet/src/errors.rs | 4 ++ .../programs/puppet/src/instructions/bind.rs | 64 +++++++++++++------ .../src/instructions/bind_collection.rs | 22 +++---- .../src/instructions/check_bound_by_device.rs | 8 +-- .../src/instructions/check_bound_by_nft.rs | 4 +- .../src/instructions/get_device_by_nft.rs | 4 +- .../src/instructions/get_nft_by_device.rs | 4 +- .../puppet/src/state/device_binding.rs | 2 +- .../puppet/programs/puppet/src/state/mod.rs | 8 +-- .../state/{nft_binding.rs => mpl_binding.rs} | 4 +- ...n_binding.rs => mpl_collection_binding.rs} | 2 +- extensions/puppet/tests/puppet.ts | 2 +- 12 files changed, 78 insertions(+), 50 deletions(-) rename extensions/puppet/programs/puppet/src/state/{nft_binding.rs => mpl_binding.rs} (53%) rename extensions/puppet/programs/puppet/src/state/{nft_collection_binding.rs => mpl_collection_binding.rs} (73%) diff --git a/extensions/puppet/programs/puppet/src/errors.rs b/extensions/puppet/programs/puppet/src/errors.rs index f559506..71f99a4 100644 --- a/extensions/puppet/programs/puppet/src/errors.rs +++ b/extensions/puppet/programs/puppet/src/errors.rs @@ -31,4 +31,8 @@ pub enum ErrorCode { #[msg("The provided nft does not match the binding.")] NFTDoesNotMatch, + + DeviceAssociatedTokenDoesNotMatch, + + InvalidDeviceMintPDA, } \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs index c079953..4d91409 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -1,6 +1,7 @@ use crate::errors::ErrorCode; -use crate::state::{DeviceBinding, DeviceCollectionBinding, NFTBinding, NFTCollectionBinding}; +use crate::state::{DeviceBinding, DeviceCollectionBinding, MplBinding, MplCollectionBinding}; use anchor_lang::prelude::*; +use anchor_spl::associated_token::get_associated_token_address_with_program_id; use anchor_spl::token::TokenAccount; #[derive(Accounts)] @@ -9,20 +10,19 @@ use anchor_spl::token::TokenAccount; )] pub struct Bind<'info> { #[account( - constraint = nft_account.key() == params.nft, - constraint = nft_account.owner == payer.key() @ ErrorCode::PayerDoesNotOwnNFT + constraint = mpl_associated_token.key() == params.mpl_ata, + constraint = mpl_associated_token.owner == payer.key() @ ErrorCode::PayerDoesNotOwnNFT )] - pub nft_account: Account<'info, TokenAccount>, + pub mpl_associated_token: Account<'info, TokenAccount>, #[account( - constraint = device_account.key() == params.device, - constraint = device_account.owner == payer.key() @ ErrorCode::PayerDoesNotOwnDevice + constraint = device_associated_token.owner == payer.key() @ ErrorCode::PayerDoesNotOwnDevice )] - pub device_account: Account<'info, TokenAccount>, + pub device_associated_token: Account<'info, TokenAccount>, #[account( init_if_needed, payer = payer, space = 8 + 32 + 1, - seeds = [b"device_binding", device_account.key().as_ref()], + seeds = [b"device_binding", device_associated_token.key().as_ref()], bump )] pub device_binding: Account<'info, DeviceBinding>, @@ -30,12 +30,12 @@ pub struct Bind<'info> { init_if_needed, payer = payer, space = 8 + 32 + 1, - seeds = [b"nft_binding", nft_account.key().as_ref()], + seeds = [b"mpl_binding", mpl_associated_token.key().as_ref()], bump )] - pub nft_binding: Account<'info, NFTBinding>, + pub mpl_binding: Account<'info, MplBinding>, pub device_collection_binding: Account<'info, DeviceCollectionBinding>, - pub nft_collection_binding: Account<'info, NFTCollectionBinding>, + pub mpl_collection_binding: Account<'info, MplCollectionBinding>, #[account(mut)] pub payer: Signer<'info>, pub rent: Sysvar<'info, Rent>, @@ -44,40 +44,64 @@ pub struct Bind<'info> { #[derive(AnchorSerialize, AnchorDeserialize, Debug, Clone)] pub struct BindParams { + pub dephy_id_program: Pubkey, pub device: Pubkey, - pub nft: Pubkey, + pub device_mint_bump: u8, + pub mpl_ata: Pubkey, } pub fn bind(ctx: Context, params: BindParams) -> Result<()> { let device_binding = &mut ctx.accounts.device_binding; - let nft_binding = &mut ctx.accounts.nft_binding; + let mpl_binding = &mut ctx.accounts.mpl_binding; + + let device_mint_pubkey = Pubkey::create_program_address( + &[ + b"DePHY_ID-DEVICE", + ctx.accounts.mpl_collection_binding.device_collection.as_ref(), + params.device.as_ref(), + &[params.device_mint_bump], + ], + ¶ms.dephy_id_program, + ).map_err(|_| ErrorCode::InvalidDeviceMintPDA)?; + + let device_ata = get_associated_token_address_with_program_id( + &ctx.accounts.payer.key(), + &device_mint_pubkey, + ¶ms.dephy_id_program, + ); + + require_keys_eq!( + ctx.accounts.device_associated_token.key(), + device_ata, + ErrorCode::DeviceAssociatedTokenDoesNotMatch + ); require_keys_eq!( - ctx.accounts.device_account.mint, - ctx.accounts.nft_collection_binding.device_collection, + ctx.accounts.device_associated_token.mint, + device_mint_pubkey, ErrorCode::DeviceCollectionDoesNotMatch ); require_keys_eq!( - ctx.accounts.nft_account.mint, + ctx.accounts.mpl_associated_token.mint, ctx.accounts.device_collection_binding.nft_collection, ErrorCode::NFTCollectionDoesNotMatch ); require_keys_eq!( - device_binding.nft, + device_binding.mpl_ata, Pubkey::default(), ErrorCode::DeviceAlreadyBound ); require_keys_eq!( - nft_binding.device, + mpl_binding.device_ata, Pubkey::default(), ErrorCode::NFTAlreadyBound ); - device_binding.nft = params.nft; - nft_binding.device = params.device; + device_binding.mpl_ata = params.mpl_ata; + mpl_binding.device_ata = params.device; Ok(()) } diff --git a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs index 1e4dfe3..1ce2d7e 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs @@ -1,5 +1,5 @@ use crate::errors::ErrorCode; -use crate::state::{DeviceCollectionBinding, NFTCollectionBinding}; +use crate::state::{DeviceCollectionBinding, MplCollectionBinding}; use anchor_lang::prelude::*; use anchor_spl::token::Mint; @@ -10,21 +10,21 @@ use anchor_spl::token::Mint; pub struct BindCollection<'info> { /// CHECK: #[account( - constraint = product_mint_account.key() == params.device_collection, + constraint = product_mint.key() == params.device_collection, seeds = [b"DePHY_ID-PRODUCT", payer.key().as_ref(), params.product_metadata_name.as_ref()], bump = params.product_mint_bump, seeds::program = params.dephy_id_program.key() )] - pub product_mint_account: AccountInfo<'info>, + pub product_mint: AccountInfo<'info>, #[account( - constraint = nft_mint_account.key() == params.nft_collection, + constraint = mpl_mint.key() == params.nft_collection, )] - pub nft_mint_account: Account<'info, Mint>, + pub mpl_mint: Account<'info, Mint>, #[account( init_if_needed, payer = payer, space = 8 + 32 + 1, - seeds = [b"device_collection_binding", product_mint_account.key().as_ref()], + seeds = [b"device_collection_binding", product_mint.key().as_ref()], bump )] pub device_collection_binding: Account<'info, DeviceCollectionBinding>, @@ -32,10 +32,10 @@ pub struct BindCollection<'info> { init_if_needed, payer = payer, space = 8 + 32 + 1, - seeds = [b"nft_collection_binding", nft_mint_account.key().as_ref()], + seeds = [b"mpl_collection_binding", mpl_mint.key().as_ref()], bump )] - pub nft_collection_binding: Account<'info, NFTCollectionBinding>, + pub mpl_collection_binding: Account<'info, MplCollectionBinding>, #[account(mut)] pub payer: Signer<'info>, pub rent: Sysvar<'info, Rent>, @@ -53,7 +53,7 @@ pub struct BindCollectionParams { pub fn bind_collection(ctx: Context, params: BindCollectionParams) -> Result<()> { let device_collection_binding = &mut ctx.accounts.device_collection_binding; - let nft_collection_binding = &mut ctx.accounts.nft_collection_binding; + let mpl_collection_binding = &mut ctx.accounts.mpl_collection_binding; require_keys_eq!( device_collection_binding.nft_collection, @@ -62,13 +62,13 @@ pub fn bind_collection(ctx: Context, params: BindCollectionParam ); require_keys_eq!( - nft_collection_binding.device_collection, + mpl_collection_binding.device_collection, Pubkey::default(), ErrorCode::NFTCollectionAlreadyBound ); device_collection_binding.nft_collection = params.nft_collection; - nft_collection_binding.device_collection = params.device_collection; + mpl_collection_binding.device_collection = params.device_collection; Ok(()) } diff --git a/extensions/puppet/programs/puppet/src/instructions/check_bound_by_device.rs b/extensions/puppet/programs/puppet/src/instructions/check_bound_by_device.rs index ef0ed52..3124299 100644 --- a/extensions/puppet/programs/puppet/src/instructions/check_bound_by_device.rs +++ b/extensions/puppet/programs/puppet/src/instructions/check_bound_by_device.rs @@ -1,16 +1,16 @@ use crate::errors::ErrorCode; -use crate::state::{DeviceBinding, NFTBinding}; +use crate::state::{DeviceBinding, MplBinding}; use anchor_lang::prelude::*; #[derive(Accounts)] pub struct Bound<'info> { pub device_binding: Account<'info, DeviceBinding>, - pub nft_binding: Account<'info, NFTBinding>, + pub mpl_binding: Account<'info, MplBinding>, } pub fn check_bound_by_device(ctx: Context, device: Pubkey) -> Result { - if ctx.accounts.nft_binding.device != device { + if ctx.accounts.mpl_binding.device_ata != device { return Err(ErrorCode::DeviceDoesNotMatch.into()); } - Ok(ctx.accounts.device_binding.nft != Pubkey::default()) + Ok(ctx.accounts.device_binding.mpl_ata != Pubkey::default()) } \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/instructions/check_bound_by_nft.rs b/extensions/puppet/programs/puppet/src/instructions/check_bound_by_nft.rs index 08aa238..e56aac6 100644 --- a/extensions/puppet/programs/puppet/src/instructions/check_bound_by_nft.rs +++ b/extensions/puppet/programs/puppet/src/instructions/check_bound_by_nft.rs @@ -3,8 +3,8 @@ use anchor_lang::prelude::*; use super::Bound; pub fn check_bound_by_nft(ctx: Context, nft: Pubkey) -> Result { - if ctx.accounts.device_binding.nft != nft { + if ctx.accounts.device_binding.mpl_ata != nft { return Err(ErrorCode::NFTDoesNotMatch.into()); } - Ok(ctx.accounts.nft_binding.device != Pubkey::default()) + Ok(ctx.accounts.mpl_binding.device_ata != Pubkey::default()) } \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/instructions/get_device_by_nft.rs b/extensions/puppet/programs/puppet/src/instructions/get_device_by_nft.rs index 09fb2a2..2ce3223 100644 --- a/extensions/puppet/programs/puppet/src/instructions/get_device_by_nft.rs +++ b/extensions/puppet/programs/puppet/src/instructions/get_device_by_nft.rs @@ -3,8 +3,8 @@ use anchor_lang::prelude::*; use super::Bound; pub fn get_device_by_nft(ctx: Context, nft: Pubkey) -> Result { - if ctx.accounts.device_binding.nft != nft { + if ctx.accounts.device_binding.mpl_ata != nft { return Err(ErrorCode::NFTDoesNotMatch.into()); } - Ok(ctx.accounts.nft_binding.device) + Ok(ctx.accounts.mpl_binding.device_ata) } \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/instructions/get_nft_by_device.rs b/extensions/puppet/programs/puppet/src/instructions/get_nft_by_device.rs index 2ccba17..3e8a821 100644 --- a/extensions/puppet/programs/puppet/src/instructions/get_nft_by_device.rs +++ b/extensions/puppet/programs/puppet/src/instructions/get_nft_by_device.rs @@ -3,8 +3,8 @@ use anchor_lang::prelude::*; use super::Bound; pub fn get_nft_by_device(ctx: Context, device: Pubkey) -> Result { - if ctx.accounts.nft_binding.device != device { + if ctx.accounts.mpl_binding.device_ata != device { return Err(ErrorCode::DeviceDoesNotMatch.into()); } - Ok(ctx.accounts.device_binding.nft) + Ok(ctx.accounts.device_binding.mpl_ata) } \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/state/device_binding.rs b/extensions/puppet/programs/puppet/src/state/device_binding.rs index 9145745..c8adae9 100644 --- a/extensions/puppet/programs/puppet/src/state/device_binding.rs +++ b/extensions/puppet/programs/puppet/src/state/device_binding.rs @@ -2,6 +2,6 @@ use anchor_lang::prelude::*; #[account] pub struct DeviceBinding { - pub nft: Pubkey, + pub mpl_ata: Pubkey, pub bump: u8, } diff --git a/extensions/puppet/programs/puppet/src/state/mod.rs b/extensions/puppet/programs/puppet/src/state/mod.rs index 77f483e..66e32d9 100644 --- a/extensions/puppet/programs/puppet/src/state/mod.rs +++ b/extensions/puppet/programs/puppet/src/state/mod.rs @@ -1,9 +1,9 @@ pub mod device_collection_binding; -pub mod nft_collection_binding; +pub mod mpl_collection_binding; pub mod device_binding; -pub mod nft_binding; +pub mod mpl_binding; pub use device_collection_binding::*; -pub use nft_collection_binding::*; +pub use mpl_collection_binding::*; pub use device_binding::*; -pub use nft_binding::*; \ No newline at end of file +pub use mpl_binding::*; \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/state/nft_binding.rs b/extensions/puppet/programs/puppet/src/state/mpl_binding.rs similarity index 53% rename from extensions/puppet/programs/puppet/src/state/nft_binding.rs rename to extensions/puppet/programs/puppet/src/state/mpl_binding.rs index 9c128ae..cd84b2e 100644 --- a/extensions/puppet/programs/puppet/src/state/nft_binding.rs +++ b/extensions/puppet/programs/puppet/src/state/mpl_binding.rs @@ -1,7 +1,7 @@ use anchor_lang::prelude::*; #[account] -pub struct NFTBinding { - pub device: Pubkey, +pub struct MplBinding { + pub device_ata: Pubkey, pub bump: u8, } diff --git a/extensions/puppet/programs/puppet/src/state/nft_collection_binding.rs b/extensions/puppet/programs/puppet/src/state/mpl_collection_binding.rs similarity index 73% rename from extensions/puppet/programs/puppet/src/state/nft_collection_binding.rs rename to extensions/puppet/programs/puppet/src/state/mpl_collection_binding.rs index c7796b0..e800d64 100644 --- a/extensions/puppet/programs/puppet/src/state/nft_collection_binding.rs +++ b/extensions/puppet/programs/puppet/src/state/mpl_collection_binding.rs @@ -1,7 +1,7 @@ use anchor_lang::prelude::*; #[account] -pub struct NFTCollectionBinding { +pub struct MplCollectionBinding { pub device_collection: Pubkey, pub bump: u8, } diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index c19aa5b..aa3ebb2 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -70,7 +70,7 @@ describe("puppet program", () => { ); const [nftBindingPubkey] = PublicKey.findProgramAddressSync( - [Buffer.from("nft_binding"), nftAccount.toBuffer()], + [Buffer.from("mpl_binding"), nftAccount.toBuffer()], program.programId ); From 26f2827fa3d3c1e84dc212c52962a6e5444da25c Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Thu, 12 Sep 2024 20:54:33 +0800 Subject: [PATCH 10/29] feat: change bind params --- .../puppet/programs/puppet/src/constants.rs | 5 + .../puppet/programs/puppet/src/errors.rs | 13 +- .../programs/puppet/src/instructions/bind.rs | 18 +- .../src/instructions/bind_collection.rs | 13 +- extensions/puppet/programs/puppet/src/lib.rs | 1 + .../src/state/device_collection_binding.rs | 2 +- extensions/puppet/tests/puppet.ts | 452 +++++++++--------- 7 files changed, 254 insertions(+), 250 deletions(-) create mode 100644 extensions/puppet/programs/puppet/src/constants.rs diff --git a/extensions/puppet/programs/puppet/src/constants.rs b/extensions/puppet/programs/puppet/src/constants.rs new file mode 100644 index 0000000..cf1d2e4 --- /dev/null +++ b/extensions/puppet/programs/puppet/src/constants.rs @@ -0,0 +1,5 @@ +use anchor_lang::prelude::Pubkey; + +pub const DEPHY_ID_PROGRAM: Pubkey = Pubkey::new_from_array([10, 104, 87, 71, 135, 225, 232, 69, 21, 185, 195, 236, 216, 23, 119, 79, 176, 27, 100, 193, 237, 38, 213, 50, 121, 184, 103, 109, 227, 77, 99, 44]); +pub const PRODUCT_MINT_SEED_PREFIX: &[u8; 16] = b"DePHY_ID-PRODUCT"; +pub const DEVICE_MINT_SEED_PREFIX: &[u8; 15] = b"DePHY_ID-DEVICE"; \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/errors.rs b/extensions/puppet/programs/puppet/src/errors.rs index 71f99a4..69c809f 100644 --- a/extensions/puppet/programs/puppet/src/errors.rs +++ b/extensions/puppet/programs/puppet/src/errors.rs @@ -5,16 +5,16 @@ pub enum ErrorCode { #[msg("The given device collection does not match the collection binding.")] DeviceCollectionDoesNotMatch, - #[msg("The given nft collection does not match the collection binding.")] - NFTCollectionDoesNotMatch, + #[msg("The given metaplex collection does not match the collection binding.")] + MplCollectionDoesNotMatch, #[msg("The given device collection has already bound.")] DeviceCollectionAlreadyBound, - #[msg("The given nft collection has already bound.")] - NFTCollectionAlreadyBound, + #[msg("The given metaplex collection has already bound.")] + MplCollectionAlreadyBound, - #[msg("The payer does not own the specified NFT.")] + #[msg("The payer does not own the specified nft.")] PayerDoesNotOwnNFT, #[msg("The payer does not own the specified device.")] @@ -32,7 +32,6 @@ pub enum ErrorCode { #[msg("The provided nft does not match the binding.")] NFTDoesNotMatch, + #[msg("The calculated device associated token address does not match.")] DeviceAssociatedTokenDoesNotMatch, - - InvalidDeviceMintPDA, } \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs index 4d91409..9301b98 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -1,3 +1,4 @@ +use crate::constants::{DEVICE_MINT_SEED_PREFIX, DEPHY_ID_PROGRAM}; use crate::errors::ErrorCode; use crate::state::{DeviceBinding, DeviceCollectionBinding, MplBinding, MplCollectionBinding}; use anchor_lang::prelude::*; @@ -44,9 +45,7 @@ pub struct Bind<'info> { #[derive(AnchorSerialize, AnchorDeserialize, Debug, Clone)] pub struct BindParams { - pub dephy_id_program: Pubkey, pub device: Pubkey, - pub device_mint_bump: u8, pub mpl_ata: Pubkey, } @@ -54,20 +53,19 @@ pub fn bind(ctx: Context, params: BindParams) -> Result<()> { let device_binding = &mut ctx.accounts.device_binding; let mpl_binding = &mut ctx.accounts.mpl_binding; - let device_mint_pubkey = Pubkey::create_program_address( + let (device_mint_pubkey, _) = Pubkey::find_program_address( &[ - b"DePHY_ID-DEVICE", + DEVICE_MINT_SEED_PREFIX, ctx.accounts.mpl_collection_binding.device_collection.as_ref(), params.device.as_ref(), - &[params.device_mint_bump], ], - ¶ms.dephy_id_program, - ).map_err(|_| ErrorCode::InvalidDeviceMintPDA)?; + &DEPHY_ID_PROGRAM, + ); let device_ata = get_associated_token_address_with_program_id( &ctx.accounts.payer.key(), &device_mint_pubkey, - ¶ms.dephy_id_program, + &DEPHY_ID_PROGRAM, ); require_keys_eq!( @@ -84,8 +82,8 @@ pub fn bind(ctx: Context, params: BindParams) -> Result<()> { require_keys_eq!( ctx.accounts.mpl_associated_token.mint, - ctx.accounts.device_collection_binding.nft_collection, - ErrorCode::NFTCollectionDoesNotMatch + ctx.accounts.device_collection_binding.mpl_collection, + ErrorCode::MplCollectionDoesNotMatch ); require_keys_eq!( diff --git a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs index 1ce2d7e..b02c92a 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs @@ -1,3 +1,4 @@ +use crate::constants::PRODUCT_MINT_SEED_PREFIX; use crate::errors::ErrorCode; use crate::state::{DeviceCollectionBinding, MplCollectionBinding}; use anchor_lang::prelude::*; @@ -11,13 +12,13 @@ pub struct BindCollection<'info> { /// CHECK: #[account( constraint = product_mint.key() == params.device_collection, - seeds = [b"DePHY_ID-PRODUCT", payer.key().as_ref(), params.product_metadata_name.as_ref()], + seeds = [PRODUCT_MINT_SEED_PREFIX, payer.key().as_ref(), params.product_metadata_name.as_ref()], bump = params.product_mint_bump, seeds::program = params.dephy_id_program.key() )] pub product_mint: AccountInfo<'info>, #[account( - constraint = mpl_mint.key() == params.nft_collection, + constraint = mpl_mint.key() == params.mpl_collection, )] pub mpl_mint: Account<'info, Mint>, #[account( @@ -48,7 +49,7 @@ pub struct BindCollectionParams { pub product_mint_bump: u8, pub product_metadata_name: String, pub device_collection: Pubkey, - pub nft_collection: Pubkey + pub mpl_collection: Pubkey } pub fn bind_collection(ctx: Context, params: BindCollectionParams) -> Result<()> { @@ -56,7 +57,7 @@ pub fn bind_collection(ctx: Context, params: BindCollectionParam let mpl_collection_binding = &mut ctx.accounts.mpl_collection_binding; require_keys_eq!( - device_collection_binding.nft_collection, + device_collection_binding.mpl_collection, Pubkey::default(), ErrorCode::DeviceCollectionAlreadyBound ); @@ -64,10 +65,10 @@ pub fn bind_collection(ctx: Context, params: BindCollectionParam require_keys_eq!( mpl_collection_binding.device_collection, Pubkey::default(), - ErrorCode::NFTCollectionAlreadyBound + ErrorCode::MplCollectionAlreadyBound ); - device_collection_binding.nft_collection = params.nft_collection; + device_collection_binding.mpl_collection = params.mpl_collection; mpl_collection_binding.device_collection = params.device_collection; Ok(()) diff --git a/extensions/puppet/programs/puppet/src/lib.rs b/extensions/puppet/programs/puppet/src/lib.rs index 3a562b1..0f48357 100644 --- a/extensions/puppet/programs/puppet/src/lib.rs +++ b/extensions/puppet/programs/puppet/src/lib.rs @@ -1,6 +1,7 @@ use anchor_lang::prelude::*; use instructions::*; +pub mod constants; pub mod instructions; pub mod state; pub mod errors; diff --git a/extensions/puppet/programs/puppet/src/state/device_collection_binding.rs b/extensions/puppet/programs/puppet/src/state/device_collection_binding.rs index c00b84c..7808aa4 100644 --- a/extensions/puppet/programs/puppet/src/state/device_collection_binding.rs +++ b/extensions/puppet/programs/puppet/src/state/device_collection_binding.rs @@ -2,6 +2,6 @@ use anchor_lang::prelude::*; #[account] pub struct DeviceCollectionBinding { - pub nft_collection: Pubkey, + pub mpl_collection: Pubkey, pub bump: u8, } diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index aa3ebb2..1abac4b 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -14,231 +14,231 @@ describe("puppet program", () => { const program = anchor.workspace.Puppet as Program; - let payer = Keypair.generate(); - let deviceMint: PublicKey; - let nftMint: PublicKey; - let deviceAccount: PublicKey; - let nftAccount: PublicKey; - let deviceBindingPDA: PublicKey; - let nftBindingPDA: PublicKey; - - before(async () => { - await provider.connection.confirmTransaction( - await provider.connection.requestAirdrop( - payer.publicKey, - anchor.web3.LAMPORTS_PER_SOL - ) - ); - - deviceMint = await createMint( - provider.connection, - payer, - payer.publicKey, // mint authority - null, // freeze authority - 0 // decimals (0 for NFTs) - ); - - nftMint = await createMint( - provider.connection, - payer, - payer.publicKey, - null, - 0 - ); - - deviceAccount = ( - await getOrCreateAssociatedTokenAccount( - provider.connection, - payer, - deviceMint, // deviceMint - payer.publicKey // owner - ) - ).address; - - nftAccount = ( - await getOrCreateAssociatedTokenAccount( - provider.connection, - payer, - nftMint, // nftMint - payer.publicKey // owner - ) - ).address; - - const [deviceBindingPubkey] = PublicKey.findProgramAddressSync( - [Buffer.from("device_binding"), deviceAccount.toBuffer()], - program.programId - ); - - const [nftBindingPubkey] = PublicKey.findProgramAddressSync( - [Buffer.from("mpl_binding"), nftAccount.toBuffer()], - program.programId - ); - - deviceBindingPDA = deviceBindingPubkey; - nftBindingPDA = nftBindingPubkey; - }); - - it("binds device and nft", async () => { - const tx = await program.methods - .bind({ - device: deviceAccount, - nft: nftAccount, - }) - .accounts({ - payer: payer.publicKey, - deviceAccount: deviceAccount, - nftAccount: nftAccount, - }) - .signers([payer]) - .rpc(); - - const deviceBinding = await program.account.deviceBinding.fetch( - deviceBindingPDA - ); - const nftBinding = await program.account.nftBinding.fetch(nftBindingPDA); - - assert.equal(deviceBinding.nft.toString(), nftAccount.toString()); - assert.equal(nftBinding.device.toString(), deviceAccount.toString()); - }); - - it("fails to bind if payer does not own nft", async () => { - const nftAccountNotOwned = ( - await getOrCreateAssociatedTokenAccount( - provider.connection, - payer, - nftMint, - Keypair.generate().publicKey - ) - ).address; + // let payer = Keypair.generate(); + // let deviceMint: PublicKey; + // let nftMint: PublicKey; + // let deviceAccount: PublicKey; + // let nftAccount: PublicKey; + // let deviceBindingPDA: PublicKey; + // let nftBindingPDA: PublicKey; + + // // before(async () => { + // // await provider.connection.confirmTransaction( + // // await provider.connection.requestAirdrop( + // // payer.publicKey, + // // anchor.web3.LAMPORTS_PER_SOL + // // ) + // // ); + + // // deviceMint = await createMint( + // // provider.connection, + // // payer, + // // payer.publicKey, // mint authority + // // null, // freeze authority + // // 0 // decimals (0 for NFTs) + // // ); + + // // nftMint = await createMint( + // // provider.connection, + // // payer, + // // payer.publicKey, + // // null, + // // 0 + // // ); + + // // deviceAccount = ( + // // await getOrCreateAssociatedTokenAccount( + // // provider.connection, + // // payer, + // // deviceMint, // deviceMint + // // payer.publicKey // owner + // // ) + // // ).address; + + // // nftAccount = ( + // // await getOrCreateAssociatedTokenAccount( + // // provider.connection, + // // payer, + // // nftMint, // nftMint + // // payer.publicKey // owner + // // ) + // // ).address; + + // // const [deviceBindingPubkey] = PublicKey.findProgramAddressSync( + // // [Buffer.from("device_binding"), deviceAccount.toBuffer()], + // // program.programId + // // ); + + // // const [nftBindingPubkey] = PublicKey.findProgramAddressSync( + // // [Buffer.from("mpl_binding"), nftAccount.toBuffer()], + // // program.programId + // // ); + + // // deviceBindingPDA = deviceBindingPubkey; + // // nftBindingPDA = nftBindingPubkey; + // // }); + + // // it("binds device and nft", async () => { + // // const tx = await program.methods + // // .bind({ + // // device: deviceAccount, + // // nft: nftAccount, + // // }) + // // .accounts({ + // // payer: payer.publicKey, + // // deviceAccount: deviceAccount, + // // nftAccount: nftAccount, + // // }) + // // .signers([payer]) + // // .rpc(); + + // // const deviceBinding = await program.account.deviceBinding.fetch( + // // deviceBindingPDA + // // ); + // // const nftBinding = await program.account.nftBinding.fetch(nftBindingPDA); + + // // assert.equal(deviceBinding.nft.toString(), nftAccount.toString()); + // // assert.equal(nftBinding.device.toString(), deviceAccount.toString()); + // // }); + + // // it("fails to bind if payer does not own nft", async () => { + // // const nftAccountNotOwned = ( + // // await getOrCreateAssociatedTokenAccount( + // // provider.connection, + // // payer, + // // nftMint, + // // Keypair.generate().publicKey + // // ) + // // ).address; - try { - await program.methods - .bind({ - device: deviceAccount, - nft: nftAccountNotOwned, - }) - .accounts({ - payer: payer.publicKey, - deviceAccount: deviceAccount, - nftAccount: nftAccountNotOwned, - }) - .signers([payer]) - .rpc(); - assert.fail("Expected error but none was thrown"); - } catch (err) { - assert.equal(err.error.errorCode.code, "PayerDoesNotOwnNFT"); - } - }); - - it("fails to bind if payer does not own device", async () => { - const deviceAccountNotOwned = ( - await getOrCreateAssociatedTokenAccount( - provider.connection, - payer, - deviceMint, - Keypair.generate().publicKey - ) - ).address; - - try { - await program.methods - .bind({ - device: deviceAccountNotOwned, - nft: nftAccount, - }) - .accounts({ - payer: payer.publicKey, - deviceAccount: deviceAccountNotOwned, - nftAccount: nftAccount, - }) - .signers([payer]) - .rpc(); - assert.fail("Expected error but none was thrown"); - } catch (err) { - assert.equal(err.error.errorCode.code, "PayerDoesNotOwnDevice"); - } - }); - - it("fails to bind if device already bound", async () => { - await program.methods - .bind({ - device: deviceAccount, - nft: nftAccount, - }) - .accounts({ - payer: payer.publicKey, - deviceAccount: deviceAccount, - nftAccount: nftAccount, - }) - .signers([payer]) - .rpc(); - - const nftAccountUnbound = ( - await getOrCreateAssociatedTokenAccount( - provider.connection, - payer, - await createMint( - provider.connection, - payer, - payer.publicKey, - null, - 0 - ), - payer.publicKey - ) - ).address; - - try { - await program.methods - .bind({ - device: deviceAccount, - nft: nftAccountUnbound, - }) - .accounts({ - payer: payer.publicKey, - deviceAccount: deviceAccount, - nftAccount: nftAccountUnbound, - }) - .signers([payer]) - .rpc(); - assert.fail("Expected error but none was thrown"); - } catch (err) { - assert.equal(err.error.errorCode.code, "DeviceAlreadyBound"); - } - }); - - it("fails to bind if nft already bound", async () => { - const deviceAccountUnbound = ( - await getOrCreateAssociatedTokenAccount( - provider.connection, - payer, - await createMint( - provider.connection, - payer, - payer.publicKey, - null, - 0 - ), - payer.publicKey - ) - ).address; - - try { - await program.methods - .bind({ - device: deviceAccountUnbound, - nft: nftAccount, - }) - .accounts({ - payer: payer.publicKey, - deviceAccount: deviceAccountUnbound, - nftAccount: nftAccount, - }) - .signers([payer]) - .rpc(); - assert.fail("Expected error but none was thrown"); - } catch (err) { - assert.equal(err.error.errorCode.code, "NFTAlreadyBound"); - } - }); + // // try { + // // await program.methods + // // .bind({ + // // device: deviceAccount, + // // nft: nftAccountNotOwned, + // // }) + // // .accounts({ + // // payer: payer.publicKey, + // // deviceAccount: deviceAccount, + // // nftAccount: nftAccountNotOwned, + // // }) + // // .signers([payer]) + // // .rpc(); + // // assert.fail("Expected error but none was thrown"); + // // } catch (err) { + // // assert.equal(err.error.errorCode.code, "PayerDoesNotOwnNFT"); + // // } + // // }); + + // // it("fails to bind if payer does not own device", async () => { + // // const deviceAccountNotOwned = ( + // // await getOrCreateAssociatedTokenAccount( + // // provider.connection, + // // payer, + // // deviceMint, + // // Keypair.generate().publicKey + // // ) + // // ).address; + + // // try { + // // await program.methods + // // .bind({ + // // device: deviceAccountNotOwned, + // // nft: nftAccount, + // // }) + // // .accounts({ + // // payer: payer.publicKey, + // // deviceAccount: deviceAccountNotOwned, + // // nftAccount: nftAccount, + // // }) + // // .signers([payer]) + // // .rpc(); + // // assert.fail("Expected error but none was thrown"); + // // } catch (err) { + // // assert.equal(err.error.errorCode.code, "PayerDoesNotOwnDevice"); + // // } + // // }); + + // // it("fails to bind if device already bound", async () => { + // // await program.methods + // // .bind({ + // // device: deviceAccount, + // // nft: nftAccount, + // // }) + // // .accounts({ + // // payer: payer.publicKey, + // // deviceAccount: deviceAccount, + // // nftAccount: nftAccount, + // // }) + // // .signers([payer]) + // // .rpc(); + + // // const nftAccountUnbound = ( + // // await getOrCreateAssociatedTokenAccount( + // // provider.connection, + // // payer, + // // await createMint( + // // provider.connection, + // // payer, + // // payer.publicKey, + // // null, + // // 0 + // // ), + // // payer.publicKey + // // ) + // // ).address; + + // // try { + // // await program.methods + // // .bind({ + // // device: deviceAccount, + // // nft: nftAccountUnbound, + // // }) + // // .accounts({ + // // payer: payer.publicKey, + // // deviceAccount: deviceAccount, + // // nftAccount: nftAccountUnbound, + // // }) + // // .signers([payer]) + // // .rpc(); + // // assert.fail("Expected error but none was thrown"); + // // } catch (err) { + // // assert.equal(err.error.errorCode.code, "DeviceAlreadyBound"); + // // } + // // }); + + // // it("fails to bind if nft already bound", async () => { + // // const deviceAccountUnbound = ( + // // await getOrCreateAssociatedTokenAccount( + // // provider.connection, + // // payer, + // // await createMint( + // // provider.connection, + // // payer, + // // payer.publicKey, + // // null, + // // 0 + // // ), + // // payer.publicKey + // // ) + // // ).address; + + // // try { + // // await program.methods + // // .bind({ + // // device: deviceAccountUnbound, + // // nft: nftAccount, + // // }) + // // .accounts({ + // // payer: payer.publicKey, + // // deviceAccount: deviceAccountUnbound, + // // nftAccount: nftAccount, + // // }) + // // .signers([payer]) + // // .rpc(); + // // assert.fail("Expected error but none was thrown"); + // // } catch (err) { + // // assert.equal(err.error.errorCode.code, "NFTAlreadyBound"); + // // } + // // }); }); From fcd7e9b0409d4f6c10e8e8139e8576d653a5da83 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Fri, 13 Sep 2024 12:04:01 +0800 Subject: [PATCH 11/29] fix: bind_collection params --- .../puppet/src/instructions/bind_collection.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs index b02c92a..a0d8ac3 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs @@ -1,4 +1,4 @@ -use crate::constants::PRODUCT_MINT_SEED_PREFIX; +use crate::constants::{DEPHY_ID_PROGRAM, PRODUCT_MINT_SEED_PREFIX}; use crate::errors::ErrorCode; use crate::state::{DeviceCollectionBinding, MplCollectionBinding}; use anchor_lang::prelude::*; @@ -13,8 +13,8 @@ pub struct BindCollection<'info> { #[account( constraint = product_mint.key() == params.device_collection, seeds = [PRODUCT_MINT_SEED_PREFIX, payer.key().as_ref(), params.product_metadata_name.as_ref()], - bump = params.product_mint_bump, - seeds::program = params.dephy_id_program.key() + bump, + seeds::program = dephy_id_program.key() )] pub product_mint: AccountInfo<'info>, #[account( @@ -37,6 +37,9 @@ pub struct BindCollection<'info> { bump )] pub mpl_collection_binding: Account<'info, MplCollectionBinding>, + /// CHECK: This is the hardcoded DePhy ID Program address passed in as an AccountInfo + #[account(address = DEPHY_ID_PROGRAM)] + pub dephy_id_program: AccountInfo<'info>, #[account(mut)] pub payer: Signer<'info>, pub rent: Sysvar<'info, Rent>, @@ -45,8 +48,6 @@ pub struct BindCollection<'info> { #[derive(AnchorSerialize, AnchorDeserialize, Debug, Clone)] pub struct BindCollectionParams { - pub dephy_id_program: Pubkey, - pub product_mint_bump: u8, pub product_metadata_name: String, pub device_collection: Pubkey, pub mpl_collection: Pubkey From 68515d8aeb296a12b12ebc251eb5f2cebafac5ba Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Fri, 13 Sep 2024 13:37:00 +0800 Subject: [PATCH 12/29] feat: split payer and other role --- extensions/puppet/.gitignore | 2 +- extensions/puppet/client/index.ts | 71 + extensions/puppet/package.json | 8 +- extensions/puppet/pnpm-lock.yaml | 1558 +++++++++++++++++ .../puppet/programs/puppet/src/errors.rs | 8 +- .../programs/puppet/src/instructions/bind.rs | 6 +- .../src/instructions/bind_collection.rs | 4 +- 7 files changed, 1647 insertions(+), 10 deletions(-) create mode 100644 extensions/puppet/client/index.ts create mode 100644 extensions/puppet/pnpm-lock.yaml diff --git a/extensions/puppet/.gitignore b/extensions/puppet/.gitignore index 2e0446b..92049cd 100644 --- a/extensions/puppet/.gitignore +++ b/extensions/puppet/.gitignore @@ -4,4 +4,4 @@ target **/*.rs.bk node_modules test-ledger -.yarn +.yarn \ No newline at end of file diff --git a/extensions/puppet/client/index.ts b/extensions/puppet/client/index.ts new file mode 100644 index 0000000..27ccde7 --- /dev/null +++ b/extensions/puppet/client/index.ts @@ -0,0 +1,71 @@ +import yargs from "yargs"; +import { hideBin } from "yargs/helpers"; + +yargs(hideBin(process.argv)) + .command( + "create-product", + "Create product", + { + rpc: { type: "string", demandOption: true }, + privatekey: { type: "string", demandOption: true }, + }, + async (args) => { + + } + ) + .command( + "create-device", + "Create device", + { + rpc: { type: "string", demandOption: true }, + privatekey: { type: "string", demandOption: true }, + }, + async (args) => { + + }, + ) + .command( + "create-mpl-mint", + "Create metaplex mint", + { + rpc: { type: "string", demandOption: true }, + privatekey: { type: "string", demandOption: true }, + }, + async (args) => { + + }, + ) + .command( + "create-mpl-nft", + "Create metaplex nft", + { + rpc: { type: "string", demandOption: true }, + privatekey: { type: "string", demandOption: true }, + }, + async (args) => { + + }, + ) + .command( + "bind-collection", + "Bind product to metaplex mint", + { + rpc: { type: "string", demandOption: true }, + privatekey: { type: "string", demandOption: true }, + }, + async (args) => { + + }, + ) + .command( + "bind", + "Bind device to metaplex nft", + { + rpc: { type: "string", demandOption: true }, + privatekey: { type: "string", demandOption: true }, + }, + async (args) => { + + }, + ) + .help().argv; diff --git a/extensions/puppet/package.json b/extensions/puppet/package.json index c826f88..ac4afe0 100644 --- a/extensions/puppet/package.json +++ b/extensions/puppet/package.json @@ -3,7 +3,8 @@ "scripts": { "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check", - "test": "ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" + "test": "ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts", + "cli": "ts-node ./client/index.ts" }, "dependencies": { "@coral-xyz/anchor": "^0.30.1" @@ -14,10 +15,13 @@ "@types/bn.js": "^5.1.0", "@types/chai": "^4.3.0", "@types/mocha": "^9.0.0", + "@types/yargs": "^17.0.33", "chai": "^4.3.4", "mocha": "^9.2.2", "prettier": "^2.6.2", "ts-mocha": "^10.0.0", - "typescript": "^4.3.5" + "ts-node": "^10.9.2", + "typescript": "^4.3.5", + "yargs": "^17.7.2" } } diff --git a/extensions/puppet/pnpm-lock.yaml b/extensions/puppet/pnpm-lock.yaml new file mode 100644 index 0000000..278c438 --- /dev/null +++ b/extensions/puppet/pnpm-lock.yaml @@ -0,0 +1,1558 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@coral-xyz/anchor': + specifier: ^0.30.1 + version: 0.30.1 + +devDependencies: + '@solana/spl-token': + specifier: ^0.4.8 + version: 0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/web3.js': + specifier: ^1.95.3 + version: 1.95.3 + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.0 + '@types/chai': + specifier: ^4.3.0 + version: 4.3.0 + '@types/mocha': + specifier: ^9.0.0 + version: 9.0.0 + '@types/yargs': + specifier: ^17.0.33 + version: 17.0.33 + chai: + specifier: ^4.3.4 + version: 4.3.4 + mocha: + specifier: ^9.2.2 + version: 9.2.2 + prettier: + specifier: ^2.6.2 + version: 2.6.2 + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.5.4)(typescript@4.3.5) + typescript: + specifier: ^4.3.5 + version: 4.3.5 + yargs: + specifier: ^17.7.2 + version: 17.7.2 + +packages: + + /@babel/runtime@7.25.6: + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + + /@coral-xyz/anchor-errors@0.30.1: + resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} + engines: {node: '>=10'} + dev: false + + /@coral-xyz/anchor@0.30.1: + resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} + engines: {node: '>=11'} + dependencies: + '@coral-xyz/anchor-errors': 0.30.1 + '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.3) + '@noble/hashes': 1.5.0 + '@solana/web3.js': 1.95.3 + bn.js: 5.2.1 + bs58: 4.0.1 + buffer-layout: 1.2.2 + camelcase: 6.3.0 + cross-fetch: 3.1.8 + crypto-hash: 1.3.0 + eventemitter3: 4.0.7 + pako: 2.1.0 + snake-case: 3.0.4 + superstruct: 0.15.5 + toml: 3.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.3): + resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + dependencies: + '@solana/web3.js': 1.95.3 + bn.js: 5.2.1 + buffer-layout: 1.2.2 + dev: false + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + dev: true + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + dev: true + + /@noble/curves@1.6.0: + resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} + engines: {node: ^14.21.3 || >=16} + dependencies: + '@noble/hashes': 1.5.0 + + /@noble/hashes@1.5.0: + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + + /@solana/buffer-layout-utils@0.2.0: + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.95.3 + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + + /@solana/buffer-layout@4.0.1: + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + dependencies: + buffer: 6.0.3 + + /@solana/codecs-core@2.0.0-preview.4(typescript@4.3.5): + resolution: {integrity: sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) + typescript: 4.3.5 + dev: true + + /@solana/codecs-core@2.0.0-rc.1(typescript@4.3.5): + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) + typescript: 4.3.5 + dev: true + + /@solana/codecs-data-structures@2.0.0-preview.4(typescript@4.3.5): + resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) + '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) + typescript: 4.3.5 + dev: true + + /@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.3.5): + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) + typescript: 4.3.5 + dev: true + + /@solana/codecs-numbers@2.0.0-preview.4(typescript@4.3.5): + resolution: {integrity: sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) + '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) + typescript: 4.3.5 + dev: true + + /@solana/codecs-numbers@2.0.0-rc.1(typescript@4.3.5): + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) + typescript: 4.3.5 + dev: true + + /@solana/codecs-strings@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) + '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 4.3.5 + dev: true + + /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 4.3.5 + dev: true + + /@solana/codecs@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/options': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + typescript: 4.3.5 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + dev: true + + /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + typescript: 4.3.5 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + dev: true + + /@solana/errors@2.0.0-preview.4(typescript@4.3.5): + resolution: {integrity: sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA==} + hasBin: true + peerDependencies: + typescript: '>=5' + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + typescript: 4.3.5 + dev: true + + /@solana/errors@2.0.0-rc.1(typescript@4.3.5): + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + hasBin: true + peerDependencies: + typescript: '>=5' + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + typescript: 4.3.5 + dev: true + + /@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) + '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) + typescript: 4.3.5 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + dev: true + + /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) + typescript: 4.3.5 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + dev: true + + /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.94.0 + dependencies: + '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.95.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + dev: true + + /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.95.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + dev: true + + /@solana/spl-token@0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.94.0 + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0 + '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/web3.js': 1.95.3 + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + dev: true + + /@solana/spl-type-length-value@0.1.0: + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + dependencies: + buffer: 6.0.3 + dev: true + + /@solana/web3.js@1.95.3: + resolution: {integrity: sha512-O6rPUN0w2fkNqx/Z3QJMB9L225Ex10PRDH8bTaIUPZXMPV0QP8ZpPvjQnXK+upUczlRgzHzd6SjKIha1p+I6og==} + dependencies: + '@babel/runtime': 7.25.6 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.2 + node-fetch: 2.7.0 + rpc-websockets: 9.0.2 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + /@swc/helpers@0.5.13: + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + dependencies: + tslib: 2.7.0 + + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@types/bn.js@5.1.0: + resolution: {integrity: sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==} + dependencies: + '@types/node': 22.5.4 + dev: true + + /@types/chai@4.3.0: + resolution: {integrity: sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==} + dev: true + + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 22.5.4 + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + requiresBuild: true + dev: true + optional: true + + /@types/mocha@9.0.0: + resolution: {integrity: sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==} + dev: true + + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + /@types/node@22.5.4: + resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==} + dependencies: + undici-types: 6.19.8 + + /@types/uuid@8.3.4: + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + /@types/ws@7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 22.5.4 + + /@types/ws@8.5.12: + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + dependencies: + '@types/node': 22.5.4 + + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: true + + /@types/yargs@17.0.33: + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: true + + /@ungap/promise-all-settled@1.1.2: + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + dev: true + + /JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + /acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.1 + dev: true + + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + dependencies: + humanize-ms: 1.2.1 + + /ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base-x@3.0.10: + resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + dependencies: + safe-buffer: 5.2.1 + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + + /bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + dev: true + + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + dev: true + + /bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + /borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.1.1 + dev: true + + /browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + dev: true + + /bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + dependencies: + base-x: 3.0.10 + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + dev: false + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + /bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.2 + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + /chai@4.3.4: + resolution: {integrity: sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 3.0.1 + get-func-name: 2.0.2 + pathval: 1.1.1 + type-detect: 4.1.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + dev: true + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false + + /crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + dev: false + + /debug@4.3.3(supports-color@8.1.1): + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 + dev: true + + /decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + dev: true + + /deep-eql@3.0.1: + resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} + engines: {node: '>=0.12'} + dependencies: + type-detect: 4.1.0 + dev: true + + /delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + /diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + dev: true + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + dev: true + + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.7.0 + dev: false + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + /es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + dependencies: + es6-promise: 4.2.8 + + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: false + + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + /eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + /fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + /fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + dev: true + + /file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.3 + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: true + + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isomorphic-ws@4.0.1(ws@7.5.10): + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + dependencies: + ws: 7.5.10 + + /jayson@4.1.2: + resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + requiresBuild: true + dependencies: + minimist: 1.2.8 + dev: true + optional: true + + /jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.7.0 + dev: false + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /minimatch@3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.7.0 + dev: false + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + + /node-gyp-build@4.8.2: + resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} + hasBin: true + requiresBuild: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + dev: false + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /prettier@2.6.2: + resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /rpc-websockets@9.0.2: + resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==} + dependencies: + '@swc/helpers': 0.5.13 + '@types/uuid': 8.3.4 + '@types/ws': 8.5.12 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + /serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + dependencies: + randombytes: 2.1.0 + dev: true + + /snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.7.0 + dev: false + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + requiresBuild: true + dev: true + optional: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + dev: false + + /superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + dev: false + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + /ts-mocha@10.0.0(mocha@9.2.2): + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + dev: true + + /ts-node@10.9.2(@types/node@22.5.4)(typescript@4.3.5): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.5.4 + acorn: 8.12.1 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.3.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + dev: true + + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + requiresBuild: true + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + optional: true + + /tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + /type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + dev: true + + /typescript@4.3.5: + resolution: {integrity: sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + /utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.2 + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + dev: true + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + dev: true + + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + + /yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/extensions/puppet/programs/puppet/src/errors.rs b/extensions/puppet/programs/puppet/src/errors.rs index 69c809f..54603ec 100644 --- a/extensions/puppet/programs/puppet/src/errors.rs +++ b/extensions/puppet/programs/puppet/src/errors.rs @@ -14,11 +14,11 @@ pub enum ErrorCode { #[msg("The given metaplex collection has already bound.")] MplCollectionAlreadyBound, - #[msg("The payer does not own the specified nft.")] - PayerDoesNotOwnNFT, + #[msg("The given owner does not own the specified nft.")] + NotNFTOwner, - #[msg("The payer does not own the specified device.")] - PayerDoesNotOwnDevice, + #[msg("The given owner does not own the specified device.")] + NotDeviceOwner, #[msg("The given device has already bound a nft.")] DeviceAlreadyBound, diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs index 9301b98..b8e0b59 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -12,11 +12,11 @@ use anchor_spl::token::TokenAccount; pub struct Bind<'info> { #[account( constraint = mpl_associated_token.key() == params.mpl_ata, - constraint = mpl_associated_token.owner == payer.key() @ ErrorCode::PayerDoesNotOwnNFT + constraint = mpl_associated_token.owner == owner.key() @ ErrorCode::NotNFTOwner )] pub mpl_associated_token: Account<'info, TokenAccount>, #[account( - constraint = device_associated_token.owner == payer.key() @ ErrorCode::PayerDoesNotOwnDevice + constraint = device_associated_token.owner == owner.key() @ ErrorCode::NotDeviceOwner )] pub device_associated_token: Account<'info, TokenAccount>, #[account( @@ -38,6 +38,8 @@ pub struct Bind<'info> { pub device_collection_binding: Account<'info, DeviceCollectionBinding>, pub mpl_collection_binding: Account<'info, MplCollectionBinding>, #[account(mut)] + pub owner: Signer<'info>, + #[account(mut)] pub payer: Signer<'info>, pub rent: Sysvar<'info, Rent>, pub system_program: Program<'info, System>, diff --git a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs index a0d8ac3..b457061 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs @@ -12,7 +12,7 @@ pub struct BindCollection<'info> { /// CHECK: #[account( constraint = product_mint.key() == params.device_collection, - seeds = [PRODUCT_MINT_SEED_PREFIX, payer.key().as_ref(), params.product_metadata_name.as_ref()], + seeds = [PRODUCT_MINT_SEED_PREFIX, vendor.key().as_ref(), params.product_metadata_name.as_ref()], bump, seeds::program = dephy_id_program.key() )] @@ -41,6 +41,8 @@ pub struct BindCollection<'info> { #[account(address = DEPHY_ID_PROGRAM)] pub dephy_id_program: AccountInfo<'info>, #[account(mut)] + pub vendor: Signer<'info>, + #[account(mut)] pub payer: Signer<'info>, pub rent: Sysvar<'info, Rent>, pub system_program: Program<'info, System> From e7fa7d31748e839a83b38dac96ab1564c1fd5bc2 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Fri, 13 Sep 2024 19:25:24 +0800 Subject: [PATCH 13/29] feat: change mpl collection, add collection code --- extensions/puppet/Cargo.lock | 1 + extensions/puppet/client/index.ts | 179 +- extensions/puppet/package.json | 1 + extensions/puppet/pnpm-lock.yaml | 1766 ++++++++++++++++- extensions/puppet/programs/puppet/Cargo.toml | 1 + .../puppet/programs/puppet/src/errors.rs | 2 + .../programs/puppet/src/instructions/bind.rs | 20 +- .../src/instructions/bind_collection.rs | 8 +- pnpm-lock.yaml | 914 ++++----- 9 files changed, 2342 insertions(+), 550 deletions(-) diff --git a/extensions/puppet/Cargo.lock b/extensions/puppet/Cargo.lock index 98a5ab8..5f750c0 100644 --- a/extensions/puppet/Cargo.lock +++ b/extensions/puppet/Cargo.lock @@ -1517,6 +1517,7 @@ version = "0.1.0" dependencies = [ "anchor-lang", "anchor-spl", + "mpl-token-metadata", ] [[package]] diff --git a/extensions/puppet/client/index.ts b/extensions/puppet/client/index.ts index 27ccde7..53c2ac3 100644 --- a/extensions/puppet/client/index.ts +++ b/extensions/puppet/client/index.ts @@ -1,71 +1,214 @@ import yargs from "yargs"; import { hideBin } from "yargs/helpers"; +// import { CreateProductInput } from "../../../clients/js/src"; +import { Keypair, PublicKey } from "@solana/web3.js"; +import { Puppet } from "../target/types/puppet"; +import { Program } from "@coral-xyz/anchor"; +import { + Metaplex, + irysStorage, + keypairIdentity, +} from "@metaplex-foundation/js"; +import { Connection, clusterApiUrl } from "@solana/web3.js"; +import { + getAssociatedTokenAddress, + createMint, + TOKEN_PROGRAM_ID, + ASSOCIATED_TOKEN_PROGRAM_ID, +} from "@solana/spl-token"; + +const DEV_RPC = "https://api.apr.dev"; yargs(hideBin(process.argv)) .command( "create-product", "Create product", { - rpc: { type: "string", demandOption: true }, privatekey: { type: "string", demandOption: true }, }, async (args) => { - + } ) .command( "create-device", "Create device", { - rpc: { type: "string", demandOption: true }, privatekey: { type: "string", demandOption: true }, }, - async (args) => { - - }, + async (args) => {} ) .command( - "create-mpl-mint", - "Create metaplex mint", + "create-mpl-collection", + "Create metaplex collection", { - rpc: { type: "string", demandOption: true }, + url: { type: "string", demandOption: true }, + name: { type: "string", demandOption: true }, privatekey: { type: "string", demandOption: true }, }, async (args) => { + const payer = Keypair.fromSecretKey(new Uint8Array(JSON.parse(args.privatekey))); - }, + const connection = new Connection(clusterApiUrl("devnet")); + const metaplex = Metaplex.make(connection) + .use(keypairIdentity(payer)) + .use( + irysStorage({ + address: "https://devnet.bundlr.network", + providerUrl: "https://api.devnet.solana.com", + timeout: 60000, + }) + ); + + const { nft: collectionNft } = await metaplex.nfts().create({ + uri: args.url, + name: args.name, + sellerFeeBasisPoints: 500, // Represents 5.00%. + isCollection: true + }); + + console.log("mplCollection:", collectionNft.address.toBase58()); + } ) .command( "create-mpl-nft", "Create metaplex nft", { - rpc: { type: "string", demandOption: true }, + collection: { type: "string", demandOption: true }, + url: { type: "string", demandOption: true }, + name: { type: "string", demandOption: true }, privatekey: { type: "string", demandOption: true }, }, async (args) => { + const payer = Keypair.fromSecretKey(new Uint8Array(JSON.parse(args.privatekey))); - }, + const connection = new Connection(clusterApiUrl("devnet")); + const metaplex = Metaplex.make(connection) + .use(keypairIdentity(payer)) + .use( + irysStorage({ + address: "https://devnet.bundlr.network", + providerUrl: "https://api.devnet.solana.com", + timeout: 60000, + }) + ); + + // Create an NFT under the specified collection. + const { nft } = await metaplex.nfts().create({ + uri: args.url, + name: args.name, + sellerFeeBasisPoints: 500, // Represents 5.00%. + collection: new PublicKey(args.collection), + }); + + console.log("mpl_mint:", nft.address.toBase58()); + + const mplAta = await getAssociatedTokenAddress( + nft.address, // The mint address of the created NFT + payer.publicKey, // The wallet address of the NFT owner + false, + TOKEN_PROGRAM_ID, + ASSOCIATED_TOKEN_PROGRAM_ID + ); + + console.log("mpl_associated_token:", mplAta.toString()); + } ) .command( "bind-collection", "Bind product to metaplex mint", { - rpc: { type: "string", demandOption: true }, - privatekey: { type: "string", demandOption: true }, + productMetadataName: { type: "string", demandOption: true }, + deviceCollection: { type: "string", demandOption: true }, + mplCollection: { type: "string", demandOption: true }, }, async (args) => { + const provider = anchor.AnchorProvider.local(DEV_RPC, { + commitment: "confirmed", + preflightCommitment: "processed", + }); - }, + anchor.setProvider(provider); + + const wallet = anchor.Wallet.local(); + const payer = wallet.payer; + const vendor = wallet.publicKey; + + const program = anchor.workspace.Puppet as Program; + + const tx = await program.methods + .bindCollection({ + productMetadataName: args.productMetadataName, + deviceCollection: new PublicKey(args.deviceCollection), + mplCollection: new PublicKey(args.mplCollection), + }) + .accounts({ + mplCollection: new PublicKey(args.mplCollection), + vendor, + payer: payer.publicKey, + }) + .signers([payer]) + .rpc(); + + console.log("tx:", tx); + } ) .command( "bind", "Bind device to metaplex nft", { - rpc: { type: "string", demandOption: true }, - privatekey: { type: "string", demandOption: true }, + device: { type: "string", demandOption: true }, // device address + mplAta: { type: "string", demandOption: true }, // Metaplex associated token address }, async (args) => { + const provider = anchor.AnchorProvider.local(DEV_RPC, { + commitment: "confirmed", + preflightCommitment: "processed", + }); - }, + anchor.setProvider(provider); + + const wallet = anchor.Wallet.local(); + const payer = wallet.payer; + const owner = wallet.publicKey; + + const program = anchor.workspace.Puppet as Program; + + const mplAssociatedToken = new PublicKey(args.mplAta); + + // Calculate the device mint PDA + const deviceCollectionBindingPda = PublicKey.findProgramAddressSync( + [Buffer.from("device_binding"), new PublicKey(args.device).toBuffer()], + program.programId + ); + + // Calculate the Metaplex collection binding PDA + const mplCollectionBindingPda = PublicKey.findProgramAddressSync( + [Buffer.from("mpl_binding"), mplAssociatedToken.toBuffer()], + program.programId + ); + + await program.methods + .bind({ + device: new PublicKey(args.device), + mplAta: new PublicKey(args.mplAta), + }) + .accounts({ + mplAssociatedToken: mplAssociatedToken, // The ATA for the Metaplex NFT + deviceAssociatedToken: await anchor.web3.PublicKey.findProgramAddress( + [ + Buffer.from("associated_token"), + new PublicKey(args.device).toBuffer(), + ], + anchor.web3.TOKEN_PROGRAM_ID + ), + deviceCollectionBinding: deviceCollectionBindingPda[0], // Device collection binding PDA + mplCollectionBinding: mplCollectionBindingPda[0], // Metaplex collection binding PDA + owner: owner, // Owner of the device and NFT + payer: payer.publicKey, // Payer of the transaction + }) + .signers([payer]) + .rpc(); + } ) .help().argv; diff --git a/extensions/puppet/package.json b/extensions/puppet/package.json index ac4afe0..d5cb732 100644 --- a/extensions/puppet/package.json +++ b/extensions/puppet/package.json @@ -10,6 +10,7 @@ "@coral-xyz/anchor": "^0.30.1" }, "devDependencies": { + "@metaplex-foundation/js": "^0.20.1", "@solana/spl-token": "^0.4.8", "@solana/web3.js": "^1.95.3", "@types/bn.js": "^5.1.0", diff --git a/extensions/puppet/pnpm-lock.yaml b/extensions/puppet/pnpm-lock.yaml index 278c438..61f100b 100644 --- a/extensions/puppet/pnpm-lock.yaml +++ b/extensions/puppet/pnpm-lock.yaml @@ -10,6 +10,9 @@ dependencies: version: 0.30.1 devDependencies: + '@metaplex-foundation/js': + specifier: ^0.20.1 + version: 0.20.1(arweave@1.15.1)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) '@solana/spl-token': specifier: ^0.4.8 version: 0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) @@ -106,6 +109,378 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true + /@ethereumjs/rlp@4.0.1: + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /@ethereumjs/util@8.1.0: + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.2.1 + micro-ftch: 0.3.1 + dev: true + + /@ethersproject/abi@5.7.0: + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@ethersproject/abstract-provider@5.7.0: + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + dev: true + + /@ethersproject/abstract-signer@5.7.0: + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + dev: true + + /@ethersproject/address@5.7.0: + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + dev: true + + /@ethersproject/base64@5.7.0: + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + dev: true + + /@ethersproject/basex@5.7.0: + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + dev: true + + /@ethersproject/bignumber@5.7.0: + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + dev: true + + /@ethersproject/bytes@5.7.0: + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/constants@5.7.0: + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + dev: true + + /@ethersproject/contracts@5.7.0: + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + dev: true + + /@ethersproject/hash@5.7.0: + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@ethersproject/hdnode@5.7.0: + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + dev: true + + /@ethersproject/json-wallets@5.7.0: + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + dev: true + + /@ethersproject/keccak256@5.7.0: + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + dev: true + + /@ethersproject/logger@5.7.0: + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + dev: true + + /@ethersproject/networks@5.7.1: + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/pbkdf2@5.7.0: + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + dev: true + + /@ethersproject/properties@5.7.0: + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/providers@5.7.2: + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@ethersproject/random@5.7.0: + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/rlp@5.7.0: + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/sha2@5.7.0: + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + dev: true + + /@ethersproject/signing-key@5.7.0: + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + dev: true + + /@ethersproject/strings@5.7.0: + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/transactions@5.7.0: + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + dev: true + + /@ethersproject/wallet@5.7.0: + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + dev: true + + /@ethersproject/web@5.7.1: + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@ethersproject/wordlists@5.7.0: + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@irys/arweave@0.0.2(debug@4.3.7): + resolution: {integrity: sha512-ddE5h4qXbl0xfGlxrtBIwzflaxZUDlDs43TuT0u1OMfyobHul4AA1VEX72Rpzw2bOh4vzoytSqA1jCM7x9YtHg==} + dependencies: + asn1.js: 5.4.1 + async-retry: 1.3.3 + axios: 1.7.7(debug@4.3.7) + base64-js: 1.5.1 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - debug + dev: true + + /@irys/query@0.0.1(debug@4.3.7): + resolution: {integrity: sha512-7TCyR+Qn+F54IQQx5PlERgqNwgIQik8hY55iZl/silTHhCo1MI2pvx5BozqPUVCc8/KqRsc2nZd8Bc29XGUjRQ==} + engines: {node: '>=16.10.0'} + dependencies: + async-retry: 1.3.3 + axios: 1.7.7(debug@4.3.7) + transitivePeerDependencies: + - debug + dev: true + + /@irys/sdk@0.0.2(arweave@1.15.1)(debug@4.3.7): + resolution: {integrity: sha512-un/e/CmTpgT042gDwCN3AtISrR9OYGMY6V+442pFmSWKrwrsDoIXZ8VlLiYKnrtTm+yquGhjfYy0LDqGWq41pA==} + engines: {node: '>=16.10.0'} + deprecated: 'Arweave support is deprecated - We recommend migrating to the Irys datachain: https://migrate-to.irys.xyz/' + hasBin: true + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/providers': 5.7.2 + '@ethersproject/wallet': 5.7.0 + '@irys/query': 0.0.1(debug@4.3.7) + '@near-js/crypto': 0.0.3 + '@near-js/keystores-browser': 0.0.3 + '@near-js/providers': 0.0.4 + '@near-js/transactions': 0.1.1 + '@solana/web3.js': 1.95.3 + '@supercharge/promise-pool': 3.2.0 + algosdk: 1.24.1 + aptos: 1.8.5(debug@4.3.7) + arbundles: 0.10.1(arweave@1.15.1)(debug@4.3.7) + async-retry: 1.3.3 + axios: 1.7.7(debug@4.3.7) + base64url: 3.0.1 + bignumber.js: 9.1.2 + bs58: 5.0.0 + commander: 8.3.0 + csv: 5.5.3 + inquirer: 8.2.6 + js-sha256: 0.9.0 + mime-types: 2.1.35 + near-seed-phrase: 0.2.1 + transitivePeerDependencies: + - arweave + - bufferutil + - debug + - encoding + - utf-8-validate + dev: true + /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -122,15 +497,417 @@ packages: '@jridgewell/sourcemap-codec': 1.5.0 dev: true - /@noble/curves@1.6.0: - resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} - engines: {node: ^14.21.3 || >=16} + /@metaplex-foundation/beet-solana@0.3.1: + resolution: {integrity: sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==} + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@solana/web3.js': 1.95.3 + bs58: 5.0.0 + debug: 4.3.7 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@metaplex-foundation/beet-solana@0.4.0: + resolution: {integrity: sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==} + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@solana/web3.js': 1.95.3 + bs58: 5.0.0 + debug: 4.3.7 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@metaplex-foundation/beet-solana@0.4.1: + resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==} + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@solana/web3.js': 1.95.3 + bs58: 5.0.0 + debug: 4.3.7 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@metaplex-foundation/beet@0.4.0: + resolution: {integrity: sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==} + dependencies: + ansicolors: 0.3.2 + bn.js: 5.2.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@metaplex-foundation/beet@0.6.1: + resolution: {integrity: sha512-OYgnijLFzw0cdUlRKH5POp0unQECPOW9muJ2X3QIVyak5G6I6l/rKo72sICgPLIFKdmsi2jmnkuLY7wp14iXdw==} + dependencies: + ansicolors: 0.3.2 + bn.js: 5.2.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@metaplex-foundation/beet@0.7.1: + resolution: {integrity: sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==} + dependencies: + ansicolors: 0.3.2 + bn.js: 5.2.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@metaplex-foundation/cusper@0.0.2: + resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} + dev: true + + /@metaplex-foundation/js@0.20.1(arweave@1.15.1)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-aqiLoEiToXdfI5pS+17/GN/dIO2D31gLoVQvEKDQi9XcnOPVhfJerXDmwgKbhp79OGoYxtlvVw+b2suacoUzGQ==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dependencies: + '@irys/sdk': 0.0.2(arweave@1.15.1)(debug@4.3.7) + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/mpl-auction-house': 2.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@metaplex-foundation/mpl-bubblegum': 0.6.2(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@metaplex-foundation/mpl-candy-guard': 0.3.2 + '@metaplex-foundation/mpl-candy-machine': 5.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@metaplex-foundation/mpl-candy-machine-core': 0.1.2 + '@metaplex-foundation/mpl-token-metadata': 2.13.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@noble/ed25519': 1.7.3 + '@noble/hashes': 1.5.0 + '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.95.3) + '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/web3.js': 1.95.3 + bignumber.js: 9.1.2 + bn.js: 5.2.1 + bs58: 5.0.0 + buffer: 6.0.3 + debug: 4.3.7 + eventemitter3: 4.0.7 + lodash.clonedeep: 4.5.0 + lodash.isequal: 4.5.0 + merkletreejs: 0.3.11 + mime: 3.0.0 + node-fetch: 2.7.0 + transitivePeerDependencies: + - arweave + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - typescript + - utf-8-validate + dev: true + + /@metaplex-foundation/mpl-auction-house@2.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-O+IAdYVaoOvgACB8pm+1lF5BNEjl0COkqny2Ho8KQZwka6aC/vHbZ239yRwAMtJhf5992BPFdT4oifjyE0O+Mw==} + dependencies: + '@metaplex-foundation/beet': 0.6.1 + '@metaplex-foundation/beet-solana': 0.3.1 + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/web3.js': 1.95.3 + bn.js: 5.2.1 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - typescript + - utf-8-validate + dev: true + + /@metaplex-foundation/mpl-bubblegum@0.6.2(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==} + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.0 + '@metaplex-foundation/cusper': 0.0.2 + '@metaplex-foundation/mpl-token-metadata': 2.13.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.95.3) + '@solana/spl-token': 0.1.8 + '@solana/web3.js': 1.95.3 + bn.js: 5.2.1 + js-sha3: 0.8.0 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - typescript + - utf-8-validate + dev: true + + /@metaplex-foundation/mpl-candy-guard@0.3.2: + resolution: {integrity: sha512-QWXzPDz+6OR3957LtfW6/rcGvFWS/0AeHJa/BUO2VEVQxN769dupsKGtrsS8o5RzXCeap3wrCtDSNxN3dnWu4Q==} + dependencies: + '@metaplex-foundation/beet': 0.4.0 + '@metaplex-foundation/beet-solana': 0.3.1 + '@metaplex-foundation/cusper': 0.0.2 + '@solana/web3.js': 1.95.3 + bn.js: 5.2.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@metaplex-foundation/mpl-candy-machine-core@0.1.2: + resolution: {integrity: sha512-jjDkRvMR+iykt7guQ7qVnOHTZedql0lq3xqWDMaenAUCH3Xrf2zKATThhJppIVNX1/YtgBOO3lGqhaFbaI4pCw==} + dependencies: + '@metaplex-foundation/beet': 0.4.0 + '@metaplex-foundation/beet-solana': 0.3.1 + '@metaplex-foundation/cusper': 0.0.2 + '@solana/web3.js': 1.95.3 + bn.js: 5.2.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@metaplex-foundation/mpl-candy-machine@5.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-pjHpUpWVOCDxK3l6dXxfmJKNQmbjBqnm5ElOl1mJAygnzO8NIPQvrP89y6xSNyo8qZsJyt4ZMYUyD0TdbtKZXQ==} + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.1 + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/web3.js': 1.95.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - typescript + - utf-8-validate + dev: true + + /@metaplex-foundation/mpl-token-metadata@2.13.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==} + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.1 + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/web3.js': 1.95.3 + bn.js: 5.2.1 + debug: 4.3.7 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - typescript + - utf-8-validate + dev: true + + /@near-js/crypto@0.0.3: + resolution: {integrity: sha512-3WC2A1a1cH8Cqrx+0iDjp1ASEEhxN/KHEMENYb0KZH6Hp5bXIY7Akt4quC7JlgJS5ESvEiLa40tS5h0zAhBWGw==} + dependencies: + '@near-js/types': 0.0.3 + bn.js: 5.2.1 + borsh: 0.7.0 + tweetnacl: 1.0.3 + dev: true + + /@near-js/crypto@0.0.4: + resolution: {integrity: sha512-2mSIVv6mZway1rQvmkktrXAFoUvy7POjrHNH3LekKZCMCs7qMM/23Hz2+APgxZPqoV2kjarSNOEYJjxO7zQ/rQ==} + dependencies: + '@near-js/types': 0.0.4 + bn.js: 5.2.1 + borsh: 0.7.0 + tweetnacl: 1.0.3 + dev: true + + /@near-js/keystores-browser@0.0.3: + resolution: {integrity: sha512-Ve/JQ1SBxdNk3B49lElJ8Y54AoBY+yOStLvdnUIpe2FBOczzwDCkcnPcMDV0NMwVlHpEnOWICWHbRbAkI5Vs+A==} + dependencies: + '@near-js/crypto': 0.0.3 + '@near-js/keystores': 0.0.3 + dev: true + + /@near-js/keystores@0.0.3: + resolution: {integrity: sha512-mnwLYUt4Td8u1I4QE1FBx2d9hMt3ofiriE93FfOluJ4XiqRqVFakFYiHg6pExg5iEkej/sXugBUFeQ4QizUnew==} + dependencies: + '@near-js/crypto': 0.0.3 + '@near-js/types': 0.0.3 + dev: true + + /@near-js/keystores@0.0.4: + resolution: {integrity: sha512-+vKafmDpQGrz5py1liot2hYSjPGXwihveeN+BL11aJlLqZnWBgYJUWCXG+uyGjGXZORuy2hzkKK6Hi+lbKOfVA==} + dependencies: + '@near-js/crypto': 0.0.4 + '@near-js/types': 0.0.4 + dev: true + + /@near-js/providers@0.0.4: + resolution: {integrity: sha512-g/2pJTYmsIlTW4mGqeRlqDN9pZeN+1E2/wfoMIf3p++boBVxVlaSebtQgawXAf2lkfhb9RqXz5pHqewXIkTBSw==} + dependencies: + '@near-js/transactions': 0.1.0 + '@near-js/types': 0.0.3 + '@near-js/utils': 0.0.3 + bn.js: 5.2.1 + borsh: 0.7.0 + http-errors: 1.8.1 + optionalDependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + + /@near-js/signers@0.0.3: + resolution: {integrity: sha512-u1R+DDIua5PY1PDFnpVYqdMgQ7c4dyeZsfqMjE7CtgzdqupgTYCXzJjBubqMlAyAx843PoXmLt6CSSKcMm0WUA==} + dependencies: + '@near-js/crypto': 0.0.3 + '@near-js/keystores': 0.0.3 + js-sha256: 0.9.0 + dev: true + + /@near-js/signers@0.0.4: + resolution: {integrity: sha512-xCglo3U/WIGsz/izPGFMegS5Q3PxOHYB8a1E7RtVhNm5QdqTlQldLCm/BuMg2G/u1l1ZZ0wdvkqRTG9joauf3Q==} + dependencies: + '@near-js/crypto': 0.0.4 + '@near-js/keystores': 0.0.4 + js-sha256: 0.9.0 + dev: true + + /@near-js/transactions@0.1.0: + resolution: {integrity: sha512-OrrDFqhX0rtH+6MV3U3iS+zmzcPQI+L4GJi9na4Uf8FgpaVPF0mtSmVrpUrS5CC3LwWCzcYF833xGYbXOV4Kfg==} + dependencies: + '@near-js/crypto': 0.0.3 + '@near-js/signers': 0.0.3 + '@near-js/types': 0.0.3 + '@near-js/utils': 0.0.3 + bn.js: 5.2.1 + borsh: 0.7.0 + js-sha256: 0.9.0 + dev: true + + /@near-js/transactions@0.1.1: + resolution: {integrity: sha512-Fk83oLLFK7nz4thawpdv9bGyMVQ2i48iUtZEVYhuuuqevl17tSXMlhle9Me1ZbNyguJG/cWPdNybe1UMKpyGxA==} + dependencies: + '@near-js/crypto': 0.0.4 + '@near-js/signers': 0.0.4 + '@near-js/types': 0.0.4 + '@near-js/utils': 0.0.4 + bn.js: 5.2.1 + borsh: 0.7.0 + js-sha256: 0.9.0 + dev: true + + /@near-js/types@0.0.3: + resolution: {integrity: sha512-gC3iGUT+r2JjVsE31YharT+voat79ToMUMLCGozHjp/R/UW1M2z4hdpqTUoeWUBGBJuVc810gNTneHGx0jvzwQ==} + dependencies: + bn.js: 5.2.1 + dev: true + + /@near-js/types@0.0.4: + resolution: {integrity: sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==} + dependencies: + bn.js: 5.2.1 + dev: true + + /@near-js/utils@0.0.3: + resolution: {integrity: sha512-J72n/EL0VfLRRb4xNUF4rmVrdzMkcmkwJOhBZSTWz3PAZ8LqNeU9ZConPfMvEr6lwdaD33ZuVv70DN6IIjPr1A==} + dependencies: + '@near-js/types': 0.0.3 + bn.js: 5.2.1 + depd: 2.0.0 + mustache: 4.2.0 + dev: true + + /@near-js/utils@0.0.4: + resolution: {integrity: sha512-mPUEPJbTCMicGitjEGvQqOe8AS7O4KkRCxqd0xuE/X6gXF1jz1pYMZn4lNUeUz2C84YnVSGLAM0o9zcN6Y4hiA==} + dependencies: + '@near-js/types': 0.0.4 + bn.js: 5.2.1 + depd: 2.0.0 + mustache: 4.2.0 + dev: true + + /@noble/curves@1.4.2: + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + dependencies: + '@noble/hashes': 1.4.0 + dev: true + + /@noble/curves@1.6.0: + resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} + engines: {node: ^14.21.3 || >=16} + dependencies: + '@noble/hashes': 1.5.0 + + /@noble/ed25519@1.7.3: + resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} + dev: true + + /@noble/hashes@1.1.3: + resolution: {integrity: sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==} + dev: true + + /@noble/hashes@1.4.0: + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + dev: true + + /@noble/hashes@1.5.0: + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + + /@randlabs/communication-bridge@1.0.1: + resolution: {integrity: sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==} + requiresBuild: true + dev: true + optional: true + + /@randlabs/myalgo-connect@1.4.2: + resolution: {integrity: sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==} + requiresBuild: true + dependencies: + '@randlabs/communication-bridge': 1.0.1 + dev: true + optional: true + + /@scure/base@1.1.8: + resolution: {integrity: sha512-6CyAclxj3Nb0XT7GHK6K4zK6k2xJm6E4Ft0Ohjt4WgegiFUHEtFb2CGzmPmGBwoIhrLsqNLYfLr04Y1GePrzZg==} + dev: true + + /@scure/bip32@1.4.0: + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.8 + dev: true + + /@scure/bip39@1.1.0: + resolution: {integrity: sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==} + dependencies: + '@noble/hashes': 1.1.3 + '@scure/base': 1.1.8 + dev: true + + /@scure/bip39@1.3.0: + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} dependencies: - '@noble/hashes': 1.5.0 - - /@noble/hashes@1.5.0: - resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} - engines: {node: ^14.21.3 || >=16} + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.8 + dev: true /@solana/buffer-layout-utils@0.2.0: resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} @@ -320,6 +1097,26 @@ packages: - fastestsmallesttextencoderdecoder dev: true + /@solana/spl-account-compression@0.1.10(@solana/web3.js@1.95.3): + resolution: {integrity: sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.50.1 + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.1 + '@solana/web3.js': 1.95.3 + bn.js: 5.2.1 + borsh: 0.7.0 + js-sha3: 0.8.0 + typescript-collections: 1.3.3 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} engines: {node: '>=16'} @@ -348,6 +1145,41 @@ packages: - typescript dev: true + /@solana/spl-token@0.1.8: + resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==} + engines: {node: '>= 10'} + dependencies: + '@babel/runtime': 7.25.6 + '@solana/web3.js': 1.95.3 + bn.js: 5.2.1 + buffer: 6.0.3 + buffer-layout: 1.2.2 + dotenv: 10.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + + /@solana/spl-token@0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0 + '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@solana/web3.js': 1.95.3 + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + dev: true + /@solana/spl-token@0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} engines: {node: '>=16'} @@ -398,6 +1230,11 @@ packages: - encoding - utf-8-validate + /@supercharge/promise-pool@3.2.0: + resolution: {integrity: sha512-pj0cAALblTZBPtMltWOlZTQSLT07jIaFNeM8TWoJD1cQMgDB9mcMlVMoetiB35OzNJpqQ2b+QEtwiR9f20mADg==} + engines: {node: '>=8'} + dev: true + /@swc/helpers@0.5.13: resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} dependencies: @@ -444,6 +1281,10 @@ packages: resolution: {integrity: sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==} dev: true + /@types/node@11.11.6: + resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==} + dev: true + /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} @@ -499,17 +1340,51 @@ packages: hasBin: true dev: true + /aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + dev: true + /agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} dependencies: humanize-ms: 1.2.1 + /algo-msgpack-with-bigint@2.1.1: + resolution: {integrity: sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==} + engines: {node: '>= 10'} + dev: true + + /algosdk@1.24.1: + resolution: {integrity: sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==} + engines: {node: '>=14.0.0'} + dependencies: + algo-msgpack-with-bigint: 2.1.1 + buffer: 6.0.3 + cross-fetch: 3.1.8 + hi-base32: 0.5.1 + js-sha256: 0.9.0 + js-sha3: 0.8.0 + js-sha512: 0.8.0 + json-bigint: 1.0.0 + tweetnacl: 1.0.3 + vlq: 2.0.4 + transitivePeerDependencies: + - encoding + dev: true + /ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} dev: true + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -522,6 +1397,10 @@ packages: color-convert: 2.0.1 dev: true + /ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + dev: true + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -530,6 +1409,55 @@ packages: picomatch: 2.3.1 dev: true + /aptos@1.8.5(debug@4.3.7): + resolution: {integrity: sha512-iQxliWesNHjGQ5YYXCyss9eg4+bDGQWqAZa73vprqGQ9tungK0cRjUI2fmnp63Ed6UG6rurHrL+b0ckbZAOZZQ==} + engines: {node: '>=11.0.0'} + dependencies: + '@noble/hashes': 1.1.3 + '@scure/bip39': 1.1.0 + axios: 0.27.2(debug@4.3.7) + form-data: 4.0.0 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - debug + dev: true + + /arbundles@0.10.1(arweave@1.15.1)(debug@4.3.7): + resolution: {integrity: sha512-QYFepxessLCirvRkQK9iQmjxjHz+s50lMNGRwZwpyPWLohuf6ISyj1gkFXJHlMT+rNSrsHxb532glHnKbjwu3A==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/providers': 5.7.2 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@irys/arweave': 0.0.2(debug@4.3.7) + '@noble/ed25519': 1.7.3 + base64url: 3.0.1 + bs58: 4.0.1 + keccak: 3.0.4 + secp256k1: 5.0.0 + optionalDependencies: + '@randlabs/myalgo-connect': 1.4.2 + algosdk: 1.24.1 + arweave-stream-tx: 1.2.2(arweave@1.15.1) + multistream: 4.1.0 + tmp-promise: 3.0.3 + transitivePeerDependencies: + - arweave + - bufferutil + - debug + - encoding + - utf-8-validate + dev: true + + /arconnect@0.4.2: + resolution: {integrity: sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw==} + dependencies: + arweave: 1.15.1 + dev: true + optional: true + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true @@ -543,10 +1471,70 @@ packages: engines: {node: '>=0.10.0'} dev: true + /arweave-stream-tx@1.2.2(arweave@1.15.1): + resolution: {integrity: sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ==} + requiresBuild: true + peerDependencies: + arweave: ^1.10.0 + dependencies: + arweave: 1.15.1 + exponential-backoff: 3.1.1 + dev: true + optional: true + + /arweave@1.15.1: + resolution: {integrity: sha512-rT7FOwqdudd5npqp4xOYdDT2035LtpcqePjwirh4wjRiEtVsz1FZkRiM2Yj+fOAwYzOm/hNG0GDOipDSaiEGGQ==} + engines: {node: '>=18'} + dependencies: + arconnect: 0.4.2 + asn1.js: 5.4.1 + base64-js: 1.5.1 + bignumber.js: 9.1.2 + dev: true + optional: true + + /asn1.js@5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: true + /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true + /async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + dependencies: + retry: 0.13.1 + dev: true + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + + /axios@0.27.2(debug@4.3.7): + resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + dependencies: + follow-redirects: 1.15.9(debug@4.3.7) + form-data: 4.0.0 + transitivePeerDependencies: + - debug + dev: true + + /axios@1.7.7(debug@4.3.7): + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + dependencies: + follow-redirects: 1.15.9(debug@4.3.7) + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -556,9 +1544,22 @@ packages: dependencies: safe-buffer: 5.2.1 + /base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + dev: true + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + /base64url@3.0.1: + resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} + engines: {node: '>=6.0.0'} + dev: true + + /bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + dev: true + /bigint-buffer@1.1.5: resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} engines: {node: '>= 10.0.0'} @@ -580,6 +1581,38 @@ packages: dependencies: file-uri-to-path: 1.0.0 + /bip39-light@1.0.7: + resolution: {integrity: sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==} + dependencies: + create-hash: 1.2.0 + pbkdf2: 3.1.2 + dev: true + + /bip39@3.0.2: + resolution: {integrity: sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==} + dependencies: + '@types/node': 11.11.6 + create-hash: 1.2.0 + pbkdf2: 3.1.2 + randombytes: 2.1.0 + dev: true + + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /bn.js@4.11.6: + resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} + dev: true + + /bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + dev: true + /bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} @@ -604,6 +1637,10 @@ packages: fill-range: 7.1.1 dev: true + /brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: true + /browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true @@ -613,6 +1650,12 @@ packages: dependencies: base-x: 3.0.10 + /bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + dependencies: + base-x: 4.0.0 + dev: true + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true @@ -620,7 +1663,17 @@ packages: /buffer-layout@1.2.2: resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} engines: {node: '>=4.5'} - dev: false + + /buffer-reverse@1.0.1: + resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} + dev: true + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true /buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -664,6 +1717,10 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -685,6 +1742,30 @@ packages: fsevents: 2.3.3 dev: true + /cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: true + + /cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: true + /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: @@ -702,6 +1783,11 @@ packages: wrap-ansi: 7.0.0 dev: true + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -713,6 +1799,13 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true + /commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -721,10 +1814,36 @@ packages: /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: true + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: true + + /create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true @@ -735,13 +1854,38 @@ packages: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: false /crypto-hash@1.3.0: resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} engines: {node: '>=8'} dev: false + /crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + dev: true + + /csv-generate@3.4.3: + resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} + dev: true + + /csv-parse@4.16.3: + resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} + dev: true + + /csv-stringify@5.6.5: + resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} + dev: true + + /csv@5.5.3: + resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} + engines: {node: '>= 0.1.90'} + dependencies: + csv-generate: 3.4.3 + csv-parse: 4.16.3 + csv-stringify: 5.6.5 + stream-transform: 2.1.3 + dev: true + /debug@4.3.3(supports-color@8.1.1): resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} @@ -755,6 +1899,18 @@ packages: supports-color: 8.1.1 dev: true + /debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + /decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -767,10 +1923,31 @@ packages: type-detect: 4.1.0 dev: true + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: true + /delay@5.0.0: resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} engines: {node: '>=10'} + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + + /depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: true + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: true + /diff@3.5.0: resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} engines: {node: '>=0.3.1'} @@ -793,6 +1970,35 @@ packages: tslib: 2.7.0 dev: false + /dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + dev: true + + /elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + + /elliptic@6.5.7: + resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true @@ -810,18 +2016,60 @@ packages: engines: {node: '>=6'} dev: true + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true + /ethereum-bloom-filters@1.2.0: + resolution: {integrity: sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==} + dependencies: + '@noble/hashes': 1.5.0 + dev: true + + /ethereum-cryptography@2.2.1: + resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + dev: true + + /ethjs-unit@0.1.6: + resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + bn.js: 4.11.6 + number-to-bn: 1.7.0 + dev: true + /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false /eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + /exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + requiresBuild: true + dev: true + optional: true + + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + /eyes@0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} engines: {node: '> 0.1.90'} @@ -833,6 +2081,13 @@ packages: resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} dev: true + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -856,6 +2111,27 @@ packages: hasBin: true dev: true + /follow-redirects@1.15.9(debug@4.3.7): + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 4.3.7 + dev: true + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -906,16 +2182,62 @@ packages: engines: {node: '>=8'} dev: true + /hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: true + + /hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true dev: true + /hi-base32@0.5.1: + resolution: {integrity: sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==} + dev: true + + /hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + + /http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + dev: true + /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: ms: 2.1.3 + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -931,6 +2253,27 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true + /inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + dev: true + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -955,6 +2298,16 @@ packages: is-extglob: 2.1.1 dev: true + /is-hex-prefixed@1.0.0: + resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} + engines: {node: '>=6.5.0', npm: '>=3'} + dev: true + + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -1002,6 +2355,18 @@ packages: - bufferutil - utf-8-validate + /js-sha256@0.9.0: + resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} + dev: true + + /js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + dev: true + + /js-sha512@0.8.0: + resolution: {integrity: sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==} + dev: true + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -1009,6 +2374,12 @@ packages: argparse: 2.0.1 dev: true + /json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + dependencies: + bignumber.js: 9.1.2 + dev: true + /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} @@ -1025,6 +2396,16 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} + /keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.2 + readable-stream: 3.6.2 + dev: true + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -1032,6 +2413,18 @@ packages: p-locate: 5.0.0 dev: true + /lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + dev: true + + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -1050,6 +2443,60 @@ packages: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true + /md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /merkletreejs@0.3.11: + resolution: {integrity: sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==} + engines: {node: '>= 7.6.0'} + dependencies: + bignumber.js: 9.1.2 + buffer-reverse: 1.0.1 + crypto-js: 4.2.0 + treeify: 1.1.0 + web3-utils: 1.10.4 + dev: true + + /micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + dev: true + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: true + + /mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: true + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: true + + /minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: true + /minimatch@3.0.4: resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} dependencies: @@ -1067,6 +2514,11 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true + /mixme@0.5.10: + resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} + engines: {node: '>= 8.0.0'} + dev: true + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -1112,12 +2564,47 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /multistream@4.1.0: + resolution: {integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==} + requiresBuild: true + dependencies: + once: 1.4.0 + readable-stream: 3.6.2 + dev: true + optional: true + + /mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + dev: true + + /mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true + /nanoid@3.3.1: resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true + /near-hd-key@1.2.1: + resolution: {integrity: sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==} + dependencies: + bip39: 3.0.2 + create-hmac: 1.1.7 + tweetnacl: 1.0.3 + dev: true + + /near-seed-phrase@0.2.1: + resolution: {integrity: sha512-feMuums+kVL3LSuPcP4ld07xHCb2mu6z48SGfP3W+8tl1Qm5xIcjiQzY2IDPBvFgajRDxWSb8GzsRHoInazByw==} + dependencies: + bip39-light: 1.0.7 + bs58: 4.0.1 + near-hd-key: 1.2.1 + tweetnacl: 1.0.3 + dev: true + /no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: @@ -1125,6 +2612,14 @@ packages: tslib: 2.7.0 dev: false + /node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + dev: true + + /node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + dev: true + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -1146,12 +2641,47 @@ packages: engines: {node: '>=0.10.0'} dev: true + /number-to-bn@1.7.0: + resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + bn.js: 4.11.6 + strip-hex-prefix: 1.0.0 + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -1184,6 +2714,17 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true + /pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -1195,12 +2736,25 @@ packages: hasBin: true dev: true + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -1216,6 +2770,26 @@ packages: engines: {node: '>=0.10.0'} dev: true + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: true + + /ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: true + /rpc-websockets@9.0.2: resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==} dependencies: @@ -1230,15 +2804,60 @@ packages: bufferutil: 4.0.8 utf-8-validate: 5.0.10 + /run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true + + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.7.0 + dev: true + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + + /scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + dev: true + + /secp256k1@5.0.0: + resolution: {integrity: sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + elliptic: 6.5.7 + node-addon-api: 5.1.0 + node-gyp-build: 4.8.2 + dev: true + /serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} dependencies: randombytes: 2.1.0 dev: true + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: true + + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + /snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: @@ -1258,6 +2877,17 @@ packages: engines: {node: '>=0.10.0'} dev: true + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: true + + /stream-transform@2.1.3: + resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + dependencies: + mixme: 0.5.10 + dev: true + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -1267,6 +2897,13 @@ packages: strip-ansi: 6.0.1 dev: true + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + requiresBuild: true + dependencies: + safe-buffer: 5.2.1 + dev: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1281,6 +2918,13 @@ packages: dev: true optional: true + /strip-hex-prefix@1.0.0: + resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + is-hex-prefixed: 1.0.0 + dev: true + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -1314,6 +2958,28 @@ packages: /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + /tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + requiresBuild: true + dependencies: + tmp: 0.2.3 + dev: true + optional: true + + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + + /tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + requiresBuild: true + dev: true + optional: true + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1321,6 +2987,11 @@ packages: is-number: 7.0.0 dev: true + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: true + /toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} dev: false @@ -1328,6 +2999,11 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + /treeify@1.1.0: + resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} + engines: {node: '>=0.6'} + dev: true + /ts-mocha@10.0.0(mocha@9.2.2): resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} engines: {node: '>= 6.X.X'} @@ -1401,11 +3077,24 @@ packages: /tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + /tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + dev: true + /type-detect@4.1.0: resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} engines: {node: '>=4'} dev: true + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /typescript-collections@1.3.3: + resolution: {integrity: sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==} + dev: true + /typescript@4.3.5: resolution: {integrity: sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==} engines: {node: '>=4.2.0'} @@ -1422,6 +3111,15 @@ packages: dependencies: node-gyp-build: 4.8.2 + /utf8@3.0.0: + resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + requiresBuild: true + dev: true + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -1430,6 +3128,30 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true + /vlq@2.0.4: + resolution: {integrity: sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==} + dev: true + + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: true + + /web3-utils@1.10.4: + resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethereumjs/util': 8.1.0 + bn.js: 5.2.1 + ethereum-bloom-filters: 1.2.0 + ethereum-cryptography: 2.2.1 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + dev: true + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -1451,6 +3173,15 @@ packages: resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} dev: true + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -1464,6 +3195,19 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true + /ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} diff --git a/extensions/puppet/programs/puppet/Cargo.toml b/extensions/puppet/programs/puppet/Cargo.toml index 7abfd53..1272564 100644 --- a/extensions/puppet/programs/puppet/Cargo.toml +++ b/extensions/puppet/programs/puppet/Cargo.toml @@ -19,3 +19,4 @@ idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"] [dependencies] anchor-lang = {version = "0.30.1", features = ["init-if-needed"]} anchor-spl = {version = "0.30.1", features = ["metadata"]} +mpl-token-metadata = "4.1.2" diff --git a/extensions/puppet/programs/puppet/src/errors.rs b/extensions/puppet/programs/puppet/src/errors.rs index 54603ec..6e80ce9 100644 --- a/extensions/puppet/programs/puppet/src/errors.rs +++ b/extensions/puppet/programs/puppet/src/errors.rs @@ -8,6 +8,8 @@ pub enum ErrorCode { #[msg("The given metaplex collection does not match the collection binding.")] MplCollectionDoesNotMatch, + MplCollectionNotFound, + #[msg("The given device collection has already bound.")] DeviceCollectionAlreadyBound, diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs index b8e0b59..ccc6c6b 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -3,13 +3,19 @@ use crate::errors::ErrorCode; use crate::state::{DeviceBinding, DeviceCollectionBinding, MplBinding, MplCollectionBinding}; use anchor_lang::prelude::*; use anchor_spl::associated_token::get_associated_token_address_with_program_id; +use anchor_spl::metadata::MetadataAccount; use anchor_spl::token::TokenAccount; +use mpl_token_metadata::accounts::Metadata; #[derive(Accounts)] #[instruction( params: BindParams )] pub struct Bind<'info> { + #[account( + address = Metadata::find_pda(&mpl_associated_token.mint).0 + )] + pub mpl_metadata: Account<'info, MetadataAccount>, #[account( constraint = mpl_associated_token.key() == params.mpl_ata, constraint = mpl_associated_token.owner == owner.key() @ ErrorCode::NotNFTOwner @@ -82,11 +88,15 @@ pub fn bind(ctx: Context, params: BindParams) -> Result<()> { ErrorCode::DeviceCollectionDoesNotMatch ); - require_keys_eq!( - ctx.accounts.mpl_associated_token.mint, - ctx.accounts.device_collection_binding.mpl_collection, - ErrorCode::MplCollectionDoesNotMatch - ); + if let Some(collection) = &ctx.accounts.mpl_metadata.collection { + require_keys_eq!( + collection.key, + ctx.accounts.device_collection_binding.mpl_collection, + ErrorCode::MplCollectionDoesNotMatch + ); + } else { + return Err(ErrorCode::MplCollectionNotFound.into()); + } require_keys_eq!( device_binding.mpl_ata, diff --git a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs index b457061..4f6029f 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs @@ -2,7 +2,6 @@ use crate::constants::{DEPHY_ID_PROGRAM, PRODUCT_MINT_SEED_PREFIX}; use crate::errors::ErrorCode; use crate::state::{DeviceCollectionBinding, MplCollectionBinding}; use anchor_lang::prelude::*; -use anchor_spl::token::Mint; #[derive(Accounts)] #[instruction( @@ -17,10 +16,11 @@ pub struct BindCollection<'info> { seeds::program = dephy_id_program.key() )] pub product_mint: AccountInfo<'info>, + /// CHECK: We will manually verify the metadata structure #[account( - constraint = mpl_mint.key() == params.mpl_collection, + constraint = mpl_collection.key() == params.mpl_collection, )] - pub mpl_mint: Account<'info, Mint>, + pub mpl_collection: AccountInfo<'info>, #[account( init_if_needed, payer = payer, @@ -33,7 +33,7 @@ pub struct BindCollection<'info> { init_if_needed, payer = payer, space = 8 + 32 + 1, - seeds = [b"mpl_collection_binding", mpl_mint.key().as_ref()], + seeds = [b"mpl_collection_binding", mpl_collection.key().as_ref()], bump )] pub mpl_collection_binding: Account<'info, MplCollectionBinding>, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b5875c..9daf25e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '9.0' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -9,438 +9,77 @@ patchedDependencies: hash: 4enzrly4t4usefdxlj442bgdqq path: patches/@kinobi-so__renderers-rust@0.20.10.patch -importers: - - .: - devDependencies: - '@iarna/toml': - specifier: ^2.2.5 - version: 2.2.5 - '@kinobi-so/nodes-from-anchor': - specifier: ^0.20.6 - version: 0.20.6 - '@kinobi-so/renderers-js': - specifier: ^0.20.9 - version: 0.20.9(fastestsmallesttextencoderdecoder@1.0.22) - '@kinobi-so/renderers-js-umi': - specifier: ^0.20.6 - version: 0.20.6(fastestsmallesttextencoderdecoder@1.0.22) - '@kinobi-so/renderers-rust': - specifier: ^0.20.10 - version: 0.20.10(patch_hash=4enzrly4t4usefdxlj442bgdqq)(fastestsmallesttextencoderdecoder@1.0.22) - kinobi: - specifier: ^0.20.4 - version: 0.20.4 - typescript: - specifier: ^5.5.2 - version: 5.5.2 - zx: - specifier: ^7.2.3 - version: 7.2.3 +devDependencies: + '@iarna/toml': + specifier: ^2.2.5 + version: 2.2.5 + '@kinobi-so/nodes-from-anchor': + specifier: ^0.20.6 + version: 0.20.6 + '@kinobi-so/renderers-js': + specifier: ^0.20.9 + version: 0.20.9(fastestsmallesttextencoderdecoder@1.0.22) + '@kinobi-so/renderers-js-umi': + specifier: ^0.20.6 + version: 0.20.6(fastestsmallesttextencoderdecoder@1.0.22) + '@kinobi-so/renderers-rust': + specifier: ^0.20.10 + version: 0.20.10(patch_hash=4enzrly4t4usefdxlj442bgdqq)(fastestsmallesttextencoderdecoder@1.0.22) + kinobi: + specifier: ^0.20.4 + version: 0.20.4 + typescript: + specifier: ^5.5.2 + version: 5.5.2 + zx: + specifier: ^7.2.3 + version: 7.2.3 packages: - '@iarna/toml@2.2.5': + /@iarna/toml@2.2.5: resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + dev: true - '@kinobi-so/errors@0.20.4': + /@kinobi-so/errors@0.20.4: resolution: {integrity: sha512-5GWQPiqLOngZFxMCTnF0rGsCc9LXUHXX+zBzbXBjhsdyQm8OSFpVFZtwiBkF+jsOBQPrLv26dFlkWJgBiq2jXQ==} hasBin: true - - '@kinobi-so/node-types@0.20.4': - resolution: {integrity: sha512-kFFXMC9nSemDj2itNeSj4VR9R6QTz0z7v3niwxHHq9IJ4TFPwpcZAt7aH++SGlCUeHG3iOHC2ZngFMhv+Ks/Fw==} - - '@kinobi-so/nodes-from-anchor@0.20.6': - resolution: {integrity: sha512-2ad1ILvnul1PqqlCkQ2uii9KCgcR9ne5jxXsxiTKUHhab6LmI6sCTR15FO4T+ZzgMVsvAe3ySrOmgDICUHr4eA==} - - '@kinobi-so/nodes@0.20.4': - resolution: {integrity: sha512-zeGOOdOaKbMxqiZWNJx/JVGVWp4mzCkwDp3bG4J+x9+mQ1nQcyuPvHXeHmtBXa9IWp7AScXlyn5HddVzK/8ZRQ==} - - '@kinobi-so/renderers-core@0.20.4': - resolution: {integrity: sha512-feb0Fsw7UIj14JZ2LmHYyosT07K/Jrs7CvNYD2YF4g6WQz9mmy1l8Fa+gpVtoDdSHvfXrgzv8193p0QkRRBWmA==} - - '@kinobi-so/renderers-js-umi@0.20.6': - resolution: {integrity: sha512-s7BN7Fa7VAr6tuTyLJVp6ceftFMqMRTopIAD4QyYGrJVoM+KLA0W7MpGo/pE61jRUCE24MZIJJjkX1qbuL4hfA==} - - '@kinobi-so/renderers-js@0.20.9': - resolution: {integrity: sha512-wrduoNFTvR23Gr+oMB1sFjhv6lvh3DHqDR7B5+MownuGsM1FG6iszSw3hZIbpOetKBjhWYNjHfE5QOZG56Wadg==} - - '@kinobi-so/renderers-rust@0.20.10': - resolution: {integrity: sha512-I4NINXbUJR3gPKoS/fNQ92YuCGFtKd+Ca+nxY+5qmVl9ctB3wIrFvUoNMq0eES8Xh6jyBtF73ocBFKBzFfn1NQ==} - - '@kinobi-so/validators@0.20.4': - resolution: {integrity: sha512-PyhfM1fgsAPrDgMOB1VjvW+CytPTtLMLB0bSCU+0GRm8IoZ8pj74cIcB5XPjai3N5dU7kDMYz1nZLnCFsoXfLg==} - - '@kinobi-so/visitors-core@0.20.4': - resolution: {integrity: sha512-l4LCAOKL35tXn4jDZ4/gNdBeJYB5ACE4lgKQxL6oyII36hPe8pwCihIpjzHKDm9S93o9pKFN76ay5S3NnWANRw==} - - '@kinobi-so/visitors@0.20.4': - resolution: {integrity: sha512-sr+1qiU4sN5OfrVI//RqqHMKl5VapugkO3f/MHXGmFBDWANXJCIMmAXMMARzk/h6v76zswJ+NOHe0C3FLYb1xg==} - - '@noble/hashes@1.4.0': - resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} - engines: {node: '>= 16'} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@solana/codecs-core@2.0.0-preview.2': - resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} - - '@solana/codecs-numbers@2.0.0-preview.2': - resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} - - '@solana/codecs-strings@2.0.0-preview.2': - resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - - '@solana/errors@2.0.0-preview.2': - resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} - hasBin: true - - '@types/fs-extra@11.0.4': - resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} - - '@types/jsonfile@6.1.4': - resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} - - '@types/minimist@1.2.5': - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - - '@types/node@18.19.33': - resolution: {integrity: sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==} - - '@types/ps-tree@1.1.6': - resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} - - '@types/which@3.0.3': - resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} - - a-sync-waterfall@1.0.1: - resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} - - asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - event-stream@3.3.4: - resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} - - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - - fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - - from@0.1.7: - resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} - - fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - fx@34.0.0: - resolution: {integrity: sha512-/fZih3/WLsrtlaj2mahjWxAmyuikmcl3D5kKPqLtFmEilLsy9wp0+/vEmfvYXXhwJc+ajtCFDCf+yttXmPMHSQ==} - hasBin: true - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - json-stable-stringify@1.1.1: - resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} - engines: {node: '>= 0.4'} - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - - jsonify@0.0.1: - resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} - - kinobi@0.20.4: - resolution: {integrity: sha512-/EkPQV1jVK4PkSWbdFb12EO7QMMkhNaoVaA0Le6MheCcnCHcWlLsz4Un/5eqSa/NNM8kCivGsEg/n9qDeKddTA==} - - map-stream@0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - - node-fetch@3.3.1: - resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - nunjucks@3.2.4: - resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} - engines: {node: '>= 6.9.0'} - hasBin: true - peerDependencies: - chokidar: ^3.3.0 - peerDependenciesMeta: - chokidar: - optional: true - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - pause-stream@0.0.11: - resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} - engines: {node: '>=14'} - hasBin: true - - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} - engines: {node: '>=14'} - hasBin: true - - ps-tree@1.2.0: - resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} - engines: {node: '>= 0.10'} - hasBin: true - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - - split@0.3.3: - resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} - - stream-combiner@0.0.4: - resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} - - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - typescript@5.5.2: - resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} - engines: {node: '>=14.17'} - hasBin: true - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - - webpod@0.0.2: - resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} - hasBin: true - - which@3.0.1: - resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - - yaml@2.4.2: - resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} - engines: {node: '>= 14'} - hasBin: true - - zx@7.2.3: - resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==} - engines: {node: '>= 16.0.0'} - hasBin: true - -snapshots: - - '@iarna/toml@2.2.5': {} - - '@kinobi-so/errors@0.20.4': dependencies: '@kinobi-so/node-types': 0.20.4 chalk: 5.3.0 commander: 12.1.0 + dev: true - '@kinobi-so/node-types@0.20.4': {} + /@kinobi-so/node-types@0.20.4: + resolution: {integrity: sha512-kFFXMC9nSemDj2itNeSj4VR9R6QTz0z7v3niwxHHq9IJ4TFPwpcZAt7aH++SGlCUeHG3iOHC2ZngFMhv+Ks/Fw==} + dev: true - '@kinobi-so/nodes-from-anchor@0.20.6': + /@kinobi-so/nodes-from-anchor@0.20.6: + resolution: {integrity: sha512-2ad1ILvnul1PqqlCkQ2uii9KCgcR9ne5jxXsxiTKUHhab6LmI6sCTR15FO4T+ZzgMVsvAe3ySrOmgDICUHr4eA==} dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 '@kinobi-so/visitors': 0.20.4 - '@noble/hashes': 1.4.0 + '@noble/hashes': 1.5.0 + dev: true - '@kinobi-so/nodes@0.20.4': + /@kinobi-so/nodes@0.20.4: + resolution: {integrity: sha512-zeGOOdOaKbMxqiZWNJx/JVGVWp4mzCkwDp3bG4J+x9+mQ1nQcyuPvHXeHmtBXa9IWp7AScXlyn5HddVzK/8ZRQ==} dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/node-types': 0.20.4 + dev: true - '@kinobi-so/renderers-core@0.20.4': + /@kinobi-so/renderers-core@0.20.4: + resolution: {integrity: sha512-feb0Fsw7UIj14JZ2LmHYyosT07K/Jrs7CvNYD2YF4g6WQz9mmy1l8Fa+gpVtoDdSHvfXrgzv8193p0QkRRBWmA==} dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 '@kinobi-so/visitors-core': 0.20.4 + dev: true - '@kinobi-so/renderers-js-umi@0.20.6(fastestsmallesttextencoderdecoder@1.0.22)': + /@kinobi-so/renderers-js-umi@0.20.6(fastestsmallesttextencoderdecoder@1.0.22): + resolution: {integrity: sha512-s7BN7Fa7VAr6tuTyLJVp6ceftFMqMRTopIAD4QyYGrJVoM+KLA0W7MpGo/pE61jRUCE24MZIJJjkX1qbuL4hfA==} dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 @@ -449,12 +88,14 @@ snapshots: '@kinobi-so/visitors-core': 0.20.4 '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) nunjucks: 3.2.4 - prettier: 3.2.5 + prettier: 3.3.3 transitivePeerDependencies: - chokidar - fastestsmallesttextencoderdecoder + dev: true - '@kinobi-so/renderers-js@0.20.9(fastestsmallesttextencoderdecoder@1.0.22)': + /@kinobi-so/renderers-js@0.20.9(fastestsmallesttextencoderdecoder@1.0.22): + resolution: {integrity: sha512-wrduoNFTvR23Gr+oMB1sFjhv6lvh3DHqDR7B5+MownuGsM1FG6iszSw3hZIbpOetKBjhWYNjHfE5QOZG56Wadg==} dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 @@ -462,12 +103,14 @@ snapshots: '@kinobi-so/visitors-core': 0.20.4 '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) nunjucks: 3.2.4 - prettier: 3.3.2 + prettier: 3.3.3 transitivePeerDependencies: - chokidar - fastestsmallesttextencoderdecoder + dev: true - '@kinobi-so/renderers-rust@0.20.10(patch_hash=4enzrly4t4usefdxlj442bgdqq)(fastestsmallesttextencoderdecoder@1.0.22)': + /@kinobi-so/renderers-rust@0.20.10(patch_hash=4enzrly4t4usefdxlj442bgdqq)(fastestsmallesttextencoderdecoder@1.0.22): + resolution: {integrity: sha512-I4NINXbUJR3gPKoS/fNQ92YuCGFtKd+Ca+nxY+5qmVl9ctB3wIrFvUoNMq0eES8Xh6jyBtF73ocBFKBzFfn1NQ==} dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 @@ -478,122 +121,202 @@ snapshots: transitivePeerDependencies: - chokidar - fastestsmallesttextencoderdecoder + dev: true + patched: true - '@kinobi-so/validators@0.20.4': + /@kinobi-so/validators@0.20.4: + resolution: {integrity: sha512-PyhfM1fgsAPrDgMOB1VjvW+CytPTtLMLB0bSCU+0GRm8IoZ8pj74cIcB5XPjai3N5dU7kDMYz1nZLnCFsoXfLg==} dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 '@kinobi-so/visitors-core': 0.20.4 + dev: true - '@kinobi-so/visitors-core@0.20.4': + /@kinobi-so/visitors-core@0.20.4: + resolution: {integrity: sha512-l4LCAOKL35tXn4jDZ4/gNdBeJYB5ACE4lgKQxL6oyII36hPe8pwCihIpjzHKDm9S93o9pKFN76ay5S3NnWANRw==} dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 json-stable-stringify: 1.1.1 + dev: true - '@kinobi-so/visitors@0.20.4': + /@kinobi-so/visitors@0.20.4: + resolution: {integrity: sha512-sr+1qiU4sN5OfrVI//RqqHMKl5VapugkO3f/MHXGmFBDWANXJCIMmAXMMARzk/h6v76zswJ+NOHe0C3FLYb1xg==} dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 '@kinobi-so/visitors-core': 0.20.4 + dev: true - '@noble/hashes@1.4.0': {} + /@noble/hashes@1.5.0: + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + dev: true - '@nodelib/fs.scandir@2.1.5': + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 + dev: true - '@nodelib/fs.stat@2.0.5': {} + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true - '@nodelib/fs.walk@1.2.8': + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + dev: true - '@solana/codecs-core@2.0.0-preview.2': + /@solana/codecs-core@2.0.0-preview.2: + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} dependencies: '@solana/errors': 2.0.0-preview.2 + dev: true - '@solana/codecs-numbers@2.0.0-preview.2': + /@solana/codecs-numbers@2.0.0-preview.2: + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 + dev: true - '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + /@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22): + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/codecs-numbers': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 fastestsmallesttextencoderdecoder: 1.0.22 + dev: true - '@solana/errors@2.0.0-preview.2': + /@solana/errors@2.0.0-preview.2: + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true dependencies: chalk: 5.3.0 commander: 12.1.0 + dev: true - '@types/fs-extra@11.0.4': + /@types/fs-extra@11.0.4: + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 18.19.33 + '@types/node': 18.19.50 + dev: true - '@types/jsonfile@6.1.4': + /@types/jsonfile@6.1.4: + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 18.19.33 + '@types/node': 18.19.50 + dev: true - '@types/minimist@1.2.5': {} + /@types/minimist@1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + dev: true - '@types/node@18.19.33': + /@types/node@18.19.50: + resolution: {integrity: sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==} dependencies: undici-types: 5.26.5 + dev: true - '@types/ps-tree@1.1.6': {} + /@types/ps-tree@1.1.6: + resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} + dev: true - '@types/which@3.0.3': {} + /@types/which@3.0.4: + resolution: {integrity: sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==} + dev: true - a-sync-waterfall@1.0.1: {} + /a-sync-waterfall@1.0.1: + resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} + dev: true - asap@2.0.6: {} + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true - braces@3.0.2: + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 + dev: true - call-bind@1.0.7: + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 + dev: true - chalk@5.3.0: {} + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true - commander@12.1.0: {} + /commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + dev: true - commander@5.1.0: {} + /commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + dev: true - data-uri-to-buffer@4.0.1: {} + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: true - define-data-property@1.1.4: + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 + dev: true - dir-glob@3.0.1: + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 + dev: true - duplexer@0.1.2: {} + /duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true - es-define-property@1.0.0: + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 + dev: true - es-errors@1.3.0: {} + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true - event-stream@3.3.4: + /event-stream@3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} dependencies: duplexer: 0.1.2 from: 0.1.7 @@ -602,172 +325,299 @@ snapshots: split: 0.3.3 stream-combiner: 0.0.4 through: 2.3.8 + dev: true - fast-glob@3.3.2: + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 + dev: true - fastestsmallesttextencoderdecoder@1.0.22: {} + /fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + dev: true - fastq@1.17.1: + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 + dev: true - fetch-blob@3.2.0: + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + dev: true - fill-range@7.0.1: + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + dev: true - formdata-polyfill@4.0.10: + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} dependencies: fetch-blob: 3.2.0 + dev: true - from@0.1.7: {} + /from@0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + dev: true - fs-extra@11.2.0: + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 + dev: true - function-bind@1.1.2: {} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true - fx@34.0.0: {} + /fx@35.0.0: + resolution: {integrity: sha512-O07q+Lknrom5RUX/u53tjo2KTTLUnL0K703JbqMYb19ORijfJNvijzFqqYXEjdk25T9R14S6t6wHD8fCWXCM0g==} + hasBin: true + dev: true - get-intrinsic@1.2.4: + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 + dev: true - glob-parent@5.1.2: + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 + dev: true - globby@13.2.2: + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 + dev: true - gopd@1.0.1: + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.4 + dev: true - graceful-fs@4.2.11: {} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true - has-property-descriptors@1.0.2: + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: es-define-property: 1.0.0 + dev: true - has-proto@1.0.3: {} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true - has-symbols@1.0.3: {} + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true - hasown@2.0.2: + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 + dev: true - ignore@5.3.1: {} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + dev: true - is-extglob@2.1.1: {} + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true - is-glob@4.0.3: + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 + dev: true - is-number@7.0.0: {} + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true - isarray@2.0.5: {} + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true - isexe@2.0.0: {} + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true - json-stable-stringify@1.1.1: + /json-stable-stringify@1.1.1: + resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 isarray: 2.0.5 jsonify: 0.0.1 object-keys: 1.1.1 + dev: true - jsonfile@6.1.0: + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 + dev: true - jsonify@0.0.1: {} + /jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + dev: true - kinobi@0.20.4: + /kinobi@0.20.4: + resolution: {integrity: sha512-/EkPQV1jVK4PkSWbdFb12EO7QMMkhNaoVaA0Le6MheCcnCHcWlLsz4Un/5eqSa/NNM8kCivGsEg/n9qDeKddTA==} dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 '@kinobi-so/validators': 0.20.4 '@kinobi-so/visitors': 0.20.4 + dev: true - map-stream@0.1.0: {} + /map-stream@0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + dev: true - merge2@1.4.1: {} + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true - micromatch@4.0.5: + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 + dev: true - minimist@1.2.8: {} + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true - node-domexception@1.0.0: {} + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: true - node-fetch@3.3.1: + /node-fetch@3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + dev: true - nunjucks@3.2.4: + /nunjucks@3.2.4: + resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} + engines: {node: '>= 6.9.0'} + hasBin: true + peerDependencies: + chokidar: ^3.3.0 + peerDependenciesMeta: + chokidar: + optional: true dependencies: a-sync-waterfall: 1.0.1 asap: 2.0.6 commander: 5.1.0 + dev: true - object-keys@1.1.1: {} + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true - path-type@4.0.0: {} + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true - pause-stream@0.0.11: + /pause-stream@0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} dependencies: through: 2.3.8 + dev: true - picomatch@2.3.1: {} - - prettier@3.2.5: {} + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true - prettier@3.3.2: {} + /prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + dev: true - ps-tree@1.2.0: + /ps-tree@1.2.0: + resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} + engines: {node: '>= 0.10'} + hasBin: true dependencies: event-stream: 3.3.4 + dev: true - queue-microtask@1.2.3: {} + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true - reusify@1.0.4: {} + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true - run-parallel@1.2.0: + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + dev: true - set-function-length@1.2.2: + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -775,53 +625,93 @@ snapshots: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 + dev: true - slash@4.0.0: {} + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true - split@0.3.3: + /split@0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} dependencies: through: 2.3.8 + dev: true - stream-combiner@0.0.4: + /stream-combiner@0.0.4: + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} dependencies: duplexer: 0.1.2 + dev: true - through@2.3.8: {} + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true - to-regex-range@5.0.1: + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 + dev: true - typescript@5.5.2: {} + /typescript@5.5.2: + resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} + engines: {node: '>=14.17'} + hasBin: true + dev: true - undici-types@5.26.5: {} + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true - universalify@2.0.1: {} + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true - web-streams-polyfill@3.3.3: {} + /web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + dev: true - webpod@0.0.2: {} + /webpod@0.0.2: + resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} + hasBin: true + dev: true - which@3.0.1: + /which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true dependencies: isexe: 2.0.0 + dev: true - yaml@2.4.2: {} + /yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true + dev: true - zx@7.2.3: + /zx@7.2.3: + resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==} + engines: {node: '>= 16.0.0'} + hasBin: true dependencies: '@types/fs-extra': 11.0.4 '@types/minimist': 1.2.5 - '@types/node': 18.19.33 + '@types/node': 18.19.50 '@types/ps-tree': 1.1.6 - '@types/which': 3.0.3 + '@types/which': 3.0.4 chalk: 5.3.0 fs-extra: 11.2.0 - fx: 34.0.0 + fx: 35.0.0 globby: 13.2.2 minimist: 1.2.8 node-fetch: 3.3.1 ps-tree: 1.2.0 webpod: 0.0.2 which: 3.0.1 - yaml: 2.4.2 + yaml: 2.5.1 + dev: true From 18479a60671cec4fecddb41325d27c2dea9c26d1 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Sat, 14 Sep 2024 14:39:42 +0800 Subject: [PATCH 14/29] fix: owner auth --- extensions/puppet/client/index.ts | 51 +++++++++---------- .../programs/puppet/src/instructions/bind.rs | 2 +- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/extensions/puppet/client/index.ts b/extensions/puppet/client/index.ts index 53c2ac3..bb2e487 100644 --- a/extensions/puppet/client/index.ts +++ b/extensions/puppet/client/index.ts @@ -1,6 +1,6 @@ import yargs from "yargs"; import { hideBin } from "yargs/helpers"; -// import { CreateProductInput } from "../../../clients/js/src"; +import * as anchor from "@coral-xyz/anchor"; import { Keypair, PublicKey } from "@solana/web3.js"; import { Puppet } from "../target/types/puppet"; import { Program } from "@coral-xyz/anchor"; @@ -17,6 +17,7 @@ import { ASSOCIATED_TOKEN_PROGRAM_ID, } from "@solana/spl-token"; +const DEPHY_ID_PROGRAM = new PublicKey("hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1") const DEV_RPC = "https://api.apr.dev"; yargs(hideBin(process.argv)) @@ -27,7 +28,7 @@ yargs(hideBin(process.argv)) privatekey: { type: "string", demandOption: true }, }, async (args) => { - + } ) .command( @@ -48,17 +49,11 @@ yargs(hideBin(process.argv)) }, async (args) => { const payer = Keypair.fromSecretKey(new Uint8Array(JSON.parse(args.privatekey))); - + console.log("pubkey:", payer.publicKey) const connection = new Connection(clusterApiUrl("devnet")); const metaplex = Metaplex.make(connection) .use(keypairIdentity(payer)) - .use( - irysStorage({ - address: "https://devnet.bundlr.network", - providerUrl: "https://api.devnet.solana.com", - timeout: 60000, - }) - ); + .use(irysStorage()); const { nft: collectionNft } = await metaplex.nfts().create({ uri: args.url, @@ -81,17 +76,10 @@ yargs(hideBin(process.argv)) }, async (args) => { const payer = Keypair.fromSecretKey(new Uint8Array(JSON.parse(args.privatekey))); - const connection = new Connection(clusterApiUrl("devnet")); const metaplex = Metaplex.make(connection) .use(keypairIdentity(payer)) - .use( - irysStorage({ - address: "https://devnet.bundlr.network", - providerUrl: "https://api.devnet.solana.com", - timeout: 60000, - }) - ); + .use(irysStorage()); // Create an NFT under the specified collection. const { nft } = await metaplex.nfts().create({ @@ -188,20 +176,31 @@ yargs(hideBin(process.argv)) program.programId ); + const mplCollectionBinding = await program.account.mplCollectionBinding.fetch(mplCollectionBindingPda[0]); + const deviceMintPda = PublicKey.findProgramAddressSync( + [ + Buffer.from("device_mint"), + mplCollectionBinding.deviceCollection.toBuffer(), + new PublicKey(args.device).toBuffer(), + ], + DEPHY_ID_PROGRAM + ); + const [deviceAssociatedToken] = anchor.web3.PublicKey.findProgramAddressSync( + [ + owner.toBuffer(), + deviceMintPda[0].toBuffer(), + ], + DEPHY_ID_PROGRAM + ); + await program.methods .bind({ device: new PublicKey(args.device), mplAta: new PublicKey(args.mplAta), }) .accounts({ - mplAssociatedToken: mplAssociatedToken, // The ATA for the Metaplex NFT - deviceAssociatedToken: await anchor.web3.PublicKey.findProgramAddress( - [ - Buffer.from("associated_token"), - new PublicKey(args.device).toBuffer(), - ], - anchor.web3.TOKEN_PROGRAM_ID - ), + mplAssociatedToken, // The ATA for the Metaplex NFT + deviceAssociatedToken, deviceCollectionBinding: deviceCollectionBindingPda[0], // Device collection binding PDA mplCollectionBinding: mplCollectionBindingPda[0], // Metaplex collection binding PDA owner: owner, // Owner of the device and NFT diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs index ccc6c6b..eddb2ed 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -71,7 +71,7 @@ pub fn bind(ctx: Context, params: BindParams) -> Result<()> { ); let device_ata = get_associated_token_address_with_program_id( - &ctx.accounts.payer.key(), + &ctx.accounts.owner.key(), &device_mint_pubkey, &DEPHY_ID_PROGRAM, ); From a17b411044206471418ebd9f676615d309ae67c7 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Sat, 14 Sep 2024 15:30:13 +0800 Subject: [PATCH 15/29] chore: delete create-product and create-device --- extensions/puppet/client/index.ts | 58 ++++++++++++------------------- 1 file changed, 23 insertions(+), 35 deletions(-) diff --git a/extensions/puppet/client/index.ts b/extensions/puppet/client/index.ts index bb2e487..59990da 100644 --- a/extensions/puppet/client/index.ts +++ b/extensions/puppet/client/index.ts @@ -12,33 +12,16 @@ import { import { Connection, clusterApiUrl } from "@solana/web3.js"; import { getAssociatedTokenAddress, - createMint, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID, } from "@solana/spl-token"; -const DEPHY_ID_PROGRAM = new PublicKey("hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1") +const DEPHY_ID_PROGRAM = new PublicKey( + "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" +); const DEV_RPC = "https://api.apr.dev"; yargs(hideBin(process.argv)) - .command( - "create-product", - "Create product", - { - privatekey: { type: "string", demandOption: true }, - }, - async (args) => { - - } - ) - .command( - "create-device", - "Create device", - { - privatekey: { type: "string", demandOption: true }, - }, - async (args) => {} - ) .command( "create-mpl-collection", "Create metaplex collection", @@ -48,8 +31,10 @@ yargs(hideBin(process.argv)) privatekey: { type: "string", demandOption: true }, }, async (args) => { - const payer = Keypair.fromSecretKey(new Uint8Array(JSON.parse(args.privatekey))); - console.log("pubkey:", payer.publicKey) + const payer = Keypair.fromSecretKey( + new Uint8Array(JSON.parse(args.privatekey)) + ); + console.log("pubkey:", payer.publicKey); const connection = new Connection(clusterApiUrl("devnet")); const metaplex = Metaplex.make(connection) .use(keypairIdentity(payer)) @@ -59,7 +44,7 @@ yargs(hideBin(process.argv)) uri: args.url, name: args.name, sellerFeeBasisPoints: 500, // Represents 5.00%. - isCollection: true + isCollection: true, }); console.log("mplCollection:", collectionNft.address.toBase58()); @@ -75,11 +60,13 @@ yargs(hideBin(process.argv)) privatekey: { type: "string", demandOption: true }, }, async (args) => { - const payer = Keypair.fromSecretKey(new Uint8Array(JSON.parse(args.privatekey))); + const payer = Keypair.fromSecretKey( + new Uint8Array(JSON.parse(args.privatekey)) + ); const connection = new Connection(clusterApiUrl("devnet")); const metaplex = Metaplex.make(connection) - .use(keypairIdentity(payer)) - .use(irysStorage()); + .use(keypairIdentity(payer)) + .use(irysStorage()); // Create an NFT under the specified collection. const { nft } = await metaplex.nfts().create({ @@ -176,22 +163,23 @@ yargs(hideBin(process.argv)) program.programId ); - const mplCollectionBinding = await program.account.mplCollectionBinding.fetch(mplCollectionBindingPda[0]); + const mplCollectionBinding = + await program.account.mplCollectionBinding.fetch( + mplCollectionBindingPda[0] + ); const deviceMintPda = PublicKey.findProgramAddressSync( [ Buffer.from("device_mint"), - mplCollectionBinding.deviceCollection.toBuffer(), + mplCollectionBinding.deviceCollection.toBuffer(), new PublicKey(args.device).toBuffer(), ], DEPHY_ID_PROGRAM ); - const [deviceAssociatedToken] = anchor.web3.PublicKey.findProgramAddressSync( - [ - owner.toBuffer(), - deviceMintPda[0].toBuffer(), - ], - DEPHY_ID_PROGRAM - ); + const [deviceAssociatedToken] = + anchor.web3.PublicKey.findProgramAddressSync( + [owner.toBuffer(), deviceMintPda[0].toBuffer()], + DEPHY_ID_PROGRAM + ); await program.methods .bind({ From 149d27fcc6d4536c4ab881149311a311dbc5a6e6 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Sun, 15 Sep 2024 10:15:54 +0800 Subject: [PATCH 16/29] fix: metaplex lib --- extensions/puppet/client/index.ts | 98 ++++++++++------- extensions/puppet/keypair.json | 1 + extensions/puppet/package.json | 8 +- extensions/puppet/pnpm-lock.yaml | 171 ++++++++++++++++++++++++++++++ 4 files changed, 234 insertions(+), 44 deletions(-) create mode 100644 extensions/puppet/keypair.json diff --git a/extensions/puppet/client/index.ts b/extensions/puppet/client/index.ts index 59990da..dbc730e 100644 --- a/extensions/puppet/client/index.ts +++ b/extensions/puppet/client/index.ts @@ -1,25 +1,37 @@ import yargs from "yargs"; import { hideBin } from "yargs/helpers"; import * as anchor from "@coral-xyz/anchor"; -import { Keypair, PublicKey } from "@solana/web3.js"; +import { PublicKey } from "@solana/web3.js"; import { Puppet } from "../target/types/puppet"; import { Program } from "@coral-xyz/anchor"; import { - Metaplex, - irysStorage, - keypairIdentity, -} from "@metaplex-foundation/js"; -import { Connection, clusterApiUrl } from "@solana/web3.js"; + generateSigner, + percentAmount, + createSignerFromKeypair, + signerIdentity, +} from "@metaplex-foundation/umi"; +import { createUmi } from '@metaplex-foundation/umi-bundle-defaults' +import { + mplTokenMetadata, + createNft, + fetchDigitalAsset, +} from "@metaplex-foundation/mpl-token-metadata"; import { getAssociatedTokenAddress, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID, } from "@solana/spl-token"; +import fs from "fs"; +import path from "path"; const DEPHY_ID_PROGRAM = new PublicKey( "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" ); -const DEV_RPC = "https://api.apr.dev"; +const DEV_RPC = "https://api.devnet.solana.com"; +const SECRET_KEY = fs.readFileSync( + path.join(__dirname, '../keypair.json'), + "utf-8" +) yargs(hideBin(process.argv)) .command( @@ -28,26 +40,29 @@ yargs(hideBin(process.argv)) { url: { type: "string", demandOption: true }, name: { type: "string", demandOption: true }, - privatekey: { type: "string", demandOption: true }, }, async (args) => { - const payer = Keypair.fromSecretKey( - new Uint8Array(JSON.parse(args.privatekey)) - ); - console.log("pubkey:", payer.publicKey); - const connection = new Connection(clusterApiUrl("devnet")); - const metaplex = Metaplex.make(connection) - .use(keypairIdentity(payer)) - .use(irysStorage()); + const umi = createUmi(DEV_RPC); + + const keypair = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(JSON.parse(SECRET_KEY))); - const { nft: collectionNft } = await metaplex.nfts().create({ - uri: args.url, - name: args.name, - sellerFeeBasisPoints: 500, // Represents 5.00%. - isCollection: true, - }); + console.log(keypair.publicKey) - console.log("mplCollection:", collectionNft.address.toBase58()); + const signer = createSignerFromKeypair(umi, keypair); + + umi.use(signerIdentity(signer)) + umi.use(mplTokenMetadata()) + const mint = generateSigner(umi) + await createNft(umi, { + mint, + name: args.name, + uri: args.url, + sellerFeeBasisPoints: percentAmount(5.5), + isCollection: true + }).sendAndConfirm(umi) + + const asset = await fetchDigitalAsset(umi, mint.publicKey) + console.log("mplCollection:", asset.mint.publicKey); } ) .command( @@ -60,27 +75,30 @@ yargs(hideBin(process.argv)) privatekey: { type: "string", demandOption: true }, }, async (args) => { - const payer = Keypair.fromSecretKey( - new Uint8Array(JSON.parse(args.privatekey)) - ); - const connection = new Connection(clusterApiUrl("devnet")); - const metaplex = Metaplex.make(connection) - .use(keypairIdentity(payer)) - .use(irysStorage()); + const umi = createUmi(DEV_RPC); + + const keypair = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(JSON.parse(SECRET_KEY))); - // Create an NFT under the specified collection. - const { nft } = await metaplex.nfts().create({ - uri: args.url, - name: args.name, - sellerFeeBasisPoints: 500, // Represents 5.00%. - collection: new PublicKey(args.collection), - }); + const signer = createSignerFromKeypair(umi, keypair); - console.log("mpl_mint:", nft.address.toBase58()); + umi.use(signerIdentity(signer)) + umi.use(mplTokenMetadata()) + const mint = generateSigner(umi) + await createNft(umi, { + mint, + name: args.name, + uri: args.url, + sellerFeeBasisPoints: percentAmount(5.5), + isCollection: true + }).sendAndConfirm(umi) + + const asset = await fetchDigitalAsset(umi, mint.publicKey) + console.log("asset:", asset.publicKey) + console.log("mpl_mint:", asset.mint.publicKey); const mplAta = await getAssociatedTokenAddress( - nft.address, // The mint address of the created NFT - payer.publicKey, // The wallet address of the NFT owner + new anchor.web3.PublicKey(asset.mint.publicKey), // The mint address of the created NFT + new anchor.web3.PublicKey(keypair.publicKey), // The wallet address of the NFT owner false, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID diff --git a/extensions/puppet/keypair.json b/extensions/puppet/keypair.json new file mode 100644 index 0000000..46e5710 --- /dev/null +++ b/extensions/puppet/keypair.json @@ -0,0 +1 @@ +[3,98,129,50,166,110,222,238,8,122,218,16,146,91,239,253,219,217,78,248,136,253,20,247,228,232,255,72,51,52,152,232,59,56,47,66,135,204,197,194,83,150,196,82,143,128,67,241,163,111,202,98,165,17,242,25,253,86,24,192,84,74,103,132] \ No newline at end of file diff --git a/extensions/puppet/package.json b/extensions/puppet/package.json index d5cb732..b62a2ec 100644 --- a/extensions/puppet/package.json +++ b/extensions/puppet/package.json @@ -6,11 +6,11 @@ "test": "ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts", "cli": "ts-node ./client/index.ts" }, - "dependencies": { - "@coral-xyz/anchor": "^0.30.1" - }, "devDependencies": { - "@metaplex-foundation/js": "^0.20.1", + "@coral-xyz/anchor": "^0.30.1", + "@metaplex-foundation/umi": "^0.9.2", + "@metaplex-foundation/umi-bundle-defaults": "^0.9.2", + "@metaplex-foundation/mpl-token-metadata": "^3.2.1", "@solana/spl-token": "^0.4.8", "@solana/web3.js": "^1.95.3", "@types/bn.js": "^5.1.0", diff --git a/extensions/puppet/pnpm-lock.yaml b/extensions/puppet/pnpm-lock.yaml index 61f100b..ac6f501 100644 --- a/extensions/puppet/pnpm-lock.yaml +++ b/extensions/puppet/pnpm-lock.yaml @@ -8,11 +8,20 @@ dependencies: '@coral-xyz/anchor': specifier: ^0.30.1 version: 0.30.1 + '@metaplex-foundation/umi': + specifier: ^0.9.2 + version: 0.9.2 + '@metaplex-foundation/umi-bundle-defaults': + specifier: ^0.9.2 + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) devDependencies: '@metaplex-foundation/js': specifier: ^0.20.1 version: 0.20.1(arweave@1.15.1)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) + '@metaplex-foundation/mpl-token-metadata': + specifier: ^3.2.1 + version: 3.2.1(@metaplex-foundation/umi@0.9.2) '@solana/spl-token': specifier: ^0.4.8 version: 0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) @@ -716,6 +725,168 @@ packages: - utf-8-validate dev: true + /@metaplex-foundation/mpl-token-metadata@3.2.1(@metaplex-foundation/umi@0.9.2): + resolution: {integrity: sha512-26W1NhQwDWmLOg/pBRYut7x/vEs/5kFS2sWVEY5/X0f2jJOLhnd4NaZQcq+5u+XZsXvm1jq2AtrRGPNK43oqWQ==} + peerDependencies: + '@metaplex-foundation/umi': '>= 0.8.2 < 1' + dependencies: + '@metaplex-foundation/mpl-toolbox': 0.9.4(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi': 0.9.2 + dev: true + + /@metaplex-foundation/mpl-toolbox@0.9.4(@metaplex-foundation/umi@0.9.2): + resolution: {integrity: sha512-fd6JxfoLbj/MM8FG2x91KYVy1U6AjBQw4qjt7+Da3trzQaWnSaYHDcYRG/53xqfvZ9qofY1T2t53GXPlD87lnQ==} + peerDependencies: + '@metaplex-foundation/umi': '>= 0.8.2 < 1' + dependencies: + '@metaplex-foundation/umi': 0.9.2 + dev: true + + /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): + resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + dependencies: + '@metaplex-foundation/umi': 0.9.2 + '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) + '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) + '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) + '@solana/web3.js': 1.95.3 + transitivePeerDependencies: + - encoding + dev: false + + /@metaplex-foundation/umi-downloader-http@0.9.2(@metaplex-foundation/umi@0.9.2): + resolution: {integrity: sha512-tzPT9hBwenzTzAQg07rmsrqZfgguAXELbcJrsYMoASp5VqWFXYIP00g94KET6XLjWUXH4P1J2zoa6hGennPXHA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + dependencies: + '@metaplex-foundation/umi': 0.9.2 + dev: false + + /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): + resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + dependencies: + '@metaplex-foundation/umi': 0.9.2 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) + '@noble/curves': 1.6.0 + '@solana/web3.js': 1.95.3 + dev: false + + /@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2): + resolution: {integrity: sha512-YCZuBu24T9ZzEDe4+w12LEZm/fO9pkyViZufGgASC5NX93814Lvf6Ssjn/hZzjfA7CvZbvLFbmujc6CV3Q/m9Q==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + dependencies: + '@metaplex-foundation/umi': 0.9.2 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false + + /@metaplex-foundation/umi-options@0.8.9: + resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==} + + /@metaplex-foundation/umi-program-repository@0.9.2(@metaplex-foundation/umi@0.9.2): + resolution: {integrity: sha512-g3+FPqXEmYsBa8eETtUE2gb2Oe3mqac0z3/Ur1TvAg5TtIy3mzRzOy/nza+sgzejnfcxcVg835rmpBaxpBnjDA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + dependencies: + '@metaplex-foundation/umi': 0.9.2 + dev: false + + /@metaplex-foundation/umi-public-keys@0.8.9: + resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==} + dependencies: + '@metaplex-foundation/umi-serializers-encodings': 0.8.9 + + /@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2(@metaplex-foundation/umi@0.9.2): + resolution: {integrity: sha512-YRwVf6xH0jPBAUgMhEPi+UbjioAeqTXmjsN2TnmQCPAmHbrHrMRj0rlWYwFLWAgkmoxazYrXP9lqOFRrfOGAEA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + dependencies: + '@metaplex-foundation/umi': 0.9.2 + dev: false + + /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): + resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + dependencies: + '@metaplex-foundation/umi': 0.9.2 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) + '@solana/web3.js': 1.95.3 + dev: false + + /@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2): + resolution: {integrity: sha512-5vGptadJxUxvUcyrwFZxXlEc6Q7AYySBesizCtrBFUY8w8PnF2vzmS45CP1MLySEATNH6T9mD4Rs0tLb87iQyA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + dependencies: + '@metaplex-foundation/umi': 0.9.2 + dev: false + + /@metaplex-foundation/umi-serializers-core@0.8.9: + resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==} + + /@metaplex-foundation/umi-serializers-encodings@0.8.9: + resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==} + dependencies: + '@metaplex-foundation/umi-serializers-core': 0.8.9 + + /@metaplex-foundation/umi-serializers-numbers@0.8.9: + resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==} + dependencies: + '@metaplex-foundation/umi-serializers-core': 0.8.9 + + /@metaplex-foundation/umi-serializers@0.9.0: + resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==} + dependencies: + '@metaplex-foundation/umi-options': 0.8.9 + '@metaplex-foundation/umi-public-keys': 0.8.9 + '@metaplex-foundation/umi-serializers-core': 0.8.9 + '@metaplex-foundation/umi-serializers-encodings': 0.8.9 + '@metaplex-foundation/umi-serializers-numbers': 0.8.9 + + /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): + resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + dependencies: + '@metaplex-foundation/umi': 0.9.2 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) + '@solana/web3.js': 1.95.3 + dev: false + + /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): + resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + dependencies: + '@metaplex-foundation/umi': 0.9.2 + '@solana/web3.js': 1.95.3 + buffer: 6.0.3 + dev: false + + /@metaplex-foundation/umi@0.9.2: + resolution: {integrity: sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==} + dependencies: + '@metaplex-foundation/umi-options': 0.8.9 + '@metaplex-foundation/umi-public-keys': 0.8.9 + '@metaplex-foundation/umi-serializers': 0.9.0 + /@near-js/crypto@0.0.3: resolution: {integrity: sha512-3WC2A1a1cH8Cqrx+0iDjp1ASEEhxN/KHEMENYb0KZH6Hp5bXIY7Akt4quC7JlgJS5ESvEiLa40tS5h0zAhBWGw==} dependencies: From a2f7d42620f8ed9a83e765ae41d93047449654ea Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Thu, 26 Sep 2024 15:47:00 +0800 Subject: [PATCH 17/29] feat: set and verified --- extensions/puppet/client/index.ts | 70 +- extensions/puppet/package.json | 3 +- extensions/puppet/pnpm-lock.yaml | 1703 ++--------------------------- 3 files changed, 140 insertions(+), 1636 deletions(-) diff --git a/extensions/puppet/client/index.ts b/extensions/puppet/client/index.ts index dbc730e..81a34d9 100644 --- a/extensions/puppet/client/index.ts +++ b/extensions/puppet/client/index.ts @@ -9,12 +9,17 @@ import { percentAmount, createSignerFromKeypair, signerIdentity, + some, + publicKey, } from "@metaplex-foundation/umi"; -import { createUmi } from '@metaplex-foundation/umi-bundle-defaults' +import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; import { mplTokenMetadata, createNft, fetchDigitalAsset, + setAndVerifyCollection, + findMetadataPda, + findMasterEditionPda, } from "@metaplex-foundation/mpl-token-metadata"; import { getAssociatedTokenAddress, @@ -29,9 +34,9 @@ const DEPHY_ID_PROGRAM = new PublicKey( ); const DEV_RPC = "https://api.devnet.solana.com"; const SECRET_KEY = fs.readFileSync( - path.join(__dirname, '../keypair.json'), + path.join(__dirname, "../keypair.json"), "utf-8" -) +); yargs(hideBin(process.argv)) .command( @@ -43,25 +48,26 @@ yargs(hideBin(process.argv)) }, async (args) => { const umi = createUmi(DEV_RPC); - - const keypair = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(JSON.parse(SECRET_KEY))); - console.log(keypair.publicKey) + const keypair = umi.eddsa.createKeypairFromSecretKey( + new Uint8Array(JSON.parse(SECRET_KEY)) + ); + console.log(keypair.publicKey); const signer = createSignerFromKeypair(umi, keypair); - umi.use(signerIdentity(signer)) - umi.use(mplTokenMetadata()) - const mint = generateSigner(umi) + umi.use(signerIdentity(signer)).use(mplTokenMetadata()); + + const mint = generateSigner(umi); await createNft(umi, { mint, name: args.name, uri: args.url, sellerFeeBasisPoints: percentAmount(5.5), - isCollection: true - }).sendAndConfirm(umi) - - const asset = await fetchDigitalAsset(umi, mint.publicKey) + isCollection: true, + }).sendAndConfirm(umi); + + const asset = await fetchDigitalAsset(umi, mint.publicKey); console.log("mplCollection:", asset.mint.publicKey); } ) @@ -76,26 +82,44 @@ yargs(hideBin(process.argv)) }, async (args) => { const umi = createUmi(DEV_RPC); - - const keypair = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(JSON.parse(SECRET_KEY))); + + const keypair = umi.eddsa.createKeypairFromSecretKey( + new Uint8Array(JSON.parse(SECRET_KEY)) + ); const signer = createSignerFromKeypair(umi, keypair); - umi.use(signerIdentity(signer)) - umi.use(mplTokenMetadata()) - const mint = generateSigner(umi) + umi.use(signerIdentity(signer)); + umi.use(mplTokenMetadata()); + const mint = generateSigner(umi); + const collectionAuthority = generateSigner(umi); await createNft(umi, { mint, name: args.name, uri: args.url, sellerFeeBasisPoints: percentAmount(5.5), - isCollection: true - }).sendAndConfirm(umi) - - const asset = await fetchDigitalAsset(umi, mint.publicKey) - console.log("asset:", asset.publicKey) + }).sendAndConfirm(umi); + + const asset = await fetchDigitalAsset(umi, mint.publicKey); + console.log("asset:", asset.publicKey); console.log("mpl_mint:", asset.mint.publicKey); + const collectionMint = publicKey(args.collection); + const collectionMetadata = findMetadataPda(umi, { mint: collectionMint }); + + await setAndVerifyCollection(umi, { + metadata: findMetadataPda(umi, { mint: asset.mint.publicKey }), + collectionAuthority: collectionAuthority, + updateAuthority: collectionAuthority.publicKey, + collectionMint: collectionMint, + collection: collectionMetadata, + collectionMasterEditionAccount: findMasterEditionPda(umi, { + mint: collectionMint, + }), + }).sendAndConfirm(umi); + + console.log("collection verified"); + const mplAta = await getAssociatedTokenAddress( new anchor.web3.PublicKey(asset.mint.publicKey), // The mint address of the created NFT new anchor.web3.PublicKey(keypair.publicKey), // The wallet address of the NFT owner diff --git a/extensions/puppet/package.json b/extensions/puppet/package.json index b62a2ec..22cb913 100644 --- a/extensions/puppet/package.json +++ b/extensions/puppet/package.json @@ -8,9 +8,10 @@ }, "devDependencies": { "@coral-xyz/anchor": "^0.30.1", + "@metaplex-foundation/mpl-candy-machine": "^6.0.1", + "@metaplex-foundation/mpl-token-metadata": "^3.2.1", "@metaplex-foundation/umi": "^0.9.2", "@metaplex-foundation/umi-bundle-defaults": "^0.9.2", - "@metaplex-foundation/mpl-token-metadata": "^3.2.1", "@solana/spl-token": "^0.4.8", "@solana/web3.js": "^1.95.3", "@types/bn.js": "^5.1.0", diff --git a/extensions/puppet/pnpm-lock.yaml b/extensions/puppet/pnpm-lock.yaml index ac6f501..9381d2f 100644 --- a/extensions/puppet/pnpm-lock.yaml +++ b/extensions/puppet/pnpm-lock.yaml @@ -4,24 +4,22 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: +devDependencies: '@coral-xyz/anchor': specifier: ^0.30.1 version: 0.30.1 + '@metaplex-foundation/mpl-candy-machine': + specifier: ^6.0.1 + version: 6.0.1(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/mpl-token-metadata': + specifier: ^3.2.1 + version: 3.2.1(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi': specifier: ^0.9.2 version: 0.9.2 '@metaplex-foundation/umi-bundle-defaults': specifier: ^0.9.2 version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) - -devDependencies: - '@metaplex-foundation/js': - specifier: ^0.20.1 - version: 0.20.1(arweave@1.15.1)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@metaplex-foundation/mpl-token-metadata': - specifier: ^3.2.1 - version: 3.2.1(@metaplex-foundation/umi@0.9.2) '@solana/spl-token': specifier: ^0.4.8 version: 0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) @@ -69,11 +67,12 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 + dev: true /@coral-xyz/anchor-errors@0.30.1: resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} engines: {node: '>=10'} - dev: false + dev: true /@coral-xyz/anchor@0.30.1: resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} @@ -98,7 +97,7 @@ packages: - bufferutil - encoding - utf-8-validate - dev: false + dev: true /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.3): resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} @@ -109,7 +108,7 @@ packages: '@solana/web3.js': 1.95.3 bn.js: 5.2.1 buffer-layout: 1.2.2 - dev: false + dev: true /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -133,363 +132,6 @@ packages: micro-ftch: 0.3.1 dev: true - /@ethersproject/abi@5.7.0: - resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} - dependencies: - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true - - /@ethersproject/abstract-provider@5.7.0: - resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - dev: true - - /@ethersproject/abstract-signer@5.7.0: - resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - dev: true - - /@ethersproject/address@5.7.0: - resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/rlp': 5.7.0 - dev: true - - /@ethersproject/base64@5.7.0: - resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} - dependencies: - '@ethersproject/bytes': 5.7.0 - dev: true - - /@ethersproject/basex@5.7.0: - resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/properties': 5.7.0 - dev: true - - /@ethersproject/bignumber@5.7.0: - resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - bn.js: 5.2.1 - dev: true - - /@ethersproject/bytes@5.7.0: - resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} - dependencies: - '@ethersproject/logger': 5.7.0 - dev: true - - /@ethersproject/constants@5.7.0: - resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - dev: true - - /@ethersproject/contracts@5.7.0: - resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} - dependencies: - '@ethersproject/abi': 5.7.0 - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/transactions': 5.7.0 - dev: true - - /@ethersproject/hash@5.7.0: - resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true - - /@ethersproject/hdnode@5.7.0: - resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/wordlists': 5.7.0 - dev: true - - /@ethersproject/json-wallets@5.7.0: - resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - aes-js: 3.0.0 - scrypt-js: 3.0.1 - dev: true - - /@ethersproject/keccak256@5.7.0: - resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} - dependencies: - '@ethersproject/bytes': 5.7.0 - js-sha3: 0.8.0 - dev: true - - /@ethersproject/logger@5.7.0: - resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} - dev: true - - /@ethersproject/networks@5.7.1: - resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} - dependencies: - '@ethersproject/logger': 5.7.0 - dev: true - - /@ethersproject/pbkdf2@5.7.0: - resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/sha2': 5.7.0 - dev: true - - /@ethersproject/properties@5.7.0: - resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} - dependencies: - '@ethersproject/logger': 5.7.0 - dev: true - - /@ethersproject/providers@5.7.2: - resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - bech32: 1.1.4 - ws: 7.4.6 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - - /@ethersproject/random@5.7.0: - resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: true - - /@ethersproject/rlp@5.7.0: - resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: true - - /@ethersproject/sha2@5.7.0: - resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - hash.js: 1.1.7 - dev: true - - /@ethersproject/signing-key@5.7.0: - resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - bn.js: 5.2.1 - elliptic: 6.5.4 - hash.js: 1.1.7 - dev: true - - /@ethersproject/strings@5.7.0: - resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: true - - /@ethersproject/transactions@5.7.0: - resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} - dependencies: - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - dev: true - - /@ethersproject/wallet@5.7.0: - resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/json-wallets': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/wordlists': 5.7.0 - dev: true - - /@ethersproject/web@5.7.1: - resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} - dependencies: - '@ethersproject/base64': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true - - /@ethersproject/wordlists@5.7.0: - resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true - - /@irys/arweave@0.0.2(debug@4.3.7): - resolution: {integrity: sha512-ddE5h4qXbl0xfGlxrtBIwzflaxZUDlDs43TuT0u1OMfyobHul4AA1VEX72Rpzw2bOh4vzoytSqA1jCM7x9YtHg==} - dependencies: - asn1.js: 5.4.1 - async-retry: 1.3.3 - axios: 1.7.7(debug@4.3.7) - base64-js: 1.5.1 - bignumber.js: 9.1.2 - transitivePeerDependencies: - - debug - dev: true - - /@irys/query@0.0.1(debug@4.3.7): - resolution: {integrity: sha512-7TCyR+Qn+F54IQQx5PlERgqNwgIQik8hY55iZl/silTHhCo1MI2pvx5BozqPUVCc8/KqRsc2nZd8Bc29XGUjRQ==} - engines: {node: '>=16.10.0'} - dependencies: - async-retry: 1.3.3 - axios: 1.7.7(debug@4.3.7) - transitivePeerDependencies: - - debug - dev: true - - /@irys/sdk@0.0.2(arweave@1.15.1)(debug@4.3.7): - resolution: {integrity: sha512-un/e/CmTpgT042gDwCN3AtISrR9OYGMY6V+442pFmSWKrwrsDoIXZ8VlLiYKnrtTm+yquGhjfYy0LDqGWq41pA==} - engines: {node: '>=16.10.0'} - deprecated: 'Arweave support is deprecated - We recommend migrating to the Irys datachain: https://migrate-to.irys.xyz/' - hasBin: true - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/contracts': 5.7.0 - '@ethersproject/providers': 5.7.2 - '@ethersproject/wallet': 5.7.0 - '@irys/query': 0.0.1(debug@4.3.7) - '@near-js/crypto': 0.0.3 - '@near-js/keystores-browser': 0.0.3 - '@near-js/providers': 0.0.4 - '@near-js/transactions': 0.1.1 - '@solana/web3.js': 1.95.3 - '@supercharge/promise-pool': 3.2.0 - algosdk: 1.24.1 - aptos: 1.8.5(debug@4.3.7) - arbundles: 0.10.1(arweave@1.15.1)(debug@4.3.7) - async-retry: 1.3.3 - axios: 1.7.7(debug@4.3.7) - base64url: 3.0.1 - bignumber.js: 9.1.2 - bs58: 5.0.0 - commander: 8.3.0 - csv: 5.5.3 - inquirer: 8.2.6 - js-sha256: 0.9.0 - mime-types: 2.1.35 - near-seed-phrase: 0.2.1 - transitivePeerDependencies: - - arweave - - bufferutil - - debug - - encoding - - utf-8-validate - dev: true - /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -506,223 +148,25 @@ packages: '@jridgewell/sourcemap-codec': 1.5.0 dev: true - /@metaplex-foundation/beet-solana@0.3.1: - resolution: {integrity: sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==} - dependencies: - '@metaplex-foundation/beet': 0.7.1 - '@solana/web3.js': 1.95.3 - bs58: 5.0.0 - debug: 4.3.7 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - - /@metaplex-foundation/beet-solana@0.4.0: - resolution: {integrity: sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==} - dependencies: - '@metaplex-foundation/beet': 0.7.1 - '@solana/web3.js': 1.95.3 - bs58: 5.0.0 - debug: 4.3.7 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - - /@metaplex-foundation/beet-solana@0.4.1: - resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==} - dependencies: - '@metaplex-foundation/beet': 0.7.1 - '@solana/web3.js': 1.95.3 - bs58: 5.0.0 - debug: 4.3.7 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - - /@metaplex-foundation/beet@0.4.0: - resolution: {integrity: sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==} - dependencies: - ansicolors: 0.3.2 - bn.js: 5.2.1 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@metaplex-foundation/beet@0.6.1: - resolution: {integrity: sha512-OYgnijLFzw0cdUlRKH5POp0unQECPOW9muJ2X3QIVyak5G6I6l/rKo72sICgPLIFKdmsi2jmnkuLY7wp14iXdw==} - dependencies: - ansicolors: 0.3.2 - bn.js: 5.2.1 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@metaplex-foundation/beet@0.7.1: - resolution: {integrity: sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==} - dependencies: - ansicolors: 0.3.2 - bn.js: 5.2.1 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@metaplex-foundation/cusper@0.0.2: - resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} - dev: true - - /@metaplex-foundation/js@0.20.1(arweave@1.15.1)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-aqiLoEiToXdfI5pS+17/GN/dIO2D31gLoVQvEKDQi9XcnOPVhfJerXDmwgKbhp79OGoYxtlvVw+b2suacoUzGQ==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + /@metaplex-foundation/mpl-candy-machine@6.0.1(@metaplex-foundation/umi@0.9.2): + resolution: {integrity: sha512-ODm7JWQBPg7w4DXEkLejgLtMqfjxMcQkH+GSMgq9i0KyGd0asD2PVOQoL4QMorNQ4E1pIPAdc31Td57qxG059g==} + peerDependencies: + '@metaplex-foundation/umi': '>= 0.8.2 < 1' dependencies: - '@irys/sdk': 0.0.2(arweave@1.15.1)(debug@4.3.7) - '@metaplex-foundation/beet': 0.7.1 - '@metaplex-foundation/mpl-auction-house': 2.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@metaplex-foundation/mpl-bubblegum': 0.6.2(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@metaplex-foundation/mpl-candy-guard': 0.3.2 - '@metaplex-foundation/mpl-candy-machine': 5.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@metaplex-foundation/mpl-candy-machine-core': 0.1.2 - '@metaplex-foundation/mpl-token-metadata': 2.13.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@noble/ed25519': 1.7.3 + '@metaplex-foundation/mpl-token-metadata': 3.0.0-alpha.27(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/mpl-toolbox': 0.9.4(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi': 0.9.2 '@noble/hashes': 1.5.0 - '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.95.3) - '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/web3.js': 1.95.3 - bignumber.js: 9.1.2 - bn.js: 5.2.1 - bs58: 5.0.0 - buffer: 6.0.3 - debug: 4.3.7 - eventemitter3: 4.0.7 - lodash.clonedeep: 4.5.0 - lodash.isequal: 4.5.0 merkletreejs: 0.3.11 - mime: 3.0.0 - node-fetch: 2.7.0 - transitivePeerDependencies: - - arweave - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - supports-color - - typescript - - utf-8-validate - dev: true - - /@metaplex-foundation/mpl-auction-house@2.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-O+IAdYVaoOvgACB8pm+1lF5BNEjl0COkqny2Ho8KQZwka6aC/vHbZ239yRwAMtJhf5992BPFdT4oifjyE0O+Mw==} - dependencies: - '@metaplex-foundation/beet': 0.6.1 - '@metaplex-foundation/beet-solana': 0.3.1 - '@metaplex-foundation/cusper': 0.0.2 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/web3.js': 1.95.3 - bn.js: 5.2.1 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - supports-color - - typescript - - utf-8-validate dev: true - /@metaplex-foundation/mpl-bubblegum@0.6.2(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==} - dependencies: - '@metaplex-foundation/beet': 0.7.1 - '@metaplex-foundation/beet-solana': 0.4.0 - '@metaplex-foundation/cusper': 0.0.2 - '@metaplex-foundation/mpl-token-metadata': 2.13.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.95.3) - '@solana/spl-token': 0.1.8 - '@solana/web3.js': 1.95.3 - bn.js: 5.2.1 - js-sha3: 0.8.0 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - supports-color - - typescript - - utf-8-validate - dev: true - - /@metaplex-foundation/mpl-candy-guard@0.3.2: - resolution: {integrity: sha512-QWXzPDz+6OR3957LtfW6/rcGvFWS/0AeHJa/BUO2VEVQxN769dupsKGtrsS8o5RzXCeap3wrCtDSNxN3dnWu4Q==} - dependencies: - '@metaplex-foundation/beet': 0.4.0 - '@metaplex-foundation/beet-solana': 0.3.1 - '@metaplex-foundation/cusper': 0.0.2 - '@solana/web3.js': 1.95.3 - bn.js: 5.2.1 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - - /@metaplex-foundation/mpl-candy-machine-core@0.1.2: - resolution: {integrity: sha512-jjDkRvMR+iykt7guQ7qVnOHTZedql0lq3xqWDMaenAUCH3Xrf2zKATThhJppIVNX1/YtgBOO3lGqhaFbaI4pCw==} - dependencies: - '@metaplex-foundation/beet': 0.4.0 - '@metaplex-foundation/beet-solana': 0.3.1 - '@metaplex-foundation/cusper': 0.0.2 - '@solana/web3.js': 1.95.3 - bn.js: 5.2.1 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - - /@metaplex-foundation/mpl-candy-machine@5.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-pjHpUpWVOCDxK3l6dXxfmJKNQmbjBqnm5ElOl1mJAygnzO8NIPQvrP89y6xSNyo8qZsJyt4ZMYUyD0TdbtKZXQ==} - dependencies: - '@metaplex-foundation/beet': 0.7.1 - '@metaplex-foundation/beet-solana': 0.4.1 - '@metaplex-foundation/cusper': 0.0.2 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/web3.js': 1.95.3 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - supports-color - - typescript - - utf-8-validate - dev: true - - /@metaplex-foundation/mpl-token-metadata@2.13.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==} + /@metaplex-foundation/mpl-token-metadata@3.0.0-alpha.27(@metaplex-foundation/umi@0.9.2): + resolution: {integrity: sha512-MSERz5HB2XZ/K+FOMh0tPeqcZZEpGVzdy7e+Cy3MHg7x52JtbGBDtWIoxBJn1OBZayCBfX9gytEoqrXe2YRGqQ==} + peerDependencies: + '@metaplex-foundation/umi': ^0.8.2 dependencies: - '@metaplex-foundation/beet': 0.7.1 - '@metaplex-foundation/beet-solana': 0.4.1 - '@metaplex-foundation/cusper': 0.0.2 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/web3.js': 1.95.3 - bn.js: 5.2.1 - debug: 4.3.7 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - supports-color - - typescript - - utf-8-validate + '@metaplex-foundation/mpl-toolbox': 0.9.4(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi': 0.9.2 dev: true /@metaplex-foundation/mpl-token-metadata@3.2.1(@metaplex-foundation/umi@0.9.2): @@ -760,7 +204,7 @@ packages: '@solana/web3.js': 1.95.3 transitivePeerDependencies: - encoding - dev: false + dev: true /@metaplex-foundation/umi-downloader-http@0.9.2(@metaplex-foundation/umi@0.9.2): resolution: {integrity: sha512-tzPT9hBwenzTzAQg07rmsrqZfgguAXELbcJrsYMoASp5VqWFXYIP00g94KET6XLjWUXH4P1J2zoa6hGennPXHA==} @@ -768,7 +212,7 @@ packages: '@metaplex-foundation/umi': ^0.9.2 dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: false + dev: true /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} @@ -780,7 +224,7 @@ packages: '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) '@noble/curves': 1.6.0 '@solana/web3.js': 1.95.3 - dev: false + dev: true /@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2): resolution: {integrity: sha512-YCZuBu24T9ZzEDe4+w12LEZm/fO9pkyViZufGgASC5NX93814Lvf6Ssjn/hZzjfA7CvZbvLFbmujc6CV3Q/m9Q==} @@ -791,10 +235,11 @@ packages: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: false + dev: true /@metaplex-foundation/umi-options@0.8.9: resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==} + dev: true /@metaplex-foundation/umi-program-repository@0.9.2(@metaplex-foundation/umi@0.9.2): resolution: {integrity: sha512-g3+FPqXEmYsBa8eETtUE2gb2Oe3mqac0z3/Ur1TvAg5TtIy3mzRzOy/nza+sgzejnfcxcVg835rmpBaxpBnjDA==} @@ -802,12 +247,13 @@ packages: '@metaplex-foundation/umi': ^0.9.2 dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: false + dev: true /@metaplex-foundation/umi-public-keys@0.8.9: resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==} dependencies: '@metaplex-foundation/umi-serializers-encodings': 0.8.9 + dev: true /@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2(@metaplex-foundation/umi@0.9.2): resolution: {integrity: sha512-YRwVf6xH0jPBAUgMhEPi+UbjioAeqTXmjsN2TnmQCPAmHbrHrMRj0rlWYwFLWAgkmoxazYrXP9lqOFRrfOGAEA==} @@ -815,7 +261,7 @@ packages: '@metaplex-foundation/umi': ^0.9.2 dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: false + dev: true /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} @@ -826,7 +272,7 @@ packages: '@metaplex-foundation/umi': 0.9.2 '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) '@solana/web3.js': 1.95.3 - dev: false + dev: true /@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2): resolution: {integrity: sha512-5vGptadJxUxvUcyrwFZxXlEc6Q7AYySBesizCtrBFUY8w8PnF2vzmS45CP1MLySEATNH6T9mD4Rs0tLb87iQyA==} @@ -834,20 +280,23 @@ packages: '@metaplex-foundation/umi': ^0.9.2 dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: false + dev: true /@metaplex-foundation/umi-serializers-core@0.8.9: resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==} + dev: true /@metaplex-foundation/umi-serializers-encodings@0.8.9: resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==} dependencies: '@metaplex-foundation/umi-serializers-core': 0.8.9 + dev: true /@metaplex-foundation/umi-serializers-numbers@0.8.9: resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==} dependencies: '@metaplex-foundation/umi-serializers-core': 0.8.9 + dev: true /@metaplex-foundation/umi-serializers@0.9.0: resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==} @@ -857,6 +306,7 @@ packages: '@metaplex-foundation/umi-serializers-core': 0.8.9 '@metaplex-foundation/umi-serializers-encodings': 0.8.9 '@metaplex-foundation/umi-serializers-numbers': 0.8.9 + dev: true /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} @@ -867,7 +317,7 @@ packages: '@metaplex-foundation/umi': 0.9.2 '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) '@solana/web3.js': 1.95.3 - dev: false + dev: true /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} @@ -877,138 +327,15 @@ packages: dependencies: '@metaplex-foundation/umi': 0.9.2 '@solana/web3.js': 1.95.3 - buffer: 6.0.3 - dev: false - - /@metaplex-foundation/umi@0.9.2: - resolution: {integrity: sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==} - dependencies: - '@metaplex-foundation/umi-options': 0.8.9 - '@metaplex-foundation/umi-public-keys': 0.8.9 - '@metaplex-foundation/umi-serializers': 0.9.0 - - /@near-js/crypto@0.0.3: - resolution: {integrity: sha512-3WC2A1a1cH8Cqrx+0iDjp1ASEEhxN/KHEMENYb0KZH6Hp5bXIY7Akt4quC7JlgJS5ESvEiLa40tS5h0zAhBWGw==} - dependencies: - '@near-js/types': 0.0.3 - bn.js: 5.2.1 - borsh: 0.7.0 - tweetnacl: 1.0.3 - dev: true - - /@near-js/crypto@0.0.4: - resolution: {integrity: sha512-2mSIVv6mZway1rQvmkktrXAFoUvy7POjrHNH3LekKZCMCs7qMM/23Hz2+APgxZPqoV2kjarSNOEYJjxO7zQ/rQ==} - dependencies: - '@near-js/types': 0.0.4 - bn.js: 5.2.1 - borsh: 0.7.0 - tweetnacl: 1.0.3 - dev: true - - /@near-js/keystores-browser@0.0.3: - resolution: {integrity: sha512-Ve/JQ1SBxdNk3B49lElJ8Y54AoBY+yOStLvdnUIpe2FBOczzwDCkcnPcMDV0NMwVlHpEnOWICWHbRbAkI5Vs+A==} - dependencies: - '@near-js/crypto': 0.0.3 - '@near-js/keystores': 0.0.3 - dev: true - - /@near-js/keystores@0.0.3: - resolution: {integrity: sha512-mnwLYUt4Td8u1I4QE1FBx2d9hMt3ofiriE93FfOluJ4XiqRqVFakFYiHg6pExg5iEkej/sXugBUFeQ4QizUnew==} - dependencies: - '@near-js/crypto': 0.0.3 - '@near-js/types': 0.0.3 - dev: true - - /@near-js/keystores@0.0.4: - resolution: {integrity: sha512-+vKafmDpQGrz5py1liot2hYSjPGXwihveeN+BL11aJlLqZnWBgYJUWCXG+uyGjGXZORuy2hzkKK6Hi+lbKOfVA==} - dependencies: - '@near-js/crypto': 0.0.4 - '@near-js/types': 0.0.4 - dev: true - - /@near-js/providers@0.0.4: - resolution: {integrity: sha512-g/2pJTYmsIlTW4mGqeRlqDN9pZeN+1E2/wfoMIf3p++boBVxVlaSebtQgawXAf2lkfhb9RqXz5pHqewXIkTBSw==} - dependencies: - '@near-js/transactions': 0.1.0 - '@near-js/types': 0.0.3 - '@near-js/utils': 0.0.3 - bn.js: 5.2.1 - borsh: 0.7.0 - http-errors: 1.8.1 - optionalDependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: true - - /@near-js/signers@0.0.3: - resolution: {integrity: sha512-u1R+DDIua5PY1PDFnpVYqdMgQ7c4dyeZsfqMjE7CtgzdqupgTYCXzJjBubqMlAyAx843PoXmLt6CSSKcMm0WUA==} - dependencies: - '@near-js/crypto': 0.0.3 - '@near-js/keystores': 0.0.3 - js-sha256: 0.9.0 - dev: true - - /@near-js/signers@0.0.4: - resolution: {integrity: sha512-xCglo3U/WIGsz/izPGFMegS5Q3PxOHYB8a1E7RtVhNm5QdqTlQldLCm/BuMg2G/u1l1ZZ0wdvkqRTG9joauf3Q==} - dependencies: - '@near-js/crypto': 0.0.4 - '@near-js/keystores': 0.0.4 - js-sha256: 0.9.0 - dev: true - - /@near-js/transactions@0.1.0: - resolution: {integrity: sha512-OrrDFqhX0rtH+6MV3U3iS+zmzcPQI+L4GJi9na4Uf8FgpaVPF0mtSmVrpUrS5CC3LwWCzcYF833xGYbXOV4Kfg==} - dependencies: - '@near-js/crypto': 0.0.3 - '@near-js/signers': 0.0.3 - '@near-js/types': 0.0.3 - '@near-js/utils': 0.0.3 - bn.js: 5.2.1 - borsh: 0.7.0 - js-sha256: 0.9.0 - dev: true - - /@near-js/transactions@0.1.1: - resolution: {integrity: sha512-Fk83oLLFK7nz4thawpdv9bGyMVQ2i48iUtZEVYhuuuqevl17tSXMlhle9Me1ZbNyguJG/cWPdNybe1UMKpyGxA==} - dependencies: - '@near-js/crypto': 0.0.4 - '@near-js/signers': 0.0.4 - '@near-js/types': 0.0.4 - '@near-js/utils': 0.0.4 - bn.js: 5.2.1 - borsh: 0.7.0 - js-sha256: 0.9.0 - dev: true - - /@near-js/types@0.0.3: - resolution: {integrity: sha512-gC3iGUT+r2JjVsE31YharT+voat79ToMUMLCGozHjp/R/UW1M2z4hdpqTUoeWUBGBJuVc810gNTneHGx0jvzwQ==} - dependencies: - bn.js: 5.2.1 - dev: true - - /@near-js/types@0.0.4: - resolution: {integrity: sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==} - dependencies: - bn.js: 5.2.1 - dev: true - - /@near-js/utils@0.0.3: - resolution: {integrity: sha512-J72n/EL0VfLRRb4xNUF4rmVrdzMkcmkwJOhBZSTWz3PAZ8LqNeU9ZConPfMvEr6lwdaD33ZuVv70DN6IIjPr1A==} - dependencies: - '@near-js/types': 0.0.3 - bn.js: 5.2.1 - depd: 2.0.0 - mustache: 4.2.0 + buffer: 6.0.3 dev: true - /@near-js/utils@0.0.4: - resolution: {integrity: sha512-mPUEPJbTCMicGitjEGvQqOe8AS7O4KkRCxqd0xuE/X6gXF1jz1pYMZn4lNUeUz2C84YnVSGLAM0o9zcN6Y4hiA==} + /@metaplex-foundation/umi@0.9.2: + resolution: {integrity: sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==} dependencies: - '@near-js/types': 0.0.4 - bn.js: 5.2.1 - depd: 2.0.0 - mustache: 4.2.0 + '@metaplex-foundation/umi-options': 0.8.9 + '@metaplex-foundation/umi-public-keys': 0.8.9 + '@metaplex-foundation/umi-serializers': 0.9.0 dev: true /@noble/curves@1.4.2: @@ -1022,13 +349,6 @@ packages: engines: {node: ^14.21.3 || >=16} dependencies: '@noble/hashes': 1.5.0 - - /@noble/ed25519@1.7.3: - resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} - dev: true - - /@noble/hashes@1.1.3: - resolution: {integrity: sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==} dev: true /@noble/hashes@1.4.0: @@ -1039,20 +359,7 @@ packages: /@noble/hashes@1.5.0: resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} engines: {node: ^14.21.3 || >=16} - - /@randlabs/communication-bridge@1.0.1: - resolution: {integrity: sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==} - requiresBuild: true - dev: true - optional: true - - /@randlabs/myalgo-connect@1.4.2: - resolution: {integrity: sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==} - requiresBuild: true - dependencies: - '@randlabs/communication-bridge': 1.0.1 dev: true - optional: true /@scure/base@1.1.8: resolution: {integrity: sha512-6CyAclxj3Nb0XT7GHK6K4zK6k2xJm6E4Ft0Ohjt4WgegiFUHEtFb2CGzmPmGBwoIhrLsqNLYfLr04Y1GePrzZg==} @@ -1066,13 +373,6 @@ packages: '@scure/base': 1.1.8 dev: true - /@scure/bip39@1.1.0: - resolution: {integrity: sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==} - dependencies: - '@noble/hashes': 1.1.3 - '@scure/base': 1.1.8 - dev: true - /@scure/bip39@1.3.0: resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} dependencies: @@ -1099,6 +399,7 @@ packages: engines: {node: '>=5.10'} dependencies: buffer: 6.0.3 + dev: true /@solana/codecs-core@2.0.0-preview.4(typescript@4.3.5): resolution: {integrity: sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw==} @@ -1268,26 +569,6 @@ packages: - fastestsmallesttextencoderdecoder dev: true - /@solana/spl-account-compression@0.1.10(@solana/web3.js@1.95.3): - resolution: {integrity: sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.50.1 - dependencies: - '@metaplex-foundation/beet': 0.7.1 - '@metaplex-foundation/beet-solana': 0.4.1 - '@solana/web3.js': 1.95.3 - bn.js: 5.2.1 - borsh: 0.7.0 - js-sha3: 0.8.0 - typescript-collections: 1.3.3 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} engines: {node: '>=16'} @@ -1316,41 +597,6 @@ packages: - typescript dev: true - /@solana/spl-token@0.1.8: - resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==} - engines: {node: '>= 10'} - dependencies: - '@babel/runtime': 7.25.6 - '@solana/web3.js': 1.95.3 - bn.js: 5.2.1 - buffer: 6.0.3 - buffer-layout: 1.2.2 - dotenv: 10.0.0 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - - /@solana/spl-token@0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/web3.js': 1.95.3 - buffer: 6.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - typescript - - utf-8-validate - dev: true - /@solana/spl-token@0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} engines: {node: '>=16'} @@ -1400,16 +646,13 @@ packages: - bufferutil - encoding - utf-8-validate - - /@supercharge/promise-pool@3.2.0: - resolution: {integrity: sha512-pj0cAALblTZBPtMltWOlZTQSLT07jIaFNeM8TWoJD1cQMgDB9mcMlVMoetiB35OzNJpqQ2b+QEtwiR9f20mADg==} - engines: {node: '>=8'} dev: true /@swc/helpers@0.5.13: resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} dependencies: tslib: 2.7.0 + dev: true /@tsconfig/node10@1.0.11: resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} @@ -1441,6 +684,7 @@ packages: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: '@types/node': 22.5.4 + dev: true /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -1452,30 +696,31 @@ packages: resolution: {integrity: sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==} dev: true - /@types/node@11.11.6: - resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==} - dev: true - /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: true /@types/node@22.5.4: resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==} dependencies: undici-types: 6.19.8 + dev: true /@types/uuid@8.3.4: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + dev: true /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: '@types/node': 22.5.4 + dev: true /@types/ws@8.5.12: resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} dependencies: '@types/node': 22.5.4 + dev: true /@types/yargs-parser@21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -1497,6 +742,7 @@ packages: dependencies: jsonparse: 1.3.1 through: 2.3.8 + dev: true /acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} @@ -1511,37 +757,11 @@ packages: hasBin: true dev: true - /aes-js@3.0.0: - resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} - dev: true - /agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} dependencies: humanize-ms: 1.2.1 - - /algo-msgpack-with-bigint@2.1.1: - resolution: {integrity: sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==} - engines: {node: '>= 10'} - dev: true - - /algosdk@1.24.1: - resolution: {integrity: sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==} - engines: {node: '>=14.0.0'} - dependencies: - algo-msgpack-with-bigint: 2.1.1 - buffer: 6.0.3 - cross-fetch: 3.1.8 - hi-base32: 0.5.1 - js-sha256: 0.9.0 - js-sha3: 0.8.0 - js-sha512: 0.8.0 - json-bigint: 1.0.0 - tweetnacl: 1.0.3 - vlq: 2.0.4 - transitivePeerDependencies: - - encoding dev: true /ansi-colors@4.1.1: @@ -1549,13 +769,6 @@ packages: engines: {node: '>=6'} dev: true - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - dev: true - /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1568,10 +781,6 @@ packages: color-convert: 2.0.1 dev: true - /ansicolors@0.3.2: - resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} - dev: true - /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -1580,55 +789,6 @@ packages: picomatch: 2.3.1 dev: true - /aptos@1.8.5(debug@4.3.7): - resolution: {integrity: sha512-iQxliWesNHjGQ5YYXCyss9eg4+bDGQWqAZa73vprqGQ9tungK0cRjUI2fmnp63Ed6UG6rurHrL+b0ckbZAOZZQ==} - engines: {node: '>=11.0.0'} - dependencies: - '@noble/hashes': 1.1.3 - '@scure/bip39': 1.1.0 - axios: 0.27.2(debug@4.3.7) - form-data: 4.0.0 - tweetnacl: 1.0.3 - transitivePeerDependencies: - - debug - dev: true - - /arbundles@0.10.1(arweave@1.15.1)(debug@4.3.7): - resolution: {integrity: sha512-QYFepxessLCirvRkQK9iQmjxjHz+s50lMNGRwZwpyPWLohuf6ISyj1gkFXJHlMT+rNSrsHxb532glHnKbjwu3A==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/providers': 5.7.2 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/wallet': 5.7.0 - '@irys/arweave': 0.0.2(debug@4.3.7) - '@noble/ed25519': 1.7.3 - base64url: 3.0.1 - bs58: 4.0.1 - keccak: 3.0.4 - secp256k1: 5.0.0 - optionalDependencies: - '@randlabs/myalgo-connect': 1.4.2 - algosdk: 1.24.1 - arweave-stream-tx: 1.2.2(arweave@1.15.1) - multistream: 4.1.0 - tmp-promise: 3.0.3 - transitivePeerDependencies: - - arweave - - bufferutil - - debug - - encoding - - utf-8-validate - dev: true - - /arconnect@0.4.2: - resolution: {integrity: sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw==} - dependencies: - arweave: 1.15.1 - dev: true - optional: true - /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true @@ -1642,70 +802,10 @@ packages: engines: {node: '>=0.10.0'} dev: true - /arweave-stream-tx@1.2.2(arweave@1.15.1): - resolution: {integrity: sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ==} - requiresBuild: true - peerDependencies: - arweave: ^1.10.0 - dependencies: - arweave: 1.15.1 - exponential-backoff: 3.1.1 - dev: true - optional: true - - /arweave@1.15.1: - resolution: {integrity: sha512-rT7FOwqdudd5npqp4xOYdDT2035LtpcqePjwirh4wjRiEtVsz1FZkRiM2Yj+fOAwYzOm/hNG0GDOipDSaiEGGQ==} - engines: {node: '>=18'} - dependencies: - arconnect: 0.4.2 - asn1.js: 5.4.1 - base64-js: 1.5.1 - bignumber.js: 9.1.2 - dev: true - optional: true - - /asn1.js@5.4.1: - resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} - dependencies: - bn.js: 4.12.0 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - safer-buffer: 2.1.2 - dev: true - /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true - /async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - dependencies: - retry: 0.13.1 - dev: true - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true - - /axios@0.27.2(debug@4.3.7): - resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} - dependencies: - follow-redirects: 1.15.9(debug@4.3.7) - form-data: 4.0.0 - transitivePeerDependencies: - - debug - dev: true - - /axios@1.7.7(debug@4.3.7): - resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} - dependencies: - follow-redirects: 1.15.9(debug@4.3.7) - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: true - /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -1714,21 +814,10 @@ packages: resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} dependencies: safe-buffer: 5.2.1 - - /base-x@4.0.0: - resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} dev: true /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - /base64url@3.0.1: - resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} - engines: {node: '>=6.0.0'} - dev: true - - /bech32@1.1.4: - resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} dev: true /bigint-buffer@1.1.5: @@ -1737,6 +826,7 @@ packages: requiresBuild: true dependencies: bindings: 1.5.0 + dev: true /bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} @@ -1751,41 +841,15 @@ packages: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} dependencies: file-uri-to-path: 1.0.0 - - /bip39-light@1.0.7: - resolution: {integrity: sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==} - dependencies: - create-hash: 1.2.0 - pbkdf2: 3.1.2 - dev: true - - /bip39@3.0.2: - resolution: {integrity: sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==} - dependencies: - '@types/node': 11.11.6 - create-hash: 1.2.0 - pbkdf2: 3.1.2 - randombytes: 2.1.0 - dev: true - - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 dev: true /bn.js@4.11.6: resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} dev: true - /bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - dev: true - /bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: true /borsh@0.7.0: resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} @@ -1793,6 +857,7 @@ packages: bn.js: 5.2.1 bs58: 4.0.1 text-encoding-utf-8: 1.0.2 + dev: true /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -1808,10 +873,6 @@ packages: fill-range: 7.1.1 dev: true - /brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - dev: true - /browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true @@ -1820,11 +881,6 @@ packages: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} dependencies: base-x: 3.0.10 - - /bs58@5.0.0: - resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} - dependencies: - base-x: 4.0.0 dev: true /buffer-from@1.1.2: @@ -1834,23 +890,18 @@ packages: /buffer-layout@1.2.2: resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} engines: {node: '>=4.5'} + dev: true /buffer-reverse@1.0.1: resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} dev: true - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - /buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: true /bufferutil@4.0.8: resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} @@ -1858,10 +909,12 @@ packages: requiresBuild: true dependencies: node-gyp-build: 4.8.2 + dev: true /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} + dev: true /chai@4.3.4: resolution: {integrity: sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==} @@ -1888,10 +941,6 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true - /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -1913,30 +962,6 @@ packages: fsevents: 2.3.3 dev: true - /cipher-base@1.0.4: - resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true - - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - dev: true - - /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true - /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: @@ -1954,11 +979,6 @@ packages: wrap-ansi: 7.0.0 dev: true - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true - /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1970,13 +990,6 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: true - /commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -1984,37 +997,12 @@ packages: /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - /commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} dev: true /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} - dependencies: - cipher-base: 1.0.4 - inherits: 2.0.4 - md5.js: 1.3.5 - ripemd160: 2.0.2 - sha.js: 2.4.11 - dev: true - - /create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} - dependencies: - cipher-base: 1.0.4 - create-hash: 1.2.0 - inherits: 2.0.4 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true @@ -2025,38 +1013,17 @@ packages: node-fetch: 2.7.0 transitivePeerDependencies: - encoding + dev: true /crypto-hash@1.3.0: resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} engines: {node: '>=8'} - dev: false + dev: true /crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} dev: true - /csv-generate@3.4.3: - resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} - dev: true - - /csv-parse@4.16.3: - resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} - dev: true - - /csv-stringify@5.6.5: - resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} - dev: true - - /csv@5.5.3: - resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} - engines: {node: '>= 0.1.90'} - dependencies: - csv-generate: 3.4.3 - csv-parse: 4.16.3 - csv-stringify: 5.6.5 - stream-transform: 2.1.3 - dev: true - /debug@4.3.3(supports-color@8.1.1): resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} @@ -2070,18 +1037,6 @@ packages: supports-color: 8.1.1 dev: true - /debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true - /decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -2094,29 +1049,9 @@ packages: type-detect: 4.1.0 dev: true - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - dependencies: - clone: 1.0.4 - dev: true - /delay@5.0.0: resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} engines: {node: '>=10'} - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true - - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: true - - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} dev: true /diff@3.5.0: @@ -2139,35 +1074,6 @@ packages: dependencies: no-case: 3.0.4 tslib: 2.7.0 - dev: false - - /dotenv@10.0.0: - resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} - engines: {node: '>=10'} - dev: true - - /elliptic@6.5.4: - resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - - /elliptic@6.5.7: - resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==} - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 dev: true /emoji-regex@8.0.0: @@ -2176,22 +1082,19 @@ packages: /es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: true /es6-promisify@5.0.0: resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} dependencies: es6-promise: 4.2.8 + dev: true /escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} dev: true - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -2222,45 +1125,28 @@ packages: /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - - /exponential-backoff@3.1.1: - resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} - requiresBuild: true dev: true - optional: true - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} dev: true /eyes@0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} engines: {node: '> 0.1.90'} + dev: true /fast-stable-stringify@1.0.0: resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + dev: true /fastestsmallesttextencoderdecoder@1.0.22: resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} dev: true - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - /file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: true /fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -2282,27 +1168,6 @@ packages: hasBin: true dev: true - /follow-redirects@1.15.9(debug@4.3.7): - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dependencies: - debug: 4.3.7 - dev: true - - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true - /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -2353,64 +1218,20 @@ packages: engines: {node: '>=8'} dev: true - /hash-base@3.1.0: - resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} - engines: {node: '>=4'} - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.2 - safe-buffer: 5.2.1 - dev: true - - /hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true dev: true - /hi-base32@0.5.1: - resolution: {integrity: sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==} - dev: true - - /hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} - dependencies: - hash.js: 1.1.7 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - - /http-errors@1.8.1: - resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 1.5.0 - toidentifier: 1.0.1 - dev: true - /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: ms: 2.1.3 - - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 dev: true /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} @@ -2424,27 +1245,6 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /inquirer@8.2.6: - resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} - engines: {node: '>=12.0.0'} - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - ora: 5.4.1 - run-async: 2.4.1 - rxjs: 7.8.1 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - wrap-ansi: 6.2.0 - dev: true - /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -2474,11 +1274,6 @@ packages: engines: {node: '>=6.5.0', npm: '>=3'} dev: true - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true - /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -2504,6 +1299,7 @@ packages: ws: '*' dependencies: ws: 7.5.10 + dev: true /jayson@4.1.2: resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==} @@ -2525,17 +1321,6 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - - /js-sha256@0.9.0: - resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} - dev: true - - /js-sha3@0.8.0: - resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} - dev: true - - /js-sha512@0.8.0: - resolution: {integrity: sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==} dev: true /js-yaml@4.1.0: @@ -2545,14 +1330,9 @@ packages: argparse: 2.0.1 dev: true - /json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - dependencies: - bignumber.js: 9.1.2 - dev: true - /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: true /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} @@ -2566,15 +1346,6 @@ packages: /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} - - /keccak@3.0.4: - resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} - engines: {node: '>=10.0.0'} - requiresBuild: true - dependencies: - node-addon-api: 2.0.2 - node-gyp-build: 4.8.2 - readable-stream: 3.6.2 dev: true /locate-path@6.0.0: @@ -2584,18 +1355,6 @@ packages: p-locate: 5.0.0 dev: true - /lodash.clonedeep@4.5.0: - resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} - dev: true - - /lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - dev: true - - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true - /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -2608,20 +1367,12 @@ packages: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: tslib: 2.7.0 - dev: false + dev: true /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - /merkletreejs@0.3.11: resolution: {integrity: sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==} engines: {node: '>= 7.6.0'} @@ -2637,37 +1388,6 @@ packages: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: true - - /mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - dev: true - - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true - - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: true - - /minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - dev: true - /minimatch@3.0.4: resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} dependencies: @@ -2685,11 +1405,6 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /mixme@0.5.10: - resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} - engines: {node: '>= 8.0.0'} - dev: true - /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -2734,23 +1449,6 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - /multistream@4.1.0: - resolution: {integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==} - requiresBuild: true - dependencies: - once: 1.4.0 - readable-stream: 3.6.2 - dev: true - optional: true - - /mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - dev: true - - /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} dev: true /nanoid@3.3.1: @@ -2759,36 +1457,11 @@ packages: hasBin: true dev: true - /near-hd-key@1.2.1: - resolution: {integrity: sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==} - dependencies: - bip39: 3.0.2 - create-hmac: 1.1.7 - tweetnacl: 1.0.3 - dev: true - - /near-seed-phrase@0.2.1: - resolution: {integrity: sha512-feMuums+kVL3LSuPcP4ld07xHCb2mu6z48SGfP3W+8tl1Qm5xIcjiQzY2IDPBvFgajRDxWSb8GzsRHoInazByw==} - dependencies: - bip39-light: 1.0.7 - bs58: 4.0.1 - near-hd-key: 1.2.1 - tweetnacl: 1.0.3 - dev: true - /no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 tslib: 2.7.0 - dev: false - - /node-addon-api@2.0.2: - resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} - dev: true - - /node-addon-api@5.1.0: - resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} dev: true /node-fetch@2.7.0: @@ -2801,11 +1474,13 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 + dev: true /node-gyp-build@4.8.2: resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} hasBin: true requiresBuild: true + dev: true /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -2826,33 +1501,6 @@ packages: wrappy: 1.0.2 dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: true - - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - dev: true - - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true - /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2869,7 +1517,7 @@ packages: /pako@2.1.0: resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - dev: false + dev: true /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} @@ -2885,17 +1533,6 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true - /pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} - engines: {node: '>=0.12'} - dependencies: - create-hash: 1.2.0 - create-hmac: 1.1.7 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -2907,25 +1544,12 @@ packages: hasBin: true dev: true - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: true - /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true - /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -2935,32 +1559,13 @@ packages: /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: true /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - dev: true - - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: true - - /ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - dev: true - /rpc-websockets@9.0.2: resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==} dependencies: @@ -2974,37 +1579,10 @@ packages: optionalDependencies: bufferutil: 4.0.8 utf-8-validate: 5.0.10 - - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true - - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - dependencies: - tslib: 2.7.0 dev: true /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - - /scrypt-js@3.0.1: - resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} - dev: true - - /secp256k1@5.0.0: - resolution: {integrity: sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==} - engines: {node: '>=14.0.0'} - requiresBuild: true - dependencies: - elliptic: 6.5.7 - node-addon-api: 5.1.0 - node-gyp-build: 4.8.2 dev: true /serialize-javascript@6.0.0: @@ -3013,28 +1591,12 @@ packages: randombytes: 2.1.0 dev: true - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true - - /sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true - /snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: dot-case: 3.0.4 tslib: 2.7.0 - dev: false + dev: true /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -3048,17 +1610,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: true - - /stream-transform@2.1.3: - resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} - dependencies: - mixme: 0.5.10 - dev: true - /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3068,13 +1619,6 @@ packages: strip-ansi: 6.0.1 dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - requiresBuild: true - dependencies: - safe-buffer: 5.2.1 - dev: true - /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3103,11 +1647,12 @@ packages: /superstruct@0.15.5: resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} - dev: false + dev: true /superstruct@2.0.2: resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} engines: {node: '>=14.0.0'} + dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -3125,32 +1670,12 @@ packages: /text-encoding-utf-8@1.0.2: resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + dev: true /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - /tmp-promise@3.0.3: - resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - requiresBuild: true - dependencies: - tmp: 0.2.3 - dev: true - optional: true - - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - dependencies: - os-tmpdir: 1.0.2 dev: true - /tmp@0.2.3: - resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} - engines: {node: '>=14.14'} - requiresBuild: true - dev: true - optional: true - /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3158,17 +1683,13 @@ packages: is-number: 7.0.0 dev: true - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true - /toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - dev: false + dev: true /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true /treeify@1.1.0: resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} @@ -3247,9 +1768,6 @@ packages: /tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - - /tweetnacl@1.0.3: - resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} dev: true /type-detect@4.1.0: @@ -3257,15 +1775,6 @@ packages: engines: {node: '>=4'} dev: true - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true - - /typescript-collections@1.3.3: - resolution: {integrity: sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==} - dev: true - /typescript@4.3.5: resolution: {integrity: sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==} engines: {node: '>=4.2.0'} @@ -3274,6 +1783,7 @@ packages: /undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + dev: true /utf-8-validate@5.0.10: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} @@ -3281,34 +1791,21 @@ packages: requiresBuild: true dependencies: node-gyp-build: 4.8.2 + dev: true /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} dev: true - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - requiresBuild: true - dev: true - /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + dev: true /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /vlq@2.0.4: - resolution: {integrity: sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==} - dev: true - - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - dependencies: - defaults: 1.0.4 - dev: true - /web3-utils@1.10.4: resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} engines: {node: '>=8.0.0'} @@ -3325,12 +1822,14 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 + dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -3344,15 +1843,6 @@ packages: resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} dev: true - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -3366,19 +1856,6 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /ws@7.4.6: - resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - /ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -3390,6 +1867,7 @@ packages: optional: true utf-8-validate: optional: true + dev: true /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} @@ -3405,6 +1883,7 @@ packages: dependencies: bufferutil: 4.0.8 utf-8-validate: 5.0.10 + dev: true /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} From 496d35a831bb1ecbacb1fa8dd24a4c25ffd73d02 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Thu, 26 Sep 2024 18:57:19 +0800 Subject: [PATCH 18/29] =?UTF-8?q?fix:=20setAndVerify=20collection=EF=BC=8C?= =?UTF-8?q?spl2022=20program?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extensions/puppet/client/index.ts | 9 +- extensions/puppet/package.json | 3 +- extensions/puppet/pnpm-lock.yaml | 1952 ----------------- .../puppet/programs/puppet/src/constants.rs | 3 +- .../puppet/programs/puppet/src/errors.rs | 13 +- .../programs/puppet/src/instructions/bind.rs | 20 +- .../src/instructions/bind_collection.rs | 17 +- 7 files changed, 14 insertions(+), 2003 deletions(-) delete mode 100644 extensions/puppet/pnpm-lock.yaml diff --git a/extensions/puppet/client/index.ts b/extensions/puppet/client/index.ts index 81a34d9..4ed6130 100644 --- a/extensions/puppet/client/index.ts +++ b/extensions/puppet/client/index.ts @@ -9,8 +9,8 @@ import { percentAmount, createSignerFromKeypair, signerIdentity, - some, publicKey, + none, } from "@metaplex-foundation/umi"; import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; import { @@ -61,10 +61,12 @@ yargs(hideBin(process.argv)) const mint = generateSigner(umi); await createNft(umi, { mint, + authority: signer, name: args.name, uri: args.url, sellerFeeBasisPoints: percentAmount(5.5), isCollection: true, + collectionDetails: none(), }).sendAndConfirm(umi); const asset = await fetchDigitalAsset(umi, mint.publicKey); @@ -78,7 +80,6 @@ yargs(hideBin(process.argv)) collection: { type: "string", demandOption: true }, url: { type: "string", demandOption: true }, name: { type: "string", demandOption: true }, - privatekey: { type: "string", demandOption: true }, }, async (args) => { const umi = createUmi(DEV_RPC); @@ -92,7 +93,6 @@ yargs(hideBin(process.argv)) umi.use(signerIdentity(signer)); umi.use(mplTokenMetadata()); const mint = generateSigner(umi); - const collectionAuthority = generateSigner(umi); await createNft(umi, { mint, name: args.name, @@ -109,8 +109,7 @@ yargs(hideBin(process.argv)) await setAndVerifyCollection(umi, { metadata: findMetadataPda(umi, { mint: asset.mint.publicKey }), - collectionAuthority: collectionAuthority, - updateAuthority: collectionAuthority.publicKey, + collectionAuthority: signer, collectionMint: collectionMint, collection: collectionMetadata, collectionMasterEditionAccount: findMasterEditionPda(umi, { diff --git a/extensions/puppet/package.json b/extensions/puppet/package.json index 22cb913..f740802 100644 --- a/extensions/puppet/package.json +++ b/extensions/puppet/package.json @@ -4,11 +4,10 @@ "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check", "test": "ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts", - "cli": "ts-node ./client/index.ts" + "cli": "bun run ./client/index.ts" }, "devDependencies": { "@coral-xyz/anchor": "^0.30.1", - "@metaplex-foundation/mpl-candy-machine": "^6.0.1", "@metaplex-foundation/mpl-token-metadata": "^3.2.1", "@metaplex-foundation/umi": "^0.9.2", "@metaplex-foundation/umi-bundle-defaults": "^0.9.2", diff --git a/extensions/puppet/pnpm-lock.yaml b/extensions/puppet/pnpm-lock.yaml deleted file mode 100644 index 9381d2f..0000000 --- a/extensions/puppet/pnpm-lock.yaml +++ /dev/null @@ -1,1952 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -devDependencies: - '@coral-xyz/anchor': - specifier: ^0.30.1 - version: 0.30.1 - '@metaplex-foundation/mpl-candy-machine': - specifier: ^6.0.1 - version: 6.0.1(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/mpl-token-metadata': - specifier: ^3.2.1 - version: 3.2.1(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi': - specifier: ^0.9.2 - version: 0.9.2 - '@metaplex-foundation/umi-bundle-defaults': - specifier: ^0.9.2 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) - '@solana/spl-token': - specifier: ^0.4.8 - version: 0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/web3.js': - specifier: ^1.95.3 - version: 1.95.3 - '@types/bn.js': - specifier: ^5.1.0 - version: 5.1.0 - '@types/chai': - specifier: ^4.3.0 - version: 4.3.0 - '@types/mocha': - specifier: ^9.0.0 - version: 9.0.0 - '@types/yargs': - specifier: ^17.0.33 - version: 17.0.33 - chai: - specifier: ^4.3.4 - version: 4.3.4 - mocha: - specifier: ^9.2.2 - version: 9.2.2 - prettier: - specifier: ^2.6.2 - version: 2.6.2 - ts-mocha: - specifier: ^10.0.0 - version: 10.0.0(mocha@9.2.2) - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@22.5.4)(typescript@4.3.5) - typescript: - specifier: ^4.3.5 - version: 4.3.5 - yargs: - specifier: ^17.7.2 - version: 17.7.2 - -packages: - - /@babel/runtime@7.25.6: - resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: true - - /@coral-xyz/anchor-errors@0.30.1: - resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} - engines: {node: '>=10'} - dev: true - - /@coral-xyz/anchor@0.30.1: - resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} - engines: {node: '>=11'} - dependencies: - '@coral-xyz/anchor-errors': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.3) - '@noble/hashes': 1.5.0 - '@solana/web3.js': 1.95.3 - bn.js: 5.2.1 - bs58: 4.0.1 - buffer-layout: 1.2.2 - camelcase: 6.3.0 - cross-fetch: 3.1.8 - crypto-hash: 1.3.0 - eventemitter3: 4.0.7 - pako: 2.1.0 - snake-case: 3.0.4 - superstruct: 0.15.5 - toml: 3.0.0 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - - /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.3): - resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} - engines: {node: '>=10'} - peerDependencies: - '@solana/web3.js': ^1.68.0 - dependencies: - '@solana/web3.js': 1.95.3 - bn.js: 5.2.1 - buffer-layout: 1.2.2 - dev: true - - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - - /@ethereumjs/rlp@4.0.1: - resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} - engines: {node: '>=14'} - hasBin: true - dev: true - - /@ethereumjs/util@8.1.0: - resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} - engines: {node: '>=14'} - dependencies: - '@ethereumjs/rlp': 4.0.1 - ethereum-cryptography: 2.2.1 - micro-ftch: 0.3.1 - dev: true - - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/sourcemap-codec@1.5.0: - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - dev: true - - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - dev: true - - /@metaplex-foundation/mpl-candy-machine@6.0.1(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-ODm7JWQBPg7w4DXEkLejgLtMqfjxMcQkH+GSMgq9i0KyGd0asD2PVOQoL4QMorNQ4E1pIPAdc31Td57qxG059g==} - peerDependencies: - '@metaplex-foundation/umi': '>= 0.8.2 < 1' - dependencies: - '@metaplex-foundation/mpl-token-metadata': 3.0.0-alpha.27(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/mpl-toolbox': 0.9.4(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi': 0.9.2 - '@noble/hashes': 1.5.0 - merkletreejs: 0.3.11 - dev: true - - /@metaplex-foundation/mpl-token-metadata@3.0.0-alpha.27(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-MSERz5HB2XZ/K+FOMh0tPeqcZZEpGVzdy7e+Cy3MHg7x52JtbGBDtWIoxBJn1OBZayCBfX9gytEoqrXe2YRGqQ==} - peerDependencies: - '@metaplex-foundation/umi': ^0.8.2 - dependencies: - '@metaplex-foundation/mpl-toolbox': 0.9.4(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi': 0.9.2 - dev: true - - /@metaplex-foundation/mpl-token-metadata@3.2.1(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-26W1NhQwDWmLOg/pBRYut7x/vEs/5kFS2sWVEY5/X0f2jJOLhnd4NaZQcq+5u+XZsXvm1jq2AtrRGPNK43oqWQ==} - peerDependencies: - '@metaplex-foundation/umi': '>= 0.8.2 < 1' - dependencies: - '@metaplex-foundation/mpl-toolbox': 0.9.4(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi': 0.9.2 - dev: true - - /@metaplex-foundation/mpl-toolbox@0.9.4(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-fd6JxfoLbj/MM8FG2x91KYVy1U6AjBQw4qjt7+Da3trzQaWnSaYHDcYRG/53xqfvZ9qofY1T2t53GXPlD87lnQ==} - peerDependencies: - '@metaplex-foundation/umi': '>= 0.8.2 < 1' - dependencies: - '@metaplex-foundation/umi': 0.9.2 - dev: true - - /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): - resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) - '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) - '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) - '@solana/web3.js': 1.95.3 - transitivePeerDependencies: - - encoding - dev: true - - /@metaplex-foundation/umi-downloader-http@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-tzPT9hBwenzTzAQg07rmsrqZfgguAXELbcJrsYMoASp5VqWFXYIP00g94KET6XLjWUXH4P1J2zoa6hGennPXHA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - dev: true - - /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): - resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) - '@noble/curves': 1.6.0 - '@solana/web3.js': 1.95.3 - dev: true - - /@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-YCZuBu24T9ZzEDe4+w12LEZm/fO9pkyViZufGgASC5NX93814Lvf6Ssjn/hZzjfA7CvZbvLFbmujc6CV3Q/m9Q==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: true - - /@metaplex-foundation/umi-options@0.8.9: - resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==} - dev: true - - /@metaplex-foundation/umi-program-repository@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-g3+FPqXEmYsBa8eETtUE2gb2Oe3mqac0z3/Ur1TvAg5TtIy3mzRzOy/nza+sgzejnfcxcVg835rmpBaxpBnjDA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - dev: true - - /@metaplex-foundation/umi-public-keys@0.8.9: - resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==} - dependencies: - '@metaplex-foundation/umi-serializers-encodings': 0.8.9 - dev: true - - /@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-YRwVf6xH0jPBAUgMhEPi+UbjioAeqTXmjsN2TnmQCPAmHbrHrMRj0rlWYwFLWAgkmoxazYrXP9lqOFRrfOGAEA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - dev: true - - /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): - resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) - '@solana/web3.js': 1.95.3 - dev: true - - /@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-5vGptadJxUxvUcyrwFZxXlEc6Q7AYySBesizCtrBFUY8w8PnF2vzmS45CP1MLySEATNH6T9mD4Rs0tLb87iQyA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - dev: true - - /@metaplex-foundation/umi-serializers-core@0.8.9: - resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==} - dev: true - - /@metaplex-foundation/umi-serializers-encodings@0.8.9: - resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==} - dependencies: - '@metaplex-foundation/umi-serializers-core': 0.8.9 - dev: true - - /@metaplex-foundation/umi-serializers-numbers@0.8.9: - resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==} - dependencies: - '@metaplex-foundation/umi-serializers-core': 0.8.9 - dev: true - - /@metaplex-foundation/umi-serializers@0.9.0: - resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==} - dependencies: - '@metaplex-foundation/umi-options': 0.8.9 - '@metaplex-foundation/umi-public-keys': 0.8.9 - '@metaplex-foundation/umi-serializers-core': 0.8.9 - '@metaplex-foundation/umi-serializers-encodings': 0.8.9 - '@metaplex-foundation/umi-serializers-numbers': 0.8.9 - dev: true - - /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): - resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3) - '@solana/web3.js': 1.95.3 - dev: true - - /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.3): - resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - '@solana/web3.js': 1.95.3 - buffer: 6.0.3 - dev: true - - /@metaplex-foundation/umi@0.9.2: - resolution: {integrity: sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==} - dependencies: - '@metaplex-foundation/umi-options': 0.8.9 - '@metaplex-foundation/umi-public-keys': 0.8.9 - '@metaplex-foundation/umi-serializers': 0.9.0 - dev: true - - /@noble/curves@1.4.2: - resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} - dependencies: - '@noble/hashes': 1.4.0 - dev: true - - /@noble/curves@1.6.0: - resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} - engines: {node: ^14.21.3 || >=16} - dependencies: - '@noble/hashes': 1.5.0 - dev: true - - /@noble/hashes@1.4.0: - resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} - engines: {node: '>= 16'} - dev: true - - /@noble/hashes@1.5.0: - resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} - engines: {node: ^14.21.3 || >=16} - dev: true - - /@scure/base@1.1.8: - resolution: {integrity: sha512-6CyAclxj3Nb0XT7GHK6K4zK6k2xJm6E4Ft0Ohjt4WgegiFUHEtFb2CGzmPmGBwoIhrLsqNLYfLr04Y1GePrzZg==} - dev: true - - /@scure/bip32@1.4.0: - resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} - dependencies: - '@noble/curves': 1.4.2 - '@noble/hashes': 1.4.0 - '@scure/base': 1.1.8 - dev: true - - /@scure/bip39@1.3.0: - resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} - dependencies: - '@noble/hashes': 1.4.0 - '@scure/base': 1.1.8 - dev: true - - /@solana/buffer-layout-utils@0.2.0: - resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} - engines: {node: '>= 10'} - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.3 - bigint-buffer: 1.1.5 - bignumber.js: 9.1.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - - /@solana/buffer-layout@4.0.1: - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} - dependencies: - buffer: 6.0.3 - dev: true - - /@solana/codecs-core@2.0.0-preview.4(typescript@4.3.5): - resolution: {integrity: sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) - typescript: 4.3.5 - dev: true - - /@solana/codecs-core@2.0.0-rc.1(typescript@4.3.5): - resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) - typescript: 4.3.5 - dev: true - - /@solana/codecs-data-structures@2.0.0-preview.4(typescript@4.3.5): - resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) - typescript: 4.3.5 - dev: true - - /@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.3.5): - resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) - typescript: 4.3.5 - dev: true - - /@solana/codecs-numbers@2.0.0-preview.4(typescript@4.3.5): - resolution: {integrity: sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) - typescript: 4.3.5 - dev: true - - /@solana/codecs-numbers@2.0.0-rc.1(typescript@4.3.5): - resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) - typescript: 4.3.5 - dev: true - - /@solana/codecs-strings@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 4.3.5 - dev: true - - /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 4.3.5 - dev: true - - /@solana/codecs@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/options': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - typescript: 4.3.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: true - - /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - typescript: 4.3.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: true - - /@solana/errors@2.0.0-preview.4(typescript@4.3.5): - resolution: {integrity: sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA==} - hasBin: true - peerDependencies: - typescript: '>=5' - dependencies: - chalk: 5.3.0 - commander: 12.1.0 - typescript: 4.3.5 - dev: true - - /@solana/errors@2.0.0-rc.1(typescript@4.3.5): - resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} - hasBin: true - peerDependencies: - typescript: '>=5' - dependencies: - chalk: 5.3.0 - commander: 12.1.0 - typescript: 4.3.5 - dev: true - - /@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.3.5) - '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.3.5) - typescript: 4.3.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: true - - /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.3.5) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.3.5) - typescript: 4.3.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: true - - /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.94.0 - dependencies: - '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - dev: true - - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.95.3 - dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - dev: true - - /@solana/spl-token@0.4.8(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5): - resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.94.0 - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.3.5) - '@solana/web3.js': 1.95.3 - buffer: 6.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - typescript - - utf-8-validate - dev: true - - /@solana/spl-type-length-value@0.1.0: - resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} - engines: {node: '>=16'} - dependencies: - buffer: 6.0.3 - dev: true - - /@solana/web3.js@1.95.3: - resolution: {integrity: sha512-O6rPUN0w2fkNqx/Z3QJMB9L225Ex10PRDH8bTaIUPZXMPV0QP8ZpPvjQnXK+upUczlRgzHzd6SjKIha1p+I6og==} - dependencies: - '@babel/runtime': 7.25.6 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.2 - node-fetch: 2.7.0 - rpc-websockets: 9.0.2 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - - /@swc/helpers@0.5.13: - resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} - dependencies: - tslib: 2.7.0 - dev: true - - /@tsconfig/node10@1.0.11: - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - dev: true - - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true - - /@types/bn.js@5.1.0: - resolution: {integrity: sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==} - dependencies: - '@types/node': 22.5.4 - dev: true - - /@types/chai@4.3.0: - resolution: {integrity: sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==} - dev: true - - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 22.5.4 - dev: true - - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - requiresBuild: true - dev: true - optional: true - - /@types/mocha@9.0.0: - resolution: {integrity: sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==} - dev: true - - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: true - - /@types/node@22.5.4: - resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==} - dependencies: - undici-types: 6.19.8 - dev: true - - /@types/uuid@8.3.4: - resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} - dev: true - - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} - dependencies: - '@types/node': 22.5.4 - dev: true - - /@types/ws@8.5.12: - resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} - dependencies: - '@types/node': 22.5.4 - dev: true - - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: true - - /@types/yargs@17.0.33: - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - - /@ungap/promise-all-settled@1.1.2: - resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} - dev: true - - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: true - - /acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - dependencies: - acorn: 8.12.1 - dev: true - - /acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} - dependencies: - humanize-ms: 1.2.1 - dev: true - - /ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true - - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /base-x@3.0.10: - resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - - /bigint-buffer@1.1.5: - resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} - engines: {node: '>= 10.0.0'} - requiresBuild: true - dependencies: - bindings: 1.5.0 - dev: true - - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: true - - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - dev: true - - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - dependencies: - file-uri-to-path: 1.0.0 - dev: true - - /bn.js@4.11.6: - resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} - dev: true - - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: true - - /borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} - dependencies: - bn.js: 5.2.1 - bs58: 4.0.1 - text-encoding-utf-8: 1.0.2 - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.1.1 - dev: true - - /browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - dev: true - - /bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} - dependencies: - base-x: 3.0.10 - dev: true - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true - - /buffer-layout@1.2.2: - resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} - engines: {node: '>=4.5'} - dev: true - - /buffer-reverse@1.0.1: - resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} - dev: true - - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - - /bufferutil@4.0.8: - resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} - engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.2 - dev: true - - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true - - /chai@4.3.4: - resolution: {integrity: sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==} - engines: {node: '>=4'} - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 3.0.1 - get-func-name: 2.0.2 - pathval: 1.1.1 - type-detect: 4.1.0 - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - dependencies: - get-func-name: 2.0.2 - dev: true - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - dev: true - - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - - /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: true - - /crypto-hash@1.3.0: - resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} - engines: {node: '>=8'} - dev: true - - /crypto-js@4.2.0: - resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} - dev: true - - /debug@4.3.3(supports-color@8.1.1): - resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - supports-color: 8.1.1 - dev: true - - /decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - dev: true - - /deep-eql@3.0.1: - resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} - engines: {node: '>=0.12'} - dependencies: - type-detect: 4.1.0 - dev: true - - /delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} - dev: true - - /diff@3.5.0: - resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} - engines: {node: '>=0.3.1'} - dev: true - - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - - /diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - dev: true - - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.7.0 - dev: true - - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true - - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - dev: true - - /es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} - dependencies: - es6-promise: 4.2.8 - dev: true - - /escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /ethereum-bloom-filters@1.2.0: - resolution: {integrity: sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==} - dependencies: - '@noble/hashes': 1.5.0 - dev: true - - /ethereum-cryptography@2.2.1: - resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} - dependencies: - '@noble/curves': 1.4.2 - '@noble/hashes': 1.4.0 - '@scure/bip32': 1.4.0 - '@scure/bip39': 1.3.0 - dev: true - - /ethjs-unit@0.1.6: - resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} - engines: {node: '>=6.5.0', npm: '>=3'} - dependencies: - bn.js: 4.11.6 - number-to-bn: 1.7.0 - dev: true - - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true - - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true - - /eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} - dev: true - - /fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - dev: true - - /fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - dev: true - - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - dev: true - - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true - - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} - deprecated: Glob versions prior to v9 are no longer supported - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.0.4 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /growl@1.10.5: - resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} - engines: {node: '>=4.x'} - dev: true - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true - - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - dependencies: - ms: 2.1.3 - dev: true - - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.3.0 - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-hex-prefixed@1.0.0: - resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} - engines: {node: '>=6.5.0', npm: '>=3'} - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: true - - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - - /isomorphic-ws@4.0.1(ws@7.5.10): - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' - dependencies: - ws: 7.5.10 - dev: true - - /jayson@4.1.2: - resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@types/connect': 3.4.38 - '@types/node': 12.20.55 - '@types/ws': 7.4.7 - JSONStream: 1.3.5 - commander: 2.20.3 - delay: 5.0.0 - es6-promisify: 5.0.0 - eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.10) - json-stringify-safe: 5.0.1 - uuid: 8.3.2 - ws: 7.5.10 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: true - - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - requiresBuild: true - dependencies: - minimist: 1.2.8 - dev: true - optional: true - - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - dev: true - - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.7.0 - dev: true - - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - - /merkletreejs@0.3.11: - resolution: {integrity: sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==} - engines: {node: '>= 7.6.0'} - dependencies: - bignumber.js: 9.1.2 - buffer-reverse: 1.0.1 - crypto-js: 4.2.0 - treeify: 1.1.0 - web3-utils: 1.10.4 - dev: true - - /micro-ftch@0.3.1: - resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} - dev: true - - /minimatch@3.0.4: - resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimatch@4.2.1: - resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - - /mocha@9.2.2: - resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} - engines: {node: '>= 12.0.0'} - hasBin: true - dependencies: - '@ungap/promise-all-settled': 1.1.2 - ansi-colors: 4.1.1 - browser-stdout: 1.3.1 - chokidar: 3.5.3 - debug: 4.3.3(supports-color@8.1.1) - diff: 5.0.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 7.2.0 - growl: 1.10.5 - he: 1.2.0 - js-yaml: 4.1.0 - log-symbols: 4.1.0 - minimatch: 4.2.1 - ms: 2.1.3 - nanoid: 3.3.1 - serialize-javascript: 6.0.0 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - which: 2.0.2 - workerpool: 6.2.0 - yargs: 16.2.0 - yargs-parser: 20.2.4 - yargs-unparser: 2.0.0 - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true - - /nanoid@3.3.1: - resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.7.0 - dev: true - - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: true - - /node-gyp-build@4.8.2: - resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} - hasBin: true - requiresBuild: true - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /number-to-bn@1.7.0: - resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} - engines: {node: '>=6.5.0', npm: '>=3'} - dependencies: - bn.js: 4.11.6 - strip-hex-prefix: 1.0.0 - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - - /pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - dev: true - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - - /prettier@2.6.2: - resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true - - /rpc-websockets@9.0.2: - resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==} - dependencies: - '@swc/helpers': 0.5.13 - '@types/uuid': 8.3.4 - '@types/ws': 8.5.12 - buffer: 6.0.3 - eventemitter3: 5.0.1 - uuid: 8.3.2 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - optionalDependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 - dev: true - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true - - /serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} - dependencies: - randombytes: 2.1.0 - dev: true - - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - dependencies: - dot-case: 3.0.4 - tslib: 2.7.0 - dev: true - - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true - - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: true - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - requiresBuild: true - dev: true - optional: true - - /strip-hex-prefix@1.0.0: - resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} - engines: {node: '>=6.5.0', npm: '>=3'} - dependencies: - is-hex-prefixed: 1.0.0 - dev: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /superstruct@0.15.5: - resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} - dev: true - - /superstruct@2.0.2: - resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} - engines: {node: '>=14.0.0'} - dev: true - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - dev: true - - /text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - dev: true - - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - dev: true - - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true - - /treeify@1.1.0: - resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} - engines: {node: '>=0.6'} - dev: true - - /ts-mocha@10.0.0(mocha@9.2.2): - resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} - engines: {node: '>= 6.X.X'} - hasBin: true - peerDependencies: - mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X - dependencies: - mocha: 9.2.2 - ts-node: 7.0.1 - optionalDependencies: - tsconfig-paths: 3.15.0 - dev: true - - /ts-node@10.9.2(@types/node@22.5.4)(typescript@4.3.5): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 22.5.4 - acorn: 8.12.1 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 4.3.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - - /ts-node@7.0.1: - resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} - engines: {node: '>=4.2.0'} - hasBin: true - dependencies: - arrify: 1.0.1 - buffer-from: 1.1.2 - diff: 3.5.0 - make-error: 1.3.6 - minimist: 1.2.8 - mkdirp: 0.5.6 - source-map-support: 0.5.21 - yn: 2.0.0 - dev: true - - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - requiresBuild: true - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true - optional: true - - /tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - dev: true - - /type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - dev: true - - /typescript@4.3.5: - resolution: {integrity: sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true - - /undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - dev: true - - /utf-8-validate@5.0.10: - resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} - engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.2 - dev: true - - /utf8@3.0.0: - resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} - dev: true - - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true - - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - - /web3-utils@1.10.4: - resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} - engines: {node: '>=8.0.0'} - dependencies: - '@ethereumjs/util': 8.1.0 - bn.js: 5.2.1 - ethereum-bloom-filters: 1.2.0 - ethereum-cryptography: 2.2.1 - ethjs-unit: 0.1.6 - number-to-bn: 1.7.0 - randombytes: 2.1.0 - utf8: 3.0.0 - dev: true - - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true - - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: true - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /workerpool@6.2.0: - resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} - dev: true - - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 - dev: true - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true - - /yargs-parser@20.2.4: - resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} - engines: {node: '>=10'} - dev: true - - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true - - /yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} - dependencies: - camelcase: 6.3.0 - decamelize: 4.0.0 - flat: 5.0.2 - is-plain-obj: 2.1.0 - dev: true - - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.4 - dev: true - - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - dev: true - - /yn@2.0.0: - resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} - engines: {node: '>=4'} - dev: true - - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true diff --git a/extensions/puppet/programs/puppet/src/constants.rs b/extensions/puppet/programs/puppet/src/constants.rs index cf1d2e4..16abb33 100644 --- a/extensions/puppet/programs/puppet/src/constants.rs +++ b/extensions/puppet/programs/puppet/src/constants.rs @@ -1,5 +1,6 @@ use anchor_lang::prelude::Pubkey; pub const DEPHY_ID_PROGRAM: Pubkey = Pubkey::new_from_array([10, 104, 87, 71, 135, 225, 232, 69, 21, 185, 195, 236, 216, 23, 119, 79, 176, 27, 100, 193, 237, 38, 213, 50, 121, 184, 103, 109, 227, 77, 99, 44]); +pub const SPL_2022_PROGRAM: Pubkey = Pubkey::new_from_array([6, 221, 246, 225, 238, 117, 143, 222, 24, 66, 93, 188, 228, 108, 205, 218, 182, 26, 252, 77, 131, 185, 13, 39, 254, 189, 249, 40, 216, 161, 139, 252]); pub const PRODUCT_MINT_SEED_PREFIX: &[u8; 16] = b"DePHY_ID-PRODUCT"; -pub const DEVICE_MINT_SEED_PREFIX: &[u8; 15] = b"DePHY_ID-DEVICE"; \ No newline at end of file +pub const DEVICE_MINT_SEED_PREFIX: &[u8; 15] = b"DePHY_ID-DEVICE"; diff --git a/extensions/puppet/programs/puppet/src/errors.rs b/extensions/puppet/programs/puppet/src/errors.rs index 6e80ce9..90dda68 100644 --- a/extensions/puppet/programs/puppet/src/errors.rs +++ b/extensions/puppet/programs/puppet/src/errors.rs @@ -8,26 +8,15 @@ pub enum ErrorCode { #[msg("The given metaplex collection does not match the collection binding.")] MplCollectionDoesNotMatch, + #[msg("The given metaplex metadata does not contain collection.")] MplCollectionNotFound, - #[msg("The given device collection has already bound.")] - DeviceCollectionAlreadyBound, - - #[msg("The given metaplex collection has already bound.")] - MplCollectionAlreadyBound, - #[msg("The given owner does not own the specified nft.")] NotNFTOwner, #[msg("The given owner does not own the specified device.")] NotDeviceOwner, - #[msg("The given device has already bound a nft.")] - DeviceAlreadyBound, - - #[msg("The given nft has already bound a device.")] - NFTAlreadyBound, - #[msg("The provided device does not match the binding.")] DeviceDoesNotMatch, diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs index eddb2ed..0bdde87 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -1,4 +1,4 @@ -use crate::constants::{DEVICE_MINT_SEED_PREFIX, DEPHY_ID_PROGRAM}; +use crate::constants::{DEVICE_MINT_SEED_PREFIX, DEPHY_ID_PROGRAM, SPL_2022_PROGRAM}; use crate::errors::ErrorCode; use crate::state::{DeviceBinding, DeviceCollectionBinding, MplBinding, MplCollectionBinding}; use anchor_lang::prelude::*; @@ -26,7 +26,7 @@ pub struct Bind<'info> { )] pub device_associated_token: Account<'info, TokenAccount>, #[account( - init_if_needed, + init, payer = payer, space = 8 + 32 + 1, seeds = [b"device_binding", device_associated_token.key().as_ref()], @@ -34,7 +34,7 @@ pub struct Bind<'info> { )] pub device_binding: Account<'info, DeviceBinding>, #[account( - init_if_needed, + init, payer = payer, space = 8 + 32 + 1, seeds = [b"mpl_binding", mpl_associated_token.key().as_ref()], @@ -73,7 +73,7 @@ pub fn bind(ctx: Context, params: BindParams) -> Result<()> { let device_ata = get_associated_token_address_with_program_id( &ctx.accounts.owner.key(), &device_mint_pubkey, - &DEPHY_ID_PROGRAM, + &SPL_2022_PROGRAM, ); require_keys_eq!( @@ -98,18 +98,6 @@ pub fn bind(ctx: Context, params: BindParams) -> Result<()> { return Err(ErrorCode::MplCollectionNotFound.into()); } - require_keys_eq!( - device_binding.mpl_ata, - Pubkey::default(), - ErrorCode::DeviceAlreadyBound - ); - - require_keys_eq!( - mpl_binding.device_ata, - Pubkey::default(), - ErrorCode::NFTAlreadyBound - ); - device_binding.mpl_ata = params.mpl_ata; mpl_binding.device_ata = params.device; diff --git a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs index 4f6029f..9655883 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs @@ -1,5 +1,4 @@ use crate::constants::{DEPHY_ID_PROGRAM, PRODUCT_MINT_SEED_PREFIX}; -use crate::errors::ErrorCode; use crate::state::{DeviceCollectionBinding, MplCollectionBinding}; use anchor_lang::prelude::*; @@ -22,7 +21,7 @@ pub struct BindCollection<'info> { )] pub mpl_collection: AccountInfo<'info>, #[account( - init_if_needed, + init, payer = payer, space = 8 + 32 + 1, seeds = [b"device_collection_binding", product_mint.key().as_ref()], @@ -30,7 +29,7 @@ pub struct BindCollection<'info> { )] pub device_collection_binding: Account<'info, DeviceCollectionBinding>, #[account( - init_if_needed, + init, payer = payer, space = 8 + 32 + 1, seeds = [b"mpl_collection_binding", mpl_collection.key().as_ref()], @@ -59,18 +58,6 @@ pub fn bind_collection(ctx: Context, params: BindCollectionParam let device_collection_binding = &mut ctx.accounts.device_collection_binding; let mpl_collection_binding = &mut ctx.accounts.mpl_collection_binding; - require_keys_eq!( - device_collection_binding.mpl_collection, - Pubkey::default(), - ErrorCode::DeviceCollectionAlreadyBound - ); - - require_keys_eq!( - mpl_collection_binding.device_collection, - Pubkey::default(), - ErrorCode::MplCollectionAlreadyBound - ); - device_collection_binding.mpl_collection = params.mpl_collection; mpl_collection_binding.device_collection = params.device_collection; From e79e9bee5d544f8ac10270ecb5bba9497248aa3a Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Thu, 26 Sep 2024 20:10:41 +0800 Subject: [PATCH 19/29] wip: puppet test --- extensions/puppet/Anchor.toml | 12 +++++++++--- extensions/puppet/tests/puppet.ts | 30 ++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/extensions/puppet/Anchor.toml b/extensions/puppet/Anchor.toml index 3eb04e9..03bce89 100644 --- a/extensions/puppet/Anchor.toml +++ b/extensions/puppet/Anchor.toml @@ -14,8 +14,14 @@ url = "https://api.apr.dev" cluster = "Localnet" wallet = "~/.config/solana/id.json" -# [[test.validator.clone]] -# address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" +[[test.validator.clone]] +address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" +[[test.validator.clone]] +address = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + +[[test.genesis]] +address = "hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1" +program = "../../target/deploy/dephy_id_program.so" [scripts] -test = "pnpm run test" +test = "bun run test" diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index 1abac4b..ea5ac5b 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -5,15 +5,30 @@ import { getOrCreateAssociatedTokenAccount, createMint, } from "@solana/spl-token"; +import { exec } from 'child_process'; +import { promisify } from 'util'; import { assert } from "chai"; import { Puppet } from "../target/types/puppet"; +const execPromise = promisify(exec); + describe("puppet program", () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); const program = anchor.workspace.Puppet as Program; + console.log("loaded") + + before(() => { + console.log("before") + executeCommandInDirectory(CLI, CREATE_PRODUCT); + }) + + it("success", async() => { + + }) + // let payer = Keypair.generate(); // let deviceMint: PublicKey; // let nftMint: PublicKey; @@ -242,3 +257,18 @@ describe("puppet program", () => { // // } // // }); }); + +const CLI = "../../cli" +const CREATE_PRODUCT = `cargo run create-product --vendor ../extensions/puppet/keypair.json 'Product 1' 'SYMBOL' 'METADATA_URI' -m desc="First Product by Example Vendor" -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1` + +async function executeCommandInDirectory(directory: string, command: string) { + try { + const { stdout, stderr } = await execPromise(command, { cwd: directory }); + console.log('Output:', stdout); + if (stderr) { + console.error('Error:', stderr); + } + } catch (error) { + console.error('Execution failed:', error); + } +} \ No newline at end of file From eb89cfab32582ecf1ce349e7298b39ee3ade2f43 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Fri, 27 Sep 2024 18:30:19 +0800 Subject: [PATCH 20/29] wif: test --- cli/src/main.rs | 88 ++- extensions/puppet/.gitignore | 4 +- extensions/puppet/Anchor.toml | 13 +- .../tests/fixtures/mpl_token_metadata.so | Bin 0 -> 793904 bytes .../puppet/tests/fixtures/spl_token_2022.so | Bin 0 -> 691008 bytes extensions/puppet/tests/puppet.ts | 557 ++++++++++-------- 6 files changed, 400 insertions(+), 262 deletions(-) create mode 100644 extensions/puppet/tests/fixtures/mpl_token_metadata.so create mode 100644 extensions/puppet/tests/fixtures/spl_token_2022.so diff --git a/cli/src/main.rs b/cli/src/main.rs index f85473f..875ca1b 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -6,7 +6,7 @@ use arrayref::array_ref; use clap::{Args, Parser, Subcommand, ValueEnum}; use dephy_id_program_client::{ instructions::{ - ActivateDeviceBuilder, CreateDeviceBuilder, CreateProductBuilder, InitializeBuilder, + ActivateDeviceBuilder, CreateDeviceBuilder,CreateActivatedDeviceBuilder, CreateProductBuilder, InitializeBuilder, }, types::{self, DeviceActivationSignature}, DEVICE_MESSAGE_PREFIX, DEVICE_MINT_SEED_PREFIX, EIP191_MESSAGE_PREFIX, ID as PROGRAM_ID, @@ -35,6 +35,7 @@ enum Commands { CreateProduct(CreateProductCliArgs), CalcDevicePubkey(CalcDevicePubkeyCliArgs), CreateDevice(CreateDeviceCliArgs), + DevCreateActivatedDevice(DevCreateActivatedDeviceCliArgs), GenerateMessage(GenerateMessageCliArgs), SignMessage(SignMessageCliArgs), ActivateDeviceOffchain(ActivateDeviceOffchainCliArgs), @@ -114,6 +115,22 @@ struct CreateDeviceCliArgs { common: CommonArgs, } +#[derive(Debug, Args)] +struct DevCreateActivatedDeviceCliArgs { + #[arg(long = "vendor")] + vendor_keypair: String, + #[arg(long = "product", value_parser = parse_pubkey)] + product_pubkey: Pubkey, + #[arg(long = "device")] + device_keypair: String, + #[arg(value_enum, long, default_value_t = SignatureType::Secp256k1)] + signature_type: SignatureType, + #[arg(long = "user")] + user_keypair: String, + #[command(flatten)] + common: CommonArgs, +} + #[derive(Debug, Clone, Copy, ValueEnum)] enum SignatureType { Ed25519, @@ -220,6 +237,7 @@ fn main() { Commands::CreateProduct(args) => create_product(args), Commands::CalcDevicePubkey(args) => calc_device_pubkey(args), Commands::CreateDevice(args) => create_device(args), + Commands::DevCreateActivatedDevice(args) => dev_create_activated_device(args), Commands::GenerateMessage(args) => generate_message(args), Commands::SignMessage(args) => sign_message(args), Commands::ActivateDeviceOffchain(args) => activate_device_offchain(args), @@ -406,6 +424,72 @@ fn create_device(args: CreateDeviceCliArgs) { }; } +fn dev_create_activated_device(args: DevCreateActivatedDeviceCliArgs) { + let client = get_client(&args.common.url); + let program_id = args.common.program_id.unwrap_or(PROGRAM_ID); + let token_program_id = spl_token_2022::ID; + + let device = read_key(&args.device_keypair); + let device_pubkey = get_device_pubkey(&device, &args.signature_type.into()); + + let vendor = read_key(&args.vendor_keypair); + let user = read_key(&args.user_keypair); + let payer = read_key(&args.common.payer.unwrap_or(args.user_keypair)); + let latest_block = client.get_latest_blockhash().unwrap(); + + let product_atoken_pubkey = + spl_associated_token_account::get_associated_token_address_with_program_id( + &device_pubkey, + &args.product_pubkey, + &token_program_id, + ); + + let (did_mint_pubkey, _bump) = Pubkey::find_program_address( + &[ + DEVICE_MINT_SEED_PREFIX, + args.product_pubkey.as_ref(), + device_pubkey.as_ref(), + ], + &program_id, + ); + + let did_atoken_pubkey = + spl_associated_token_account::get_associated_token_address_with_program_id( + &user.pubkey(), + &did_mint_pubkey, + &token_program_id, + ); + + let transaction = Transaction::new_signed_with_payer( + &[CreateActivatedDeviceBuilder::new() + .payer(payer.pubkey()) + .vendor(vendor.pubkey()) + .product_mint(args.product_pubkey) + .product_associated_token(product_atoken_pubkey) + .device(device_pubkey) + .device_mint(did_mint_pubkey) + .device_associated_token(did_atoken_pubkey) + .owner(user.pubkey()) + .instruction()], + Some(&payer.pubkey()), + &[&payer], + latest_block + ); + + match client.send_and_confirm_transaction(&transaction) { + Ok(sig) => { + println!("Success: {:?}", sig); + println!("User: {}", user.pubkey()); + println!("Device: {}", device_pubkey); + println!("Mint: {}", did_mint_pubkey); + println!("AToken: {}", did_atoken_pubkey); + } + Err(err) => { + eprintln!("Error: {:?}", err); + } + }; +} + fn dev_activate_device(args: DevActivateDeviceCliArgs) { let client = get_client(&args.common.url); let program_id = args.common.program_id.unwrap_or(PROGRAM_ID); @@ -444,6 +528,7 @@ fn dev_activate_device(args: DevActivateDeviceCliArgs) { .ok() .unwrap() .as_secs(); + let message = [ DEVICE_MESSAGE_PREFIX, args.product_mint_pubkey.as_ref(), @@ -481,6 +566,7 @@ fn dev_activate_device(args: DevActivateDeviceCliArgs) { eprintln!("Device: {}", device_pubkey); eprintln!("Mint: {}", did_mint_pubkey); eprintln!("AToken: {}", did_atoken_pubkey); + println!("{}", did_atoken_pubkey) } Err(err) => { eprintln!("Error: {:?}", err); diff --git a/extensions/puppet/.gitignore b/extensions/puppet/.gitignore index 92049cd..5484f56 100644 --- a/extensions/puppet/.gitignore +++ b/extensions/puppet/.gitignore @@ -4,4 +4,6 @@ target **/*.rs.bk node_modules test-ledger -.yarn \ No newline at end of file +.yarn +key.json +device.json \ No newline at end of file diff --git a/extensions/puppet/Anchor.toml b/extensions/puppet/Anchor.toml index 03bce89..c66ee65 100644 --- a/extensions/puppet/Anchor.toml +++ b/extensions/puppet/Anchor.toml @@ -14,14 +14,17 @@ url = "https://api.apr.dev" cluster = "Localnet" wallet = "~/.config/solana/id.json" -[[test.validator.clone]] -address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" -[[test.validator.clone]] -address = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" - [[test.genesis]] address = "hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1" program = "../../target/deploy/dephy_id_program.so" +[[test.genesis]] +address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" +program = "tests/fixtures/mpl_token_metadata.so" + +[[test.genesis]] +address = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" +program = "tests/fixtures/spl_token_2022.so" + [scripts] test = "bun run test" diff --git a/extensions/puppet/tests/fixtures/mpl_token_metadata.so b/extensions/puppet/tests/fixtures/mpl_token_metadata.so new file mode 100644 index 0000000000000000000000000000000000000000..b50520005680a48f107c3d26aa5f4b93f98e7593 GIT binary patch literal 793904 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

plzWhU{5>D;eQUJ8Q9%ggKO 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

p%Kf?y>I>#Oh52&7v15VU-_UWo+;8dV#+`l| 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 literal 0 HcmV?d00001 diff --git a/extensions/puppet/tests/fixtures/spl_token_2022.so b/extensions/puppet/tests/fixtures/spl_token_2022.so new file mode 100644 index 0000000000000000000000000000000000000000..575282f16150ea85b57ce56e638b3c4351f12978 GIT binary patch literal 691008 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%0DgRT+z@^+&Av|@ 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 zkbI5zkII}p0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}Q zJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA? zz!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X z0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmP zC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>q zcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO) zfG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H( z1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2n zPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ z@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp z08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn z3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~D zo&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc z;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G z0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D z6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}Q zJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA? zz!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X z0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmP zC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>q zcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b71fpC|Bt E08t@N82|tP literal 0 HcmV?d00001 diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index ea5ac5b..2df1472 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -1,15 +1,37 @@ +import * as fs from "fs"; import * as anchor from "@coral-xyz/anchor"; import { Program } from "@coral-xyz/anchor"; import { PublicKey, Keypair } from "@solana/web3.js"; import { - getOrCreateAssociatedTokenAccount, - createMint, + generateSigner, + percentAmount, + createSignerFromKeypair, + signerIdentity, + publicKey, + none, +} from "@metaplex-foundation/umi"; +import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; +import { + mplTokenMetadata, + createNft, + fetchDigitalAsset, + setAndVerifyCollection, + findMetadataPda, + findMasterEditionPda, +} from "@metaplex-foundation/mpl-token-metadata"; +import { + getAssociatedTokenAddress, + TOKEN_PROGRAM_ID, + ASSOCIATED_TOKEN_PROGRAM_ID, } from "@solana/spl-token"; -import { exec } from 'child_process'; -import { promisify } from 'util'; +import { exec } from "child_process"; +import { promisify } from "util"; import { assert } from "chai"; import { Puppet } from "../target/types/puppet"; +const CLI_DIR = "../../cli"; +const KEY_PATH = "tests/key.json"; +const DEVICE_PATH = "tests/device.json"; const execPromise = promisify(exec); describe("puppet program", () => { @@ -18,257 +40,282 @@ describe("puppet program", () => { const program = anchor.workspace.Puppet as Program<Puppet>; - console.log("loaded") - - before(() => { - console.log("before") - executeCommandInDirectory(CLI, CREATE_PRODUCT); - }) - - it("success", async() => { - - }) - - // let payer = Keypair.generate(); - // let deviceMint: PublicKey; - // let nftMint: PublicKey; - // let deviceAccount: PublicKey; - // let nftAccount: PublicKey; - // let deviceBindingPDA: PublicKey; - // let nftBindingPDA: PublicKey; - - // // before(async () => { - // // await provider.connection.confirmTransaction( - // // await provider.connection.requestAirdrop( - // // payer.publicKey, - // // anchor.web3.LAMPORTS_PER_SOL - // // ) - // // ); - - // // deviceMint = await createMint( - // // provider.connection, - // // payer, - // // payer.publicKey, // mint authority - // // null, // freeze authority - // // 0 // decimals (0 for NFTs) - // // ); - - // // nftMint = await createMint( - // // provider.connection, - // // payer, - // // payer.publicKey, - // // null, - // // 0 - // // ); - - // // deviceAccount = ( - // // await getOrCreateAssociatedTokenAccount( - // // provider.connection, - // // payer, - // // deviceMint, // deviceMint - // // payer.publicKey // owner - // // ) - // // ).address; - - // // nftAccount = ( - // // await getOrCreateAssociatedTokenAccount( - // // provider.connection, - // // payer, - // // nftMint, // nftMint - // // payer.publicKey // owner - // // ) - // // ).address; - - // // const [deviceBindingPubkey] = PublicKey.findProgramAddressSync( - // // [Buffer.from("device_binding"), deviceAccount.toBuffer()], - // // program.programId - // // ); - - // // const [nftBindingPubkey] = PublicKey.findProgramAddressSync( - // // [Buffer.from("mpl_binding"), nftAccount.toBuffer()], - // // program.programId - // // ); - - // // deviceBindingPDA = deviceBindingPubkey; - // // nftBindingPDA = nftBindingPubkey; - // // }); - - // // it("binds device and nft", async () => { - // // const tx = await program.methods - // // .bind({ - // // device: deviceAccount, - // // nft: nftAccount, - // // }) - // // .accounts({ - // // payer: payer.publicKey, - // // deviceAccount: deviceAccount, - // // nftAccount: nftAccount, - // // }) - // // .signers([payer]) - // // .rpc(); - - // // const deviceBinding = await program.account.deviceBinding.fetch( - // // deviceBindingPDA - // // ); - // // const nftBinding = await program.account.nftBinding.fetch(nftBindingPDA); - - // // assert.equal(deviceBinding.nft.toString(), nftAccount.toString()); - // // assert.equal(nftBinding.device.toString(), deviceAccount.toString()); - // // }); - - // // it("fails to bind if payer does not own nft", async () => { - // // const nftAccountNotOwned = ( - // // await getOrCreateAssociatedTokenAccount( - // // provider.connection, - // // payer, - // // nftMint, - // // Keypair.generate().publicKey - // // ) - // // ).address; - - // // try { - // // await program.methods - // // .bind({ - // // device: deviceAccount, - // // nft: nftAccountNotOwned, - // // }) - // // .accounts({ - // // payer: payer.publicKey, - // // deviceAccount: deviceAccount, - // // nftAccount: nftAccountNotOwned, - // // }) - // // .signers([payer]) - // // .rpc(); - // // assert.fail("Expected error but none was thrown"); - // // } catch (err) { - // // assert.equal(err.error.errorCode.code, "PayerDoesNotOwnNFT"); - // // } - // // }); - - // // it("fails to bind if payer does not own device", async () => { - // // const deviceAccountNotOwned = ( - // // await getOrCreateAssociatedTokenAccount( - // // provider.connection, - // // payer, - // // deviceMint, - // // Keypair.generate().publicKey - // // ) - // // ).address; - - // // try { - // // await program.methods - // // .bind({ - // // device: deviceAccountNotOwned, - // // nft: nftAccount, - // // }) - // // .accounts({ - // // payer: payer.publicKey, - // // deviceAccount: deviceAccountNotOwned, - // // nftAccount: nftAccount, - // // }) - // // .signers([payer]) - // // .rpc(); - // // assert.fail("Expected error but none was thrown"); - // // } catch (err) { - // // assert.equal(err.error.errorCode.code, "PayerDoesNotOwnDevice"); - // // } - // // }); - - // // it("fails to bind if device already bound", async () => { - // // await program.methods - // // .bind({ - // // device: deviceAccount, - // // nft: nftAccount, - // // }) - // // .accounts({ - // // payer: payer.publicKey, - // // deviceAccount: deviceAccount, - // // nftAccount: nftAccount, - // // }) - // // .signers([payer]) - // // .rpc(); - - // // const nftAccountUnbound = ( - // // await getOrCreateAssociatedTokenAccount( - // // provider.connection, - // // payer, - // // await createMint( - // // provider.connection, - // // payer, - // // payer.publicKey, - // // null, - // // 0 - // // ), - // // payer.publicKey - // // ) - // // ).address; - - // // try { - // // await program.methods - // // .bind({ - // // device: deviceAccount, - // // nft: nftAccountUnbound, - // // }) - // // .accounts({ - // // payer: payer.publicKey, - // // deviceAccount: deviceAccount, - // // nftAccount: nftAccountUnbound, - // // }) - // // .signers([payer]) - // // .rpc(); - // // assert.fail("Expected error but none was thrown"); - // // } catch (err) { - // // assert.equal(err.error.errorCode.code, "DeviceAlreadyBound"); - // // } - // // }); - - // // it("fails to bind if nft already bound", async () => { - // // const deviceAccountUnbound = ( - // // await getOrCreateAssociatedTokenAccount( - // // provider.connection, - // // payer, - // // await createMint( - // // provider.connection, - // // payer, - // // payer.publicKey, - // // null, - // // 0 - // // ), - // // payer.publicKey - // // ) - // // ).address; - - // // try { - // // await program.methods - // // .bind({ - // // device: deviceAccountUnbound, - // // nft: nftAccount, - // // }) - // // .accounts({ - // // payer: payer.publicKey, - // // deviceAccount: deviceAccountUnbound, - // // nftAccount: nftAccount, - // // }) - // // .signers([payer]) - // // .rpc(); - // // assert.fail("Expected error but none was thrown"); - // // } catch (err) { - // // assert.equal(err.error.errorCode.code, "NFTAlreadyBound"); - // // } - // // }); + const productName = "Test Product"; + + const payer = Keypair.generate(); + + // collection + let product: PublicKey; + let mplCollection: PublicKey; + + // device & nft + let device: PublicKey; + let deviceAta: PublicKey; + let mplAta: PublicKey; + + // binding PDA + let deviceCollectionBindingPDA: PublicKey; + let mplCollectionBindingPDA: PublicKey; + let deviceBindingPDA: PublicKey; + let mplBindingPDA: PublicKey; + + before(async () => { + await provider.connection.confirmTransaction( + await provider.connection.requestAirdrop( + payer.publicKey, + 10 * anchor.web3.LAMPORTS_PER_SOL + ) + ); + + // write vendor secret key json + fs.writeFileSync(KEY_PATH, `[${payer.secretKey.toString()}]`); + + // write device secret key json + const deviceKeypair = Keypair.generate(); + device = new PublicKey(deviceKeypair.publicKey); + fs.writeFileSync(DEVICE_PATH, `[${deviceKeypair.secretKey.toString()}]`); + + // create product + const productPubkeyStr = await createProduct(productName); + console.log("productMint:", productPubkeyStr); + product = new PublicKey(productPubkeyStr); + + console.log("===") + // create activated device + const { deviceAta: deviceAtaStr } = await createDevice( + payer.publicKey.toString(), + product.toString(), + device.toString() + ); + console.log("deviceAta:", deviceAtaStr); + deviceAta = new PublicKey(deviceAtaStr); + + // create mpl collection nft + const _mplCollection = await createMplCollection( + provider.connection, + payer, + "test collection", + "http://" + ); + mplCollection = new PublicKey(_mplCollection); + console.log("mplCollection:", mplCollection.toString()); + + // create mpl nft + const _mplAta = await createMplNft( + provider.connection, + payer, + "test nft", + "http://", + _mplCollection + ); + mplAta = new PublicKey(_mplAta); + console.log("mplAta:", mplCollection.toString()); + + const [deviceCollectionBindingPubkey] = PublicKey.findProgramAddressSync( + [Buffer.from("device_collection_binding"), product.toBuffer()], + program.programId + ); + + const [mplCollectionBindingPubkey] = PublicKey.findProgramAddressSync( + [Buffer.from("mpl_collection_binding"), mplCollection.toBuffer()], + program.programId + ); + + const [mplBindingPubkey] = PublicKey.findProgramAddressSync( + [Buffer.from("mpl_binding"), mplAta.toBuffer()], + program.programId + ); + + const [deviceBindingPubkey] = PublicKey.findProgramAddressSync( + [Buffer.from("device_binding"), deviceAta.toBuffer()], + program.programId + ); + + deviceCollectionBindingPDA = deviceCollectionBindingPubkey; + mplCollectionBindingPDA = mplCollectionBindingPubkey; + deviceBindingPDA = deviceBindingPubkey; + mplBindingPDA = mplBindingPubkey; + }); + + it("binds device collection and mpl collection", async () => { + await program.methods + .bindCollection({ + productMetadataName: productName, + deviceCollection: product, + mplCollection, + }) + .accounts({ + payer: payer.publicKey, + mplCollection, + }) + .signers([payer]) + .rpc(); + + const deviceCollectionBinding = + await program.account.deviceCollectionBinding.fetch( + deviceCollectionBindingPDA + ); + const mplCollectionBinding = + await program.account.mplCollectionBinding.fetch(mplCollectionBindingPDA); + + assert.equal( + deviceCollectionBinding.mplCollection.toString(), + mplCollection.toString() + ); + assert.equal( + mplCollectionBinding.deviceCollection.toString(), + product.toString() + ); + }); + + it("binds device and mpl nft", async () => { + await program.methods + .bind({ + device, + mplAta, + }) + .accounts({ + payer: payer.publicKey, + }) + .signers([payer]) + .rpc(); + + const deviceBinding = await program.account.deviceBinding.fetch( + deviceBindingPDA + ); + const mplBinding = await program.account.mplBinding.fetch(mplBindingPDA); + + assert.equal(deviceBinding.mplAta.toString(), mplAta.toString()); + assert.equal(mplBinding.deviceAta.toString(), deviceAta.toString()); + }); }); -const CLI = "../../cli" -const CREATE_PRODUCT = `cargo run create-product --vendor ../extensions/puppet/keypair.json 'Product 1' 'SYMBOL' 'METADATA_URI' -m desc="First Product by Example Vendor" -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1` - -async function executeCommandInDirectory(directory: string, command: string) { - try { - const { stdout, stderr } = await execPromise(command, { cwd: directory }); - console.log('Output:', stdout); - if (stderr) { - console.error('Error:', stderr); - } - } catch (error) { - console.error('Execution failed:', error); +async function executeCommandInDirectory( + directory: string, + command: string, + showStderr = false +) { + try { + const { stdout, stderr } = await execPromise(command, { cwd: directory }); + if (showStderr) { + console.error("stderr:", stderr); } -} \ No newline at end of file + return stdout; + } catch (error) { + console.error("Execution failed:", error); + } +} + +const createProduct = async (name: string) => { + const productMint = await executeCommandInDirectory( + CLI_DIR, + `cargo run create-product --vendor ../extensions/puppet/${KEY_PATH} '${name}' 'SYMBOL' 'METADATA_URI' -m desc="First Product by Example Vendor" -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1` + ); + return productMint.trimEnd(); +}; + +const createDevice = async ( + vendorPubkey: string, + productMint: string, + device: string +) => { + const deviceMint = await executeCommandInDirectory( + CLI_DIR, + `cargo run dev-create-activated-device --vendor ../extensions/puppet/${KEY_PATH} --product ${productMint} --device ../extensions/puppet/${DEVICE_PATH} --user ../extensions/puppet/${KEY_PATH} -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1` + ,true + ); + + console.log("deviceMint:", deviceMint) + + // const deviceAta = await executeCommandInDirectory( + // CLI_DIR, + // `cargo run dev-activate-device --user ../extensions/puppet/${KEY_PATH} --device ../extensions/puppet/${DEVICE_PATH} --vendor ${vendorPubkey} --product ${productMint} -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1`, + // true + // ); + + return { + deviceMint: deviceMint.trimEnd(), + deviceAta: deviceMint.trimEnd(), + }; +}; + +const createMplCollection = async ( + rpc: any, + keypair: Keypair, + name: string, + uri: string +) => { + const umi = createUmi(rpc); + + const keypairSigner = umi.eddsa.createKeypairFromSecretKey(keypair.secretKey); + + const signer = createSignerFromKeypair(umi, keypairSigner); + + umi.use(signerIdentity(signer)).use(mplTokenMetadata()); + + const mint = generateSigner(umi); + await createNft(umi, { + mint, + authority: signer, + name, + uri, + sellerFeeBasisPoints: percentAmount(5.5), + isCollection: true, + collectionDetails: none(), + }).sendAndConfirm(umi); + + const asset = await fetchDigitalAsset(umi, mint.publicKey); + return asset.mint.publicKey; +}; + +const createMplNft = async ( + rpc: any, + keypair: Keypair, + name: string, + uri: string, + collection: string +) => { + const umi = createUmi(rpc); + + const keypairSigner = umi.eddsa.createKeypairFromSecretKey(keypair.secretKey); + + const signer = createSignerFromKeypair(umi, keypairSigner); + + umi.use(signerIdentity(signer)); + umi.use(mplTokenMetadata()); + const mint = generateSigner(umi); + await createNft(umi, { + mint, + name, + uri, + sellerFeeBasisPoints: percentAmount(5.5), + }).sendAndConfirm(umi); + + const asset = await fetchDigitalAsset(umi, mint.publicKey); + console.log("mpl_mint:", asset.mint.publicKey); + + const collectionMint = publicKey(collection); + const collectionMetadata = findMetadataPda(umi, { mint: collectionMint }); + + await setAndVerifyCollection(umi, { + metadata: findMetadataPda(umi, { mint: asset.mint.publicKey }), + collectionAuthority: signer, + collectionMint: collectionMint, + collection: collectionMetadata, + collectionMasterEditionAccount: findMasterEditionPda(umi, { + mint: collectionMint, + }), + }).sendAndConfirm(umi); + + console.log("collection verified"); + + const mplAta = await getAssociatedTokenAddress( + new anchor.web3.PublicKey(asset.mint.publicKey), // The mint address of the created NFT + new anchor.web3.PublicKey(keypairSigner.publicKey), // The wallet address of the NFT owner + false, + TOKEN_PROGRAM_ID, + ASSOCIATED_TOKEN_PROGRAM_ID + ); + + return mplAta; +}; From 3a2909824b4b77804cd760ef8aa7d1b4071408ff Mon Sep 17 00:00:00 2001 From: Jun Jiang <jasl9187@hotmail.com> Date: Fri, 27 Sep 2024 19:07:52 +0800 Subject: [PATCH 21/29] WIP --- cli/src/main.rs | 23 +- .../puppet/programs/puppet/src/state/mod.rs | 2 +- extensions/puppet/tests/puppet.ts | 12 +- package.json | 4 +- pnpm-lock.yaml | 2071 +++++++++++++---- 5 files changed, 1708 insertions(+), 404 deletions(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index 875ca1b..8e1faf7 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -6,9 +6,10 @@ use arrayref::array_ref; use clap::{Args, Parser, Subcommand, ValueEnum}; use dephy_id_program_client::{ instructions::{ - ActivateDeviceBuilder, CreateDeviceBuilder,CreateActivatedDeviceBuilder, CreateProductBuilder, InitializeBuilder, + ActivateDeviceBuilder, CreateDeviceBuilder, CreateProductBuilder, InitializeBuilder, + CreateActivatedDeviceNonSignerBuilder, }, - types::{self, DeviceActivationSignature}, + types::{self, DeviceActivationSignature, CreateActivatedDeviceArgs}, DEVICE_MESSAGE_PREFIX, DEVICE_MINT_SEED_PREFIX, EIP191_MESSAGE_PREFIX, ID as PROGRAM_ID, PRODUCT_MINT_SEED_PREFIX, PROGRAM_PDA_SEED_PREFIX, }; @@ -127,6 +128,13 @@ struct DevCreateActivatedDeviceCliArgs { signature_type: SignatureType, #[arg(long = "user")] user_keypair: String, + #[arg(value_enum, long, default_value_t = DeviceSigningAlgorithm::Secp256k1)] + signing_alg: DeviceSigningAlgorithm, + name: String, + #[arg(default_value = "")] + metadata_uri: String, + #[arg(short = 'm', value_parser = parse_key_val::<String, String>)] + additional_metadata: Vec<(String, String)>, #[command(flatten)] common: CommonArgs, } @@ -237,11 +245,11 @@ fn main() { Commands::CreateProduct(args) => create_product(args), Commands::CalcDevicePubkey(args) => calc_device_pubkey(args), Commands::CreateDevice(args) => create_device(args), - Commands::DevCreateActivatedDevice(args) => dev_create_activated_device(args), Commands::GenerateMessage(args) => generate_message(args), Commands::SignMessage(args) => sign_message(args), Commands::ActivateDeviceOffchain(args) => activate_device_offchain(args), Commands::DevActivateDevice(args) => dev_activate_device(args), + Commands::DevCreateActivatedDevice(args) => dev_create_activated_device(args), } } @@ -461,7 +469,7 @@ fn dev_create_activated_device(args: DevCreateActivatedDeviceCliArgs) { ); let transaction = Transaction::new_signed_with_payer( - &[CreateActivatedDeviceBuilder::new() + &[CreateActivatedDeviceNonSignerBuilder::new() .payer(payer.pubkey()) .vendor(vendor.pubkey()) .product_mint(args.product_pubkey) @@ -469,10 +477,15 @@ fn dev_create_activated_device(args: DevCreateActivatedDeviceCliArgs) { .device(device_pubkey) .device_mint(did_mint_pubkey) .device_associated_token(did_atoken_pubkey) + .create_activated_device_args(CreateActivatedDeviceArgs { + name: args.name, + uri: args.metadata_uri, + additional_metadata: args.additional_metadata, + }) .owner(user.pubkey()) .instruction()], Some(&payer.pubkey()), - &[&payer], + &[&payer, &vendor], latest_block ); diff --git a/extensions/puppet/programs/puppet/src/state/mod.rs b/extensions/puppet/programs/puppet/src/state/mod.rs index 66e32d9..02c8bce 100644 --- a/extensions/puppet/programs/puppet/src/state/mod.rs +++ b/extensions/puppet/programs/puppet/src/state/mod.rs @@ -6,4 +6,4 @@ pub mod mpl_binding; pub use device_collection_binding::*; pub use mpl_collection_binding::*; pub use device_binding::*; -pub use mpl_binding::*; \ No newline at end of file +pub use mpl_binding::*; diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index 2df1472..1cb9a8f 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -207,9 +207,12 @@ async function executeCommandInDirectory( } const createProduct = async (name: string) => { + const command = `cargo run create-product --vendor ../extensions/puppet/${KEY_PATH} '${name}' 'SYMBOL' 'METADATA_URI' -m desc="First Product by Example Vendor" -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1` + console.log(command) + const productMint = await executeCommandInDirectory( CLI_DIR, - `cargo run create-product --vendor ../extensions/puppet/${KEY_PATH} '${name}' 'SYMBOL' 'METADATA_URI' -m desc="First Product by Example Vendor" -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1` + command ); return productMint.trimEnd(); }; @@ -219,10 +222,13 @@ const createDevice = async ( productMint: string, device: string ) => { + const command = `cargo run dev-create-activated-device --vendor ../extensions/puppet/${KEY_PATH} --product ${productMint} --device ../extensions/puppet/${DEVICE_PATH} --user ../extensions/puppet/${KEY_PATH} 'DEVICE#1' -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1` + console.log(command) + const deviceMint = await executeCommandInDirectory( CLI_DIR, - `cargo run dev-create-activated-device --vendor ../extensions/puppet/${KEY_PATH} --product ${productMint} --device ../extensions/puppet/${DEVICE_PATH} --user ../extensions/puppet/${KEY_PATH} -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1` - ,true + command, + true ); console.log("deviceMint:", deviceMint) diff --git a/package.json b/package.json index 8dea594..a700268 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,9 @@ "@kinobi-so/renderers-rust": "^0.20.10", "kinobi": "^0.20.4", "typescript": "^5.5.2", - "zx": "^7.2.3" + "zx": "^7.2.3", + "rimraf": "^6.0.1", + "tsup": "^8.3.0" }, "packageManager": "pnpm@9.4.0", "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9daf25e..ce2f10a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true @@ -9,77 +9,1171 @@ patchedDependencies: hash: 4enzrly4t4usefdxlj442bgdqq path: patches/@kinobi-so__renderers-rust@0.20.10.patch -devDependencies: - '@iarna/toml': - specifier: ^2.2.5 - version: 2.2.5 - '@kinobi-so/nodes-from-anchor': - specifier: ^0.20.6 - version: 0.20.6 - '@kinobi-so/renderers-js': - specifier: ^0.20.9 - version: 0.20.9(fastestsmallesttextencoderdecoder@1.0.22) - '@kinobi-so/renderers-js-umi': - specifier: ^0.20.6 - version: 0.20.6(fastestsmallesttextencoderdecoder@1.0.22) - '@kinobi-so/renderers-rust': - specifier: ^0.20.10 - version: 0.20.10(patch_hash=4enzrly4t4usefdxlj442bgdqq)(fastestsmallesttextencoderdecoder@1.0.22) - kinobi: - specifier: ^0.20.4 - version: 0.20.4 - typescript: - specifier: ^5.5.2 - version: 5.5.2 - zx: - specifier: ^7.2.3 - version: 7.2.3 +importers: + + .: + devDependencies: + '@iarna/toml': + specifier: ^2.2.5 + version: 2.2.5 + '@kinobi-so/nodes-from-anchor': + specifier: ^0.20.6 + version: 0.20.6 + '@kinobi-so/renderers-js': + specifier: ^0.20.9 + version: 0.20.9(chokidar@3.6.0)(fastestsmallesttextencoderdecoder@1.0.22) + '@kinobi-so/renderers-js-umi': + specifier: ^0.20.6 + version: 0.20.6(chokidar@3.6.0)(fastestsmallesttextencoderdecoder@1.0.22) + '@kinobi-so/renderers-rust': + specifier: ^0.20.10 + version: 0.20.10(patch_hash=4enzrly4t4usefdxlj442bgdqq)(chokidar@3.6.0)(fastestsmallesttextencoderdecoder@1.0.22) + kinobi: + specifier: ^0.20.4 + version: 0.20.4 + rimraf: + specifier: ^6.0.1 + version: 6.0.1 + tsup: + specifier: ^8.3.0 + version: 8.3.0(typescript@5.5.2)(yaml@2.5.1) + typescript: + specifier: ^5.5.2 + version: 5.5.2 + zx: + specifier: ^7.2.3 + version: 7.2.3 packages: - /@iarna/toml@2.2.5: + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} - dev: true - /@kinobi-so/errors@0.20.4: - resolution: {integrity: sha512-5GWQPiqLOngZFxMCTnF0rGsCc9LXUHXX+zBzbXBjhsdyQm8OSFpVFZtwiBkF+jsOBQPrLv26dFlkWJgBiq2jXQ==} + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@kinobi-so/errors@0.20.4': + resolution: {integrity: sha512-5GWQPiqLOngZFxMCTnF0rGsCc9LXUHXX+zBzbXBjhsdyQm8OSFpVFZtwiBkF+jsOBQPrLv26dFlkWJgBiq2jXQ==} + hasBin: true + + '@kinobi-so/node-types@0.20.4': + resolution: {integrity: sha512-kFFXMC9nSemDj2itNeSj4VR9R6QTz0z7v3niwxHHq9IJ4TFPwpcZAt7aH++SGlCUeHG3iOHC2ZngFMhv+Ks/Fw==} + + '@kinobi-so/nodes-from-anchor@0.20.6': + resolution: {integrity: sha512-2ad1ILvnul1PqqlCkQ2uii9KCgcR9ne5jxXsxiTKUHhab6LmI6sCTR15FO4T+ZzgMVsvAe3ySrOmgDICUHr4eA==} + + '@kinobi-so/nodes@0.20.4': + resolution: {integrity: sha512-zeGOOdOaKbMxqiZWNJx/JVGVWp4mzCkwDp3bG4J+x9+mQ1nQcyuPvHXeHmtBXa9IWp7AScXlyn5HddVzK/8ZRQ==} + + '@kinobi-so/renderers-core@0.20.4': + resolution: {integrity: sha512-feb0Fsw7UIj14JZ2LmHYyosT07K/Jrs7CvNYD2YF4g6WQz9mmy1l8Fa+gpVtoDdSHvfXrgzv8193p0QkRRBWmA==} + + '@kinobi-so/renderers-js-umi@0.20.6': + resolution: {integrity: sha512-s7BN7Fa7VAr6tuTyLJVp6ceftFMqMRTopIAD4QyYGrJVoM+KLA0W7MpGo/pE61jRUCE24MZIJJjkX1qbuL4hfA==} + + '@kinobi-so/renderers-js@0.20.9': + resolution: {integrity: sha512-wrduoNFTvR23Gr+oMB1sFjhv6lvh3DHqDR7B5+MownuGsM1FG6iszSw3hZIbpOetKBjhWYNjHfE5QOZG56Wadg==} + + '@kinobi-so/renderers-rust@0.20.10': + resolution: {integrity: sha512-I4NINXbUJR3gPKoS/fNQ92YuCGFtKd+Ca+nxY+5qmVl9ctB3wIrFvUoNMq0eES8Xh6jyBtF73ocBFKBzFfn1NQ==} + + '@kinobi-so/validators@0.20.4': + resolution: {integrity: sha512-PyhfM1fgsAPrDgMOB1VjvW+CytPTtLMLB0bSCU+0GRm8IoZ8pj74cIcB5XPjai3N5dU7kDMYz1nZLnCFsoXfLg==} + + '@kinobi-so/visitors-core@0.20.4': + resolution: {integrity: sha512-l4LCAOKL35tXn4jDZ4/gNdBeJYB5ACE4lgKQxL6oyII36hPe8pwCihIpjzHKDm9S93o9pKFN76ay5S3NnWANRw==} + + '@kinobi-so/visitors@0.20.4': + resolution: {integrity: sha512-sr+1qiU4sN5OfrVI//RqqHMKl5VapugkO3f/MHXGmFBDWANXJCIMmAXMMARzk/h6v76zswJ+NOHe0C3FLYb1xg==} + + '@noble/hashes@1.5.0': + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rollup/rollup-android-arm-eabi@4.22.4': + resolution: {integrity: sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.22.4': + resolution: {integrity: sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.22.4': + resolution: {integrity: sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.22.4': + resolution: {integrity: sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.22.4': + resolution: {integrity: sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.22.4': + resolution: {integrity: sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.22.4': + resolution: {integrity: sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.22.4': + resolution: {integrity: sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.22.4': + resolution: {integrity: sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.22.4': + resolution: {integrity: sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.22.4': + resolution: {integrity: sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.22.4': + resolution: {integrity: sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.22.4': + resolution: {integrity: sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.22.4': + resolution: {integrity: sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.22.4': + resolution: {integrity: sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.22.4': + resolution: {integrity: sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==} + cpu: [x64] + os: [win32] + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/fs-extra@11.0.4': + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + + '@types/jsonfile@6.1.4': + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + + '@types/minimist@1.2.5': + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + + '@types/node@18.19.50': + resolution: {integrity: sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==} + + '@types/ps-tree@1.1.6': + resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} + + '@types/which@3.0.4': + resolution: {integrity: sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==} + + a-sync-waterfall@1.0.1: + resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + bundle-require@5.0.0: + resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + + event-stream@3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fdir@6.3.0: + resolution: {integrity: sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + from@0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + fx@35.0.0: + resolution: {integrity: sha512-O07q+Lknrom5RUX/u53tjo2KTTLUnL0K703JbqMYb19ORijfJNvijzFqqYXEjdk25T9R14S6t6wHD8fCWXCM0g==} + hasBin: true + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@11.0.0: + resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} + engines: {node: 20 || >=22} + hasBin: true + + globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jackspeak@4.0.2: + resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} + engines: {node: 20 || >=22} + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + json-stable-stringify@1.1.1: + resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} + engines: {node: '>= 0.4'} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + + kinobi@0.20.4: + resolution: {integrity: sha512-/EkPQV1jVK4PkSWbdFb12EO7QMMkhNaoVaA0Le6MheCcnCHcWlLsz4Un/5eqSa/NNM8kCivGsEg/n9qDeKddTA==} + + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@11.0.1: + resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==} + engines: {node: 20 || >=22} + + map-stream@0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch@3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nunjucks@3.2.4: + resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} + engines: {node: '>= 6.9.0'} + hasBin: true + peerDependencies: + chokidar: ^3.3.0 + peerDependenciesMeta: + chokidar: + optional: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pause-stream@0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + ps-tree@1.2.0: + resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} + engines: {node: '>= 0.10'} + hasBin: true + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + + rollup@4.22.4: + resolution: {integrity: sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + split@0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + + stream-combiner@0.0.4: + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tinyglobby@0.2.6: + resolution: {integrity: sha512-NbBoFBpqfcgd1tCiO8Lkfdk+xrA7mlLR9zgvZcZWQQwU63XAfUePyd6wZBaU93Hqw347lHnwFzttAkemHzzz4g==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tsup@8.3.0: + resolution: {integrity: sha512-ALscEeyS03IomcuNdFdc0YWGVIkwH1Ws7nfTbAPuoILvEV2hpGQAY72LIOjglGo4ShWpZfpBqP/jpQVCzqYQag==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + typescript@5.5.2: + resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + webpod@0.0.2: + resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} + hasBin: true + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true + + zx@7.2.3: + resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==} + engines: {node: '>= 16.0.0'} hasBin: true + +snapshots: + + '@esbuild/aix-ppc64@0.23.1': + optional: true + + '@esbuild/android-arm64@0.23.1': + optional: true + + '@esbuild/android-arm@0.23.1': + optional: true + + '@esbuild/android-x64@0.23.1': + optional: true + + '@esbuild/darwin-arm64@0.23.1': + optional: true + + '@esbuild/darwin-x64@0.23.1': + optional: true + + '@esbuild/freebsd-arm64@0.23.1': + optional: true + + '@esbuild/freebsd-x64@0.23.1': + optional: true + + '@esbuild/linux-arm64@0.23.1': + optional: true + + '@esbuild/linux-arm@0.23.1': + optional: true + + '@esbuild/linux-ia32@0.23.1': + optional: true + + '@esbuild/linux-loong64@0.23.1': + optional: true + + '@esbuild/linux-mips64el@0.23.1': + optional: true + + '@esbuild/linux-ppc64@0.23.1': + optional: true + + '@esbuild/linux-riscv64@0.23.1': + optional: true + + '@esbuild/linux-s390x@0.23.1': + optional: true + + '@esbuild/linux-x64@0.23.1': + optional: true + + '@esbuild/netbsd-x64@0.23.1': + optional: true + + '@esbuild/openbsd-arm64@0.23.1': + optional: true + + '@esbuild/openbsd-x64@0.23.1': + optional: true + + '@esbuild/sunos-x64@0.23.1': + optional: true + + '@esbuild/win32-arm64@0.23.1': + optional: true + + '@esbuild/win32-ia32@0.23.1': + optional: true + + '@esbuild/win32-x64@0.23.1': + optional: true + + '@iarna/toml@2.2.5': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@kinobi-so/errors@0.20.4': dependencies: '@kinobi-so/node-types': 0.20.4 chalk: 5.3.0 commander: 12.1.0 - dev: true - /@kinobi-so/node-types@0.20.4: - resolution: {integrity: sha512-kFFXMC9nSemDj2itNeSj4VR9R6QTz0z7v3niwxHHq9IJ4TFPwpcZAt7aH++SGlCUeHG3iOHC2ZngFMhv+Ks/Fw==} - dev: true + '@kinobi-so/node-types@0.20.4': {} - /@kinobi-so/nodes-from-anchor@0.20.6: - resolution: {integrity: sha512-2ad1ILvnul1PqqlCkQ2uii9KCgcR9ne5jxXsxiTKUHhab6LmI6sCTR15FO4T+ZzgMVsvAe3ySrOmgDICUHr4eA==} + '@kinobi-so/nodes-from-anchor@0.20.6': dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 '@kinobi-so/visitors': 0.20.4 '@noble/hashes': 1.5.0 - dev: true - /@kinobi-so/nodes@0.20.4: - resolution: {integrity: sha512-zeGOOdOaKbMxqiZWNJx/JVGVWp4mzCkwDp3bG4J+x9+mQ1nQcyuPvHXeHmtBXa9IWp7AScXlyn5HddVzK/8ZRQ==} + '@kinobi-so/nodes@0.20.4': dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/node-types': 0.20.4 - dev: true - /@kinobi-so/renderers-core@0.20.4: - resolution: {integrity: sha512-feb0Fsw7UIj14JZ2LmHYyosT07K/Jrs7CvNYD2YF4g6WQz9mmy1l8Fa+gpVtoDdSHvfXrgzv8193p0QkRRBWmA==} + '@kinobi-so/renderers-core@0.20.4': dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 '@kinobi-so/visitors-core': 0.20.4 - dev: true - /@kinobi-so/renderers-js-umi@0.20.6(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-s7BN7Fa7VAr6tuTyLJVp6ceftFMqMRTopIAD4QyYGrJVoM+KLA0W7MpGo/pE61jRUCE24MZIJJjkX1qbuL4hfA==} + '@kinobi-so/renderers-js-umi@0.20.6(chokidar@3.6.0)(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 @@ -87,236 +1181,302 @@ packages: '@kinobi-so/validators': 0.20.4 '@kinobi-so/visitors-core': 0.20.4 '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) - nunjucks: 3.2.4 + nunjucks: 3.2.4(chokidar@3.6.0) prettier: 3.3.3 transitivePeerDependencies: - chokidar - fastestsmallesttextencoderdecoder - dev: true - /@kinobi-so/renderers-js@0.20.9(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-wrduoNFTvR23Gr+oMB1sFjhv6lvh3DHqDR7B5+MownuGsM1FG6iszSw3hZIbpOetKBjhWYNjHfE5QOZG56Wadg==} + '@kinobi-so/renderers-js@0.20.9(chokidar@3.6.0)(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 '@kinobi-so/renderers-core': 0.20.4 '@kinobi-so/visitors-core': 0.20.4 '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) - nunjucks: 3.2.4 + nunjucks: 3.2.4(chokidar@3.6.0) prettier: 3.3.3 transitivePeerDependencies: - chokidar - fastestsmallesttextencoderdecoder - dev: true - /@kinobi-so/renderers-rust@0.20.10(patch_hash=4enzrly4t4usefdxlj442bgdqq)(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-I4NINXbUJR3gPKoS/fNQ92YuCGFtKd+Ca+nxY+5qmVl9ctB3wIrFvUoNMq0eES8Xh6jyBtF73ocBFKBzFfn1NQ==} + '@kinobi-so/renderers-rust@0.20.10(patch_hash=4enzrly4t4usefdxlj442bgdqq)(chokidar@3.6.0)(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 '@kinobi-so/renderers-core': 0.20.4 '@kinobi-so/visitors-core': 0.20.4 '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) - nunjucks: 3.2.4 + nunjucks: 3.2.4(chokidar@3.6.0) transitivePeerDependencies: - chokidar - fastestsmallesttextencoderdecoder - dev: true - patched: true - /@kinobi-so/validators@0.20.4: - resolution: {integrity: sha512-PyhfM1fgsAPrDgMOB1VjvW+CytPTtLMLB0bSCU+0GRm8IoZ8pj74cIcB5XPjai3N5dU7kDMYz1nZLnCFsoXfLg==} + '@kinobi-so/validators@0.20.4': dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 '@kinobi-so/visitors-core': 0.20.4 - dev: true - /@kinobi-so/visitors-core@0.20.4: - resolution: {integrity: sha512-l4LCAOKL35tXn4jDZ4/gNdBeJYB5ACE4lgKQxL6oyII36hPe8pwCihIpjzHKDm9S93o9pKFN76ay5S3NnWANRw==} + '@kinobi-so/visitors-core@0.20.4': dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 json-stable-stringify: 1.1.1 - dev: true - /@kinobi-so/visitors@0.20.4: - resolution: {integrity: sha512-sr+1qiU4sN5OfrVI//RqqHMKl5VapugkO3f/MHXGmFBDWANXJCIMmAXMMARzk/h6v76zswJ+NOHe0C3FLYb1xg==} + '@kinobi-so/visitors@0.20.4': dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 '@kinobi-so/visitors-core': 0.20.4 - dev: true - /@noble/hashes@1.5.0: - resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} - engines: {node: ^14.21.3 || >=16} - dev: true + '@noble/hashes@1.5.0': {} - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - dev: true - /@solana/codecs-core@2.0.0-preview.2: - resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rollup/rollup-android-arm-eabi@4.22.4': + optional: true + + '@rollup/rollup-android-arm64@4.22.4': + optional: true + + '@rollup/rollup-darwin-arm64@4.22.4': + optional: true + + '@rollup/rollup-darwin-x64@4.22.4': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.22.4': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.22.4': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.22.4': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-x64-musl@4.22.4': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.22.4': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.22.4': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.22.4': + optional: true + + '@solana/codecs-core@2.0.0-preview.2': dependencies: '@solana/errors': 2.0.0-preview.2 - dev: true - /@solana/codecs-numbers@2.0.0-preview.2: - resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + '@solana/codecs-numbers@2.0.0-preview.2': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 - dev: true - /@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/codecs-numbers': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 fastestsmallesttextencoderdecoder: 1.0.22 - dev: true - /@solana/errors@2.0.0-preview.2: - resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} - hasBin: true + '@solana/errors@2.0.0-preview.2': dependencies: chalk: 5.3.0 commander: 12.1.0 - dev: true - /@types/fs-extra@11.0.4: - resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + '@types/estree@1.0.5': {} + + '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 '@types/node': 18.19.50 - dev: true - /@types/jsonfile@6.1.4: - resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + '@types/jsonfile@6.1.4': dependencies: '@types/node': 18.19.50 - dev: true - /@types/minimist@1.2.5: - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - dev: true + '@types/minimist@1.2.5': {} - /@types/node@18.19.50: - resolution: {integrity: sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==} + '@types/node@18.19.50': dependencies: undici-types: 5.26.5 - dev: true - /@types/ps-tree@1.1.6: - resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} - dev: true + '@types/ps-tree@1.1.6': {} - /@types/which@3.0.4: - resolution: {integrity: sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==} - dev: true + '@types/which@3.0.4': {} - /a-sync-waterfall@1.0.1: - resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} - dev: true + a-sync-waterfall@1.0.1: {} - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: true + ansi-regex@5.0.1: {} - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + asap@2.0.6: {} + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + bundle-require@5.0.0(esbuild@0.23.1): dependencies: - fill-range: 7.1.1 - dev: true + esbuild: 0.23.1 + load-tsconfig: 0.2.5 - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + cac@6.7.14: {} + + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 - dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true + chalk@5.3.0: {} - /commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - dev: true + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 - /commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - dev: true + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 - /data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - dev: true + color-name@1.1.4: {} - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + commander@12.1.0: {} + + commander@4.1.1: {} + + commander@5.1.0: {} + + consola@3.2.3: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + data-uri-to-buffer@4.0.1: {} + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - dev: true - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true + duplexer@0.1.2: {} - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 - dev: true - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true + es-errors@1.3.0: {} - /event-stream@3.3.4: - resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + + event-stream@3.3.4: dependencies: duplexer: 0.1.2 from: 0.1.7 @@ -325,299 +1485,345 @@ packages: split: 0.3.3 stream-combiner: 0.0.4 through: 2.3.8 - dev: true - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 - dev: true - /fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - dev: true + fastestsmallesttextencoderdecoder@1.0.22: {} - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.17.1: dependencies: reusify: 1.0.4 - dev: true - /fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} + fdir@6.3.0(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - dev: true - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 - dev: true - /from@0.1.7: - resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} - dev: true + from@0.1.7: {} - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true + fsevents@2.3.3: + optional: true - /fx@35.0.0: - resolution: {integrity: sha512-O07q+Lknrom5RUX/u53tjo2KTTLUnL0K703JbqMYb19ORijfJNvijzFqqYXEjdk25T9R14S6t6wHD8fCWXCM0g==} - hasBin: true - dev: true + function-bind@1.1.2: {} - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + fx@35.0.0: {} + + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 - dev: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + get-stream@6.0.1: {} + + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@11.0.0: + dependencies: + foreground-child: 3.3.0 + jackspeak: 4.0.2 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + + globby@13.2.2: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 - dev: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 - dev: true - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true + graceful-fs@4.2.11: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - dev: true - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.3: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - dev: true - /ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - dev: true + human-signals@2.1.0: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + ignore@5.3.2: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + is-stream@2.0.1: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isarray@2.0.5: {} - /json-stable-stringify@1.1.1: - resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} - engines: {node: '>= 0.4'} + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jackspeak@4.0.2: + dependencies: + '@isaacs/cliui': 8.0.2 + + joycon@3.1.1: {} + + json-stable-stringify@1.1.1: dependencies: call-bind: 1.0.7 isarray: 2.0.5 jsonify: 0.0.1 object-keys: 1.1.1 - dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonify@0.0.1: - resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} - dev: true + jsonify@0.0.1: {} - /kinobi@0.20.4: - resolution: {integrity: sha512-/EkPQV1jVK4PkSWbdFb12EO7QMMkhNaoVaA0Le6MheCcnCHcWlLsz4Un/5eqSa/NNM8kCivGsEg/n9qDeKddTA==} + kinobi@0.20.4: dependencies: '@kinobi-so/errors': 0.20.4 '@kinobi-so/nodes': 0.20.4 '@kinobi-so/validators': 0.20.4 '@kinobi-so/visitors': 0.20.4 - dev: true - /map-stream@0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} - dev: true + lilconfig@3.1.2: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + lines-and-columns@1.2.4: {} - /micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + load-tsconfig@0.2.5: {} + + lodash.sortby@4.7.0: {} + + lru-cache@10.4.3: {} + + lru-cache@11.0.1: {} + + map-stream@0.1.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + mimic-fn@2.1.0: {} - /node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - dev: true + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 - /node-fetch@3.3.1: - resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + node-domexception@1.0.0: {} + + node-fetch@3.3.1: dependencies: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - dev: true - /nunjucks@3.2.4: - resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} - engines: {node: '>= 6.9.0'} - hasBin: true - peerDependencies: - chokidar: ^3.3.0 - peerDependenciesMeta: - chokidar: - optional: true + normalize-path@3.0.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + nunjucks@3.2.4(chokidar@3.6.0): dependencies: a-sync-waterfall: 1.0.1 asap: 2.0.6 commander: 5.1.0 - dev: true + optionalDependencies: + chokidar: 3.6.0 - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-assign@4.1.1: {} - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + object-keys@1.1.1: {} - /pause-stream@0.0.11: - resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + package-json-from-dist@1.0.1: {} + + path-key@3.1.1: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.1 + minipass: 7.1.2 + + path-type@4.0.0: {} + + pause-stream@0.0.11: dependencies: through: 2.3.8 - dev: true - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picocolors@1.1.0: {} - /prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} - engines: {node: '>=14'} - hasBin: true - dev: true + picomatch@2.3.1: {} - /ps-tree@1.2.0: - resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} - engines: {node: '>= 0.10'} - hasBin: true + picomatch@4.0.2: {} + + pirates@4.0.6: {} + + postcss-load-config@6.0.1(yaml@2.5.1): + dependencies: + lilconfig: 3.1.2 + optionalDependencies: + yaml: 2.5.1 + + prettier@3.3.3: {} + + ps-tree@1.2.0: dependencies: event-stream: 3.3.4 - dev: true - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + punycode@2.3.1: {} - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + queue-microtask@1.2.3: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + resolve-from@5.0.0: {} + + reusify@1.0.4: {} + + rimraf@6.0.1: + dependencies: + glob: 11.0.0 + package-json-from-dist: 1.0.1 + + rollup@4.22.4: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.22.4 + '@rollup/rollup-android-arm64': 4.22.4 + '@rollup/rollup-darwin-arm64': 4.22.4 + '@rollup/rollup-darwin-x64': 4.22.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.22.4 + '@rollup/rollup-linux-arm-musleabihf': 4.22.4 + '@rollup/rollup-linux-arm64-gnu': 4.22.4 + '@rollup/rollup-linux-arm64-musl': 4.22.4 + '@rollup/rollup-linux-powerpc64le-gnu': 4.22.4 + '@rollup/rollup-linux-riscv64-gnu': 4.22.4 + '@rollup/rollup-linux-s390x-gnu': 4.22.4 + '@rollup/rollup-linux-x64-gnu': 4.22.4 + '@rollup/rollup-linux-x64-musl': 4.22.4 + '@rollup/rollup-win32-arm64-msvc': 4.22.4 + '@rollup/rollup-win32-ia32-msvc': 4.22.4 + '@rollup/rollup-win32-x64-msvc': 4.22.4 + fsevents: 2.3.3 + + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -625,79 +1831,157 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 - dev: true - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 - /split@0.3.3: - resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + shebang-regex@3.0.0: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + slash@4.0.0: {} + + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + split@0.3.3: dependencies: through: 2.3.8 - dev: true - /stream-combiner@0.0.4: - resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + stream-combiner@0.0.4: dependencies: duplexer: 0.1.2 - dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@2.0.0: {} + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + through@2.3.8: {} + + tinyglobby@0.2.6: + dependencies: + fdir: 6.3.0(picomatch@4.0.2) + picomatch: 4.0.2 + + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /typescript@5.5.2: - resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + tr46@1.0.1: + dependencies: + punycode: 2.3.1 - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + tree-kill@1.2.2: {} - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + ts-interface-checker@0.1.13: {} - /web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - dev: true + tsup@8.3.0(typescript@5.5.2)(yaml@2.5.1): + dependencies: + bundle-require: 5.0.0(esbuild@0.23.1) + cac: 6.7.14 + chokidar: 3.6.0 + consola: 3.2.3 + debug: 4.3.7 + esbuild: 0.23.1 + execa: 5.1.1 + joycon: 3.1.1 + picocolors: 1.1.0 + postcss-load-config: 6.0.1(yaml@2.5.1) + resolve-from: 5.0.0 + rollup: 4.22.4 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tinyglobby: 0.2.6 + tree-kill: 1.2.2 + optionalDependencies: + typescript: 5.5.2 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml - /webpod@0.0.2: - resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} - hasBin: true - dev: true + typescript@5.5.2: {} - /which@3.0.1: - resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + undici-types@5.26.5: {} + + universalify@2.0.1: {} + + web-streams-polyfill@3.3.3: {} + + webidl-conversions@4.0.2: {} + + webpod@0.0.2: {} + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /yaml@2.5.1: - resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} - engines: {node: '>= 14'} - hasBin: true - dev: true + which@3.0.1: + dependencies: + isexe: 2.0.0 - /zx@7.2.3: - resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==} - engines: {node: '>= 16.0.0'} - hasBin: true + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + yaml@2.5.1: {} + + zx@7.2.3: dependencies: '@types/fs-extra': 11.0.4 '@types/minimist': 1.2.5 @@ -714,4 +1998,3 @@ packages: webpod: 0.0.2 which: 3.0.1 yaml: 2.5.1 - dev: true From 8a29ae4320dde0c312b3caa93100162ae53d3bbb Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Fri, 27 Sep 2024 19:53:16 +0800 Subject: [PATCH 22/29] fix: test --- cli/src/main.rs | 11 +++--- extensions/puppet/tests/puppet.ts | 62 ++++++++++++++++--------------- 2 files changed, 38 insertions(+), 35 deletions(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index 8e1faf7..6ad7d22 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -491,11 +491,12 @@ fn dev_create_activated_device(args: DevCreateActivatedDeviceCliArgs) { match client.send_and_confirm_transaction(&transaction) { Ok(sig) => { - println!("Success: {:?}", sig); - println!("User: {}", user.pubkey()); - println!("Device: {}", device_pubkey); - println!("Mint: {}", did_mint_pubkey); - println!("AToken: {}", did_atoken_pubkey); + eprintln!("Success: {:?}", sig); + eprintln!("User: {}", user.pubkey()); + eprintln!("Device: {}", device_pubkey); + eprintln!("Mint: {}", did_mint_pubkey); + eprintln!("AToken: {}", did_atoken_pubkey); + println!("{},{}", did_mint_pubkey, did_atoken_pubkey); } Err(err) => { eprintln!("Error: {:?}", err); diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index 1cb9a8f..98627a7 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -50,8 +50,11 @@ describe("puppet program", () => { // device & nft let device: PublicKey; + let deviceMint: PublicKey; let deviceAta: PublicKey; + let mplMint: PublicKey; let mplAta: PublicKey; + let mplMetadata: PublicKey; // binding PDA let deviceCollectionBindingPDA: PublicKey; @@ -80,14 +83,13 @@ describe("puppet program", () => { console.log("productMint:", productPubkeyStr); product = new PublicKey(productPubkeyStr); - console.log("===") // create activated device - const { deviceAta: deviceAtaStr } = await createDevice( - payer.publicKey.toString(), + const { deviceMint: deviceMintStr, deviceAta: deviceAtaStr } = await createDevice( product.toString(), - device.toString() ); + console.log("deviceMint:", deviceMintStr); console.log("deviceAta:", deviceAtaStr); + deviceMint = new PublicKey(deviceMintStr); deviceAta = new PublicKey(deviceAtaStr); // create mpl collection nft @@ -101,15 +103,19 @@ describe("puppet program", () => { console.log("mplCollection:", mplCollection.toString()); // create mpl nft - const _mplAta = await createMplNft( + const {mplMint: mplMintStr, mplMetadata: mplMetadataStr, mplAta: mplAtaStr} = await createMplNft( provider.connection, payer, "test nft", "http://", _mplCollection ); - mplAta = new PublicKey(_mplAta); - console.log("mplAta:", mplCollection.toString()); + console.log("mplMint:", mplMintStr); + console.log("mplAta:", mplAtaStr); + console.log("mplMetadata:", mplMetadataStr); + mplMint = new PublicKey(mplMintStr); + mplAta = new PublicKey(mplAtaStr); + mplMetadata = new PublicKey(mplMetadataStr); const [deviceCollectionBindingPubkey] = PublicKey.findProgramAddressSync( [Buffer.from("device_collection_binding"), product.toBuffer()], @@ -145,6 +151,7 @@ describe("puppet program", () => { mplCollection, }) .accounts({ + vendor: payer.publicKey, payer: payer.publicKey, mplCollection, }) @@ -175,6 +182,12 @@ describe("puppet program", () => { mplAta, }) .accounts({ + mplMetadata, + mplAssociatedToken: mplAta, + deviceAssociatedToken: deviceAta, + deviceCollectionBinding: deviceCollectionBindingPDA, + mplCollectionBinding: mplCollectionBindingPDA, + owner: payer.publicKey, payer: payer.publicKey, }) .signers([payer]) @@ -218,30 +231,20 @@ const createProduct = async (name: string) => { }; const createDevice = async ( - vendorPubkey: string, productMint: string, - device: string ) => { const command = `cargo run dev-create-activated-device --vendor ../extensions/puppet/${KEY_PATH} --product ${productMint} --device ../extensions/puppet/${DEVICE_PATH} --user ../extensions/puppet/${KEY_PATH} 'DEVICE#1' -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1` - console.log(command) - const deviceMint = await executeCommandInDirectory( + const str = await executeCommandInDirectory( CLI_DIR, command, - true ); - console.log("deviceMint:", deviceMint) - - // const deviceAta = await executeCommandInDirectory( - // CLI_DIR, - // `cargo run dev-activate-device --user ../extensions/puppet/${KEY_PATH} --device ../extensions/puppet/${DEVICE_PATH} --vendor ${vendorPubkey} --product ${productMint} -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1`, - // true - // ); + const [deviceMint, deviceAta] = str.trimEnd().split(',') return { - deviceMint: deviceMint.trimEnd(), - deviceAta: deviceMint.trimEnd(), + deviceMint, + deviceAta, }; }; @@ -289,22 +292,21 @@ const createMplNft = async ( umi.use(signerIdentity(signer)); umi.use(mplTokenMetadata()); - const mint = generateSigner(umi); + const mplMint = generateSigner(umi); await createNft(umi, { - mint, + mint: mplMint, name, uri, sellerFeeBasisPoints: percentAmount(5.5), }).sendAndConfirm(umi); - const asset = await fetchDigitalAsset(umi, mint.publicKey); - console.log("mpl_mint:", asset.mint.publicKey); + // const asset = await fetchDigitalAsset(umi, mplMint.publicKey); const collectionMint = publicKey(collection); const collectionMetadata = findMetadataPda(umi, { mint: collectionMint }); await setAndVerifyCollection(umi, { - metadata: findMetadataPda(umi, { mint: asset.mint.publicKey }), + metadata: findMetadataPda(umi, { mint: mplMint.publicKey }), collectionAuthority: signer, collectionMint: collectionMint, collection: collectionMetadata, @@ -313,15 +315,15 @@ const createMplNft = async ( }), }).sendAndConfirm(umi); - console.log("collection verified"); - const mplAta = await getAssociatedTokenAddress( - new anchor.web3.PublicKey(asset.mint.publicKey), // The mint address of the created NFT + new anchor.web3.PublicKey(mplMint.publicKey), // The mint address of the created NFT new anchor.web3.PublicKey(keypairSigner.publicKey), // The wallet address of the NFT owner false, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID ); - return mplAta; + const mplMetadata = findMetadataPda(umi, { mint: mplMint.publicKey }); + + return {mplMint: mplMint.publicKey.toString(), mplAta: mplAta.toString(), mplMetadata: mplMetadata.toString().split(',')[0]}; }; From 170ecb9c9b71c6f275887104f662e8f5b7395c39 Mon Sep 17 00:00:00 2001 From: Jun Jiang <jasl9187@hotmail.com> Date: Fri, 27 Sep 2024 20:12:39 +0800 Subject: [PATCH 23/29] WIP --- .../puppet/programs/puppet/src/instructions/bind.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs index 0bdde87..3ad9939 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -2,9 +2,11 @@ use crate::constants::{DEVICE_MINT_SEED_PREFIX, DEPHY_ID_PROGRAM, SPL_2022_PROGR use crate::errors::ErrorCode; use crate::state::{DeviceBinding, DeviceCollectionBinding, MplBinding, MplCollectionBinding}; use anchor_lang::prelude::*; -use anchor_spl::associated_token::get_associated_token_address_with_program_id; -use anchor_spl::metadata::MetadataAccount; -use anchor_spl::token::TokenAccount; +use anchor_spl::{ + associated_token::{AssociatedToken, get_associated_token_address_with_program_id}, + metadata::MetadataAccount, + token_interface::TokenAccount, +}; use mpl_token_metadata::accounts::Metadata; #[derive(Accounts)] @@ -20,11 +22,11 @@ pub struct Bind<'info> { constraint = mpl_associated_token.key() == params.mpl_ata, constraint = mpl_associated_token.owner == owner.key() @ ErrorCode::NotNFTOwner )] - pub mpl_associated_token: Account<'info, TokenAccount>, + pub mpl_associated_token: InterfaceAccount<'info, TokenAccount>, #[account( constraint = device_associated_token.owner == owner.key() @ ErrorCode::NotDeviceOwner )] - pub device_associated_token: Account<'info, TokenAccount>, + pub device_associated_token: InterfaceAccount<'info, TokenAccount>, #[account( init, payer = payer, From 2409b63ffc305aaa9931ac68886dd54a7eae55a3 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Fri, 27 Sep 2024 21:03:06 +0800 Subject: [PATCH 24/29] fix: bind --- extensions/puppet/programs/puppet/src/instructions/bind.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs index 3ad9939..6b382bc 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -3,7 +3,7 @@ use crate::errors::ErrorCode; use crate::state::{DeviceBinding, DeviceCollectionBinding, MplBinding, MplCollectionBinding}; use anchor_lang::prelude::*; use anchor_spl::{ - associated_token::{AssociatedToken, get_associated_token_address_with_program_id}, + associated_token::get_associated_token_address_with_program_id, metadata::MetadataAccount, token_interface::TokenAccount, }; @@ -101,7 +101,7 @@ pub fn bind(ctx: Context<Bind>, params: BindParams) -> Result<()> { } device_binding.mpl_ata = params.mpl_ata; - mpl_binding.device_ata = params.device; + mpl_binding.device_ata = device_ata; Ok(()) } From 89eaccf5c1ce1e40a7b11a4f2a7c9a5072cf6f63 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Fri, 27 Sep 2024 21:36:38 +0800 Subject: [PATCH 25/29] chore: add check text --- .../puppet/programs/puppet/src/instructions/bind_collection.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs index 9655883..2e3f59b 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs @@ -7,7 +7,7 @@ use anchor_lang::prelude::*; params: BindCollectionParams )] pub struct BindCollection<'info> { - /// CHECK: + /// CHECK: generate by seeds and params #[account( constraint = product_mint.key() == params.device_collection, seeds = [PRODUCT_MINT_SEED_PREFIX, vendor.key().as_ref(), params.product_metadata_name.as_ref()], From 156a4917dcf0cd13f01193a6e062520baef45b44 Mon Sep 17 00:00:00 2001 From: Jun Jiang <jasl9187@hotmail.com> Date: Fri, 27 Sep 2024 22:01:08 +0800 Subject: [PATCH 26/29] Fix puppet test --- cli/src/main.rs | 2 +- extensions/puppet/Cargo.lock | 106 +++++++++--------- .../puppet/programs/puppet/src/constants.rs | 4 +- extensions/puppet/tests/puppet.ts | 8 +- 4 files changed, 61 insertions(+), 59 deletions(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index 6ad7d22..08749d3 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -496,7 +496,7 @@ fn dev_create_activated_device(args: DevCreateActivatedDeviceCliArgs) { eprintln!("Device: {}", device_pubkey); eprintln!("Mint: {}", did_mint_pubkey); eprintln!("AToken: {}", did_atoken_pubkey); - println!("{},{}", did_mint_pubkey, did_atoken_pubkey); + println!("{},{},{}", device_pubkey, did_mint_pubkey, did_atoken_pubkey); } Err(err) => { eprintln!("Error: {:?}", err); diff --git a/extensions/puppet/Cargo.lock b/extensions/puppet/Cargo.lock index 5f750c0..2ae44fb 100644 --- a/extensions/puppet/Cargo.lock +++ b/extensions/puppet/Cargo.lock @@ -164,7 +164,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0bb0e0911ad4a70cab880cdd6287fe1e880a1a9d8e4e6defa8e9044b9796a6c" dependencies = [ "anchor-syn", - "borsh-derive-internal 0.10.3", + "borsh-derive-internal 0.10.4", "proc-macro2", "quote", "syn 1.0.109", @@ -200,7 +200,7 @@ dependencies = [ "arrayref", "base64 0.21.7", "bincode", - "borsh 0.10.3", + "borsh 0.10.4", "bytemuck", "getrandom 0.2.15", "solana-program", @@ -269,9 +269,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "ark-bn254" @@ -392,9 +392,9 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" @@ -421,9 +421,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "base64" @@ -515,11 +515,11 @@ dependencies = [ [[package]] name = "borsh" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +checksum = "115e54d64eb62cdebad391c19efc9dce4981c690c85a33a12199d99bb9546fee" dependencies = [ - "borsh-derive 0.10.3", + "borsh-derive 0.10.4", "hashbrown 0.13.2", ] @@ -548,12 +548,12 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +checksum = "831213f80d9423998dd696e2c5345aba6be7a0bd8cd19e31c5243e13df1cef89" dependencies = [ - "borsh-derive-internal 0.10.3", - "borsh-schema-derive-internal 0.10.3", + "borsh-derive-internal 0.10.4", + "borsh-schema-derive-internal 0.10.4", "proc-macro-crate 0.1.5", "proc-macro2", "syn 1.0.109", @@ -586,9 +586,9 @@ dependencies = [ [[package]] name = "borsh-derive-internal" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" +checksum = "65d6ba50644c98714aa2a70d13d7df3cd75cd2b523a2b452bf010443800976b3" dependencies = [ "proc-macro2", "quote", @@ -608,9 +608,9 @@ dependencies = [ [[package]] name = "borsh-schema-derive-internal" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +checksum = "276691d96f063427be83e6692b86148e488ebba9f48f77788724ca027ba3b6d4" dependencies = [ "proc-macro2", "quote", @@ -650,9 +650,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.17.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" dependencies = [ "bytemuck_derive", ] @@ -686,9 +686,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.15" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" +checksum = "9540e661f81799159abee814118cc139a2004b3a3aa3ea37724a1b66530b90e0" dependencies = [ "jobserver", "libc", @@ -753,9 +753,9 @@ checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -1175,9 +1175,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libsecp256k1" @@ -1297,7 +1297,7 @@ version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caf0f61b553e424a6234af1268456972ee66c2222e1da89079242251fa7479e5" dependencies = [ - "borsh 0.10.3", + "borsh 0.10.4", "num-derive 0.3.3", "num-traits", "solana-program", @@ -1651,9 +1651,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "355ae415ccd3a04315d3f8246e86d67689ea74d88d915576e1589a351062a13b" dependencies = [ "bitflags", ] @@ -1728,9 +1728,9 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -1746,9 +1746,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", @@ -1757,9 +1757,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", "memchr", @@ -1769,9 +1769,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -1940,7 +1940,7 @@ dependencies = [ "bincode", "bitflags", "blake3", - "borsh 0.10.3", + "borsh 0.10.4", "borsh 0.9.3", "borsh 1.5.1", "bs58 0.4.0", @@ -2348,18 +2348,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", @@ -2432,9 +2432,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap", "serde", @@ -2451,24 +2451,24 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "universal-hash" @@ -2679,9 +2679,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.18" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] diff --git a/extensions/puppet/programs/puppet/src/constants.rs b/extensions/puppet/programs/puppet/src/constants.rs index 16abb33..5195d14 100644 --- a/extensions/puppet/programs/puppet/src/constants.rs +++ b/extensions/puppet/programs/puppet/src/constants.rs @@ -1,6 +1,6 @@ use anchor_lang::prelude::Pubkey; -pub const DEPHY_ID_PROGRAM: Pubkey = Pubkey::new_from_array([10, 104, 87, 71, 135, 225, 232, 69, 21, 185, 195, 236, 216, 23, 119, 79, 176, 27, 100, 193, 237, 38, 213, 50, 121, 184, 103, 109, 227, 77, 99, 44]); -pub const SPL_2022_PROGRAM: Pubkey = Pubkey::new_from_array([6, 221, 246, 225, 238, 117, 143, 222, 24, 66, 93, 188, 228, 108, 205, 218, 182, 26, 252, 77, 131, 185, 13, 39, 254, 189, 249, 40, 216, 161, 139, 252]); +pub const DEPHY_ID_PROGRAM: Pubkey = Pubkey::new_from_array([10u8, 104u8, 87u8, 71u8, 135u8, 225u8, 232u8, 69u8, 21u8, 185u8, 195u8, 236u8, 216u8, 23u8, 119u8, 79u8, 176u8, 27u8, 100u8, 193u8, 237u8, 38u8, 213u8, 50u8, 121u8, 184u8, 103u8, 109u8, 227u8, 77u8, 99u8, 44u8]); +pub const SPL_2022_PROGRAM: Pubkey = Pubkey::new_from_array([6u8, 221u8, 246u8, 225u8, 238u8, 117u8, 143u8, 222u8, 24u8, 66u8, 93u8, 188u8, 228u8, 108u8, 205u8, 218u8, 182u8, 26u8, 252u8, 77u8, 131u8, 185u8, 13u8, 39u8, 254u8, 189u8, 249u8, 40u8, 216u8, 161u8, 139u8, 252u8]); pub const PRODUCT_MINT_SEED_PREFIX: &[u8; 16] = b"DePHY_ID-PRODUCT"; pub const DEVICE_MINT_SEED_PREFIX: &[u8; 15] = b"DePHY_ID-DEVICE"; diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index 98627a7..d4260f5 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -75,7 +75,6 @@ describe("puppet program", () => { // write device secret key json const deviceKeypair = Keypair.generate(); - device = new PublicKey(deviceKeypair.publicKey); fs.writeFileSync(DEVICE_PATH, `[${deviceKeypair.secretKey.toString()}]`); // create product @@ -84,11 +83,13 @@ describe("puppet program", () => { product = new PublicKey(productPubkeyStr); // create activated device - const { deviceMint: deviceMintStr, deviceAta: deviceAtaStr } = await createDevice( + const { devicePubKey: devicePubKeyStr, deviceMint: deviceMintStr, deviceAta: deviceAtaStr } = await createDevice( product.toString(), ); + console.log("devicePubKey:", devicePubKeyStr); console.log("deviceMint:", deviceMintStr); console.log("deviceAta:", deviceAtaStr); + device = new PublicKey(devicePubKeyStr); deviceMint = new PublicKey(deviceMintStr); deviceAta = new PublicKey(deviceAtaStr); @@ -240,9 +241,10 @@ const createDevice = async ( command, ); - const [deviceMint, deviceAta] = str.trimEnd().split(',') + const [devicePubKey, deviceMint, deviceAta] = str.trimEnd().split(',') return { + devicePubKey, deviceMint, deviceAta, }; From 1ab3a6f344857051d6443c7bcdfa7a7285df77b3 Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Fri, 27 Sep 2024 22:50:27 +0800 Subject: [PATCH 27/29] feat: initialize --- .../puppet/programs/puppet/src/constants.rs | 1 - .../programs/puppet/src/instructions/bind.rs | 7 +- .../src/instructions/bind_collection.rs | 10 ++- .../puppet/src/instructions/initialize.rs | 30 ++++++++ .../programs/puppet/src/instructions/mod.rs | 2 + extensions/puppet/programs/puppet/src/lib.rs | 4 ++ .../programs/puppet/src/state/global.rs | 7 ++ .../puppet/programs/puppet/src/state/mod.rs | 2 + extensions/puppet/tests/puppet.ts | 70 +++++++++++++------ 9 files changed, 102 insertions(+), 31 deletions(-) create mode 100644 extensions/puppet/programs/puppet/src/instructions/initialize.rs create mode 100644 extensions/puppet/programs/puppet/src/state/global.rs diff --git a/extensions/puppet/programs/puppet/src/constants.rs b/extensions/puppet/programs/puppet/src/constants.rs index 5195d14..543be25 100644 --- a/extensions/puppet/programs/puppet/src/constants.rs +++ b/extensions/puppet/programs/puppet/src/constants.rs @@ -1,6 +1,5 @@ use anchor_lang::prelude::Pubkey; -pub const DEPHY_ID_PROGRAM: Pubkey = Pubkey::new_from_array([10u8, 104u8, 87u8, 71u8, 135u8, 225u8, 232u8, 69u8, 21u8, 185u8, 195u8, 236u8, 216u8, 23u8, 119u8, 79u8, 176u8, 27u8, 100u8, 193u8, 237u8, 38u8, 213u8, 50u8, 121u8, 184u8, 103u8, 109u8, 227u8, 77u8, 99u8, 44u8]); pub const SPL_2022_PROGRAM: Pubkey = Pubkey::new_from_array([6u8, 221u8, 246u8, 225u8, 238u8, 117u8, 143u8, 222u8, 24u8, 66u8, 93u8, 188u8, 228u8, 108u8, 205u8, 218u8, 182u8, 26u8, 252u8, 77u8, 131u8, 185u8, 13u8, 39u8, 254u8, 189u8, 249u8, 40u8, 216u8, 161u8, 139u8, 252u8]); pub const PRODUCT_MINT_SEED_PREFIX: &[u8; 16] = b"DePHY_ID-PRODUCT"; pub const DEVICE_MINT_SEED_PREFIX: &[u8; 15] = b"DePHY_ID-DEVICE"; diff --git a/extensions/puppet/programs/puppet/src/instructions/bind.rs b/extensions/puppet/programs/puppet/src/instructions/bind.rs index 6b382bc..af40cac 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind.rs @@ -1,6 +1,6 @@ -use crate::constants::{DEVICE_MINT_SEED_PREFIX, DEPHY_ID_PROGRAM, SPL_2022_PROGRAM}; +use crate::constants::{DEVICE_MINT_SEED_PREFIX, SPL_2022_PROGRAM}; use crate::errors::ErrorCode; -use crate::state::{DeviceBinding, DeviceCollectionBinding, MplBinding, MplCollectionBinding}; +use crate::state::{DeviceBinding, DeviceCollectionBinding, Global, MplBinding, MplCollectionBinding}; use anchor_lang::prelude::*; use anchor_spl::{ associated_token::get_associated_token_address_with_program_id, @@ -45,6 +45,7 @@ pub struct Bind<'info> { pub mpl_binding: Account<'info, MplBinding>, pub device_collection_binding: Account<'info, DeviceCollectionBinding>, pub mpl_collection_binding: Account<'info, MplCollectionBinding>, + pub global: Account<'info, Global>, #[account(mut)] pub owner: Signer<'info>, #[account(mut)] @@ -69,7 +70,7 @@ pub fn bind(ctx: Context<Bind>, params: BindParams) -> Result<()> { ctx.accounts.mpl_collection_binding.device_collection.as_ref(), params.device.as_ref(), ], - &DEPHY_ID_PROGRAM, + &ctx.accounts.global.dephy_id_program, ); let device_ata = get_associated_token_address_with_program_id( diff --git a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs index 2e3f59b..f914f79 100644 --- a/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs +++ b/extensions/puppet/programs/puppet/src/instructions/bind_collection.rs @@ -1,5 +1,5 @@ -use crate::constants::{DEPHY_ID_PROGRAM, PRODUCT_MINT_SEED_PREFIX}; -use crate::state::{DeviceCollectionBinding, MplCollectionBinding}; +use crate::constants::PRODUCT_MINT_SEED_PREFIX; +use crate::state::{DeviceCollectionBinding, Global, MplCollectionBinding}; use anchor_lang::prelude::*; #[derive(Accounts)] @@ -12,7 +12,7 @@ pub struct BindCollection<'info> { constraint = product_mint.key() == params.device_collection, seeds = [PRODUCT_MINT_SEED_PREFIX, vendor.key().as_ref(), params.product_metadata_name.as_ref()], bump, - seeds::program = dephy_id_program.key() + seeds::program = global.dephy_id_program.key() )] pub product_mint: AccountInfo<'info>, /// CHECK: We will manually verify the metadata structure @@ -36,9 +36,7 @@ pub struct BindCollection<'info> { bump )] pub mpl_collection_binding: Account<'info, MplCollectionBinding>, - /// CHECK: This is the hardcoded DePhy ID Program address passed in as an AccountInfo - #[account(address = DEPHY_ID_PROGRAM)] - pub dephy_id_program: AccountInfo<'info>, + pub global: Account<'info, Global>, #[account(mut)] pub vendor: Signer<'info>, #[account(mut)] diff --git a/extensions/puppet/programs/puppet/src/instructions/initialize.rs b/extensions/puppet/programs/puppet/src/instructions/initialize.rs new file mode 100644 index 0000000..1618cf2 --- /dev/null +++ b/extensions/puppet/programs/puppet/src/instructions/initialize.rs @@ -0,0 +1,30 @@ +use crate::state::Global; +use anchor_lang::prelude::*; + +#[derive(AnchorSerialize, AnchorDeserialize, Debug, Clone)] +pub struct InitializeParams { + pub dephy_id_program: Pubkey, +} + +#[derive(Accounts)] +#[instruction(params: InitializeParams)] +pub struct Initialize<'info> { + #[account( + init, + payer = payer, + space = 8 + 32 + 1, + seeds = [b"global", payer.key().as_ref()], + bump, + )] + pub global: Account<'info, Global>, + #[account(mut)] + pub payer: Signer<'info>, + pub rent: Sysvar<'info, Rent>, + pub system_program: Program<'info, System>, +} + +pub fn initialize(ctx: Context<Initialize>, params: InitializeParams) -> Result<()> { + let global = &mut ctx.accounts.global; + global.dephy_id_program = params.dephy_id_program; + Ok(()) +} diff --git a/extensions/puppet/programs/puppet/src/instructions/mod.rs b/extensions/puppet/programs/puppet/src/instructions/mod.rs index 5d896ae..bdd8bec 100644 --- a/extensions/puppet/programs/puppet/src/instructions/mod.rs +++ b/extensions/puppet/programs/puppet/src/instructions/mod.rs @@ -1,3 +1,4 @@ +pub mod initialize; pub mod bind_collection; pub mod bind; pub mod check_bound_by_device; @@ -5,6 +6,7 @@ pub mod check_bound_by_nft; pub mod get_nft_by_device; pub mod get_device_by_nft; +pub use initialize::*; pub use bind_collection::*; pub use bind::*; pub use check_bound_by_device::*; diff --git a/extensions/puppet/programs/puppet/src/lib.rs b/extensions/puppet/programs/puppet/src/lib.rs index 0f48357..7cb7621 100644 --- a/extensions/puppet/programs/puppet/src/lib.rs +++ b/extensions/puppet/programs/puppet/src/lib.rs @@ -12,6 +12,10 @@ declare_id!("6nxvjh3D3kLkkb25sgRUdyomfYqeoUv7gfRFgcScy6jN"); pub mod puppet { use super::*; + pub fn initialize(ctx: Context<Initialize>, params: InitializeParams) -> Result<()> { + instructions::initialize(ctx, params) + } + pub fn bind_collection(ctx: Context<BindCollection>, params: BindCollectionParams) -> Result<()> { instructions::bind_collection(ctx, params) } diff --git a/extensions/puppet/programs/puppet/src/state/global.rs b/extensions/puppet/programs/puppet/src/state/global.rs new file mode 100644 index 0000000..95fb12f --- /dev/null +++ b/extensions/puppet/programs/puppet/src/state/global.rs @@ -0,0 +1,7 @@ +use anchor_lang::prelude::*; + +#[account] +pub struct Global { + pub dephy_id_program: Pubkey, + pub bump: u8, +} \ No newline at end of file diff --git a/extensions/puppet/programs/puppet/src/state/mod.rs b/extensions/puppet/programs/puppet/src/state/mod.rs index 02c8bce..dbcdd28 100644 --- a/extensions/puppet/programs/puppet/src/state/mod.rs +++ b/extensions/puppet/programs/puppet/src/state/mod.rs @@ -1,8 +1,10 @@ +pub mod global; pub mod device_collection_binding; pub mod mpl_collection_binding; pub mod device_binding; pub mod mpl_binding; +pub use global::*; pub use device_collection_binding::*; pub use mpl_collection_binding::*; pub use device_binding::*; diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index d4260f5..bb8ac19 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -32,6 +32,7 @@ import { Puppet } from "../target/types/puppet"; const CLI_DIR = "../../cli"; const KEY_PATH = "tests/key.json"; const DEVICE_PATH = "tests/device.json"; +const DEPHY_ID_PROGEAM = "hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1"; const execPromise = promisify(exec); describe("puppet program", () => { @@ -56,6 +57,9 @@ describe("puppet program", () => { let mplAta: PublicKey; let mplMetadata: PublicKey; + // global PDA + let globalPDA: PublicKey; + // binding PDA let deviceCollectionBindingPDA: PublicKey; let mplCollectionBindingPDA: PublicKey; @@ -83,9 +87,11 @@ describe("puppet program", () => { product = new PublicKey(productPubkeyStr); // create activated device - const { devicePubKey: devicePubKeyStr, deviceMint: deviceMintStr, deviceAta: deviceAtaStr } = await createDevice( - product.toString(), - ); + const { + devicePubKey: devicePubKeyStr, + deviceMint: deviceMintStr, + deviceAta: deviceAtaStr, + } = await createDevice(product.toString()); console.log("devicePubKey:", devicePubKeyStr); console.log("deviceMint:", deviceMintStr); console.log("deviceAta:", deviceAtaStr); @@ -104,7 +110,11 @@ describe("puppet program", () => { console.log("mplCollection:", mplCollection.toString()); // create mpl nft - const {mplMint: mplMintStr, mplMetadata: mplMetadataStr, mplAta: mplAtaStr} = await createMplNft( + const { + mplMint: mplMintStr, + mplMetadata: mplMetadataStr, + mplAta: mplAtaStr, + } = await createMplNft( provider.connection, payer, "test nft", @@ -118,6 +128,21 @@ describe("puppet program", () => { mplAta = new PublicKey(mplAtaStr); mplMetadata = new PublicKey(mplMetadataStr); + await program.methods + .initialize({ + dephyIdProgram: new PublicKey(DEPHY_ID_PROGEAM), + }) + .accounts({ + payer: payer.publicKey, + }) + .signers([payer]) + .rpc(); + + const [globalPubkey] = PublicKey.findProgramAddressSync( + [Buffer.from("global"), payer.publicKey.toBuffer()], + program.programId + ); + const [deviceCollectionBindingPubkey] = PublicKey.findProgramAddressSync( [Buffer.from("device_collection_binding"), product.toBuffer()], program.programId @@ -138,12 +163,18 @@ describe("puppet program", () => { program.programId ); + globalPDA = globalPubkey; deviceCollectionBindingPDA = deviceCollectionBindingPubkey; mplCollectionBindingPDA = mplCollectionBindingPubkey; deviceBindingPDA = deviceBindingPubkey; mplBindingPDA = mplBindingPubkey; }); + it("initialized", async () => { + const global = await program.account.global.fetch(globalPDA); + assert.equal(global.dephyIdProgram.toString(), DEPHY_ID_PROGEAM); + }); + it("binds device collection and mpl collection", async () => { await program.methods .bindCollection({ @@ -152,6 +183,7 @@ describe("puppet program", () => { mplCollection, }) .accounts({ + global: globalPDA, vendor: payer.publicKey, payer: payer.publicKey, mplCollection, @@ -183,11 +215,12 @@ describe("puppet program", () => { mplAta, }) .accounts({ + global: globalPDA, mplMetadata, mplAssociatedToken: mplAta, deviceAssociatedToken: deviceAta, deviceCollectionBinding: deviceCollectionBindingPDA, - mplCollectionBinding: mplCollectionBindingPDA, + mplCollectionBinding: mplCollectionBindingPDA, owner: payer.publicKey, payer: payer.publicKey, }) @@ -221,27 +254,18 @@ async function executeCommandInDirectory( } const createProduct = async (name: string) => { - const command = `cargo run create-product --vendor ../extensions/puppet/${KEY_PATH} '${name}' 'SYMBOL' 'METADATA_URI' -m desc="First Product by Example Vendor" -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1` - console.log(command) + const command = `cargo run create-product --vendor ../extensions/puppet/${KEY_PATH} '${name}' 'SYMBOL' 'METADATA_URI' -m desc="First Product by Example Vendor" -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1`; - const productMint = await executeCommandInDirectory( - CLI_DIR, - command - ); + const productMint = await executeCommandInDirectory(CLI_DIR, command); return productMint.trimEnd(); }; -const createDevice = async ( - productMint: string, -) => { - const command = `cargo run dev-create-activated-device --vendor ../extensions/puppet/${KEY_PATH} --product ${productMint} --device ../extensions/puppet/${DEVICE_PATH} --user ../extensions/puppet/${KEY_PATH} 'DEVICE#1' -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1` +const createDevice = async (productMint: string) => { + const command = `cargo run dev-create-activated-device --vendor ../extensions/puppet/${KEY_PATH} --product ${productMint} --device ../extensions/puppet/${DEVICE_PATH} --user ../extensions/puppet/${KEY_PATH} 'DEVICE#1' -u http://127.0.0.1:8899 -p hdMghjD73uASxgJXi6e1mGPsXqnADMsrqB1bveqABP1`; - const str = await executeCommandInDirectory( - CLI_DIR, - command, - ); + const str = await executeCommandInDirectory(CLI_DIR, command); - const [devicePubKey, deviceMint, deviceAta] = str.trimEnd().split(',') + const [devicePubKey, deviceMint, deviceAta] = str.trimEnd().split(","); return { devicePubKey, @@ -327,5 +351,9 @@ const createMplNft = async ( const mplMetadata = findMetadataPda(umi, { mint: mplMint.publicKey }); - return {mplMint: mplMint.publicKey.toString(), mplAta: mplAta.toString(), mplMetadata: mplMetadata.toString().split(',')[0]}; + return { + mplMint: mplMint.publicKey.toString(), + mplAta: mplAta.toString(), + mplMetadata: mplMetadata.toString().split(",")[0], + }; }; From 5a249b47c85f0a3378607fba6ec5918bbae4f25e Mon Sep 17 00:00:00 2001 From: CanvasL <746591811@qq.com> Date: Fri, 27 Sep 2024 23:26:48 +0800 Subject: [PATCH 28/29] feat: add accounts for cli commands --- extensions/puppet/client/index.ts | 25 ++++++++++++++++++------- extensions/puppet/tests/puppet.ts | 8 +++----- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/extensions/puppet/client/index.ts b/extensions/puppet/client/index.ts index 4ed6130..a732452 100644 --- a/extensions/puppet/client/index.ts +++ b/extensions/puppet/client/index.ts @@ -32,11 +32,17 @@ import path from "path"; const DEPHY_ID_PROGRAM = new PublicKey( "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" ); +const PROGRAM_PAYER = new PublicKey(""); const DEV_RPC = "https://api.devnet.solana.com"; const SECRET_KEY = fs.readFileSync( path.join(__dirname, "../keypair.json"), "utf-8" ); +const program = anchor.workspace.Puppet as Program<Puppet>; +const [GLOBAL_PDA] = PublicKey.findProgramAddressSync( + [Buffer.from("global"), PROGRAM_PAYER.toBuffer()], + program.programId +); yargs(hideBin(process.argv)) .command( @@ -92,23 +98,24 @@ yargs(hideBin(process.argv)) umi.use(signerIdentity(signer)); umi.use(mplTokenMetadata()); - const mint = generateSigner(umi); + const mplMint = generateSigner(umi); await createNft(umi, { - mint, + mint: mplMint, name: args.name, uri: args.url, sellerFeeBasisPoints: percentAmount(5.5), }).sendAndConfirm(umi); - const asset = await fetchDigitalAsset(umi, mint.publicKey); - console.log("asset:", asset.publicKey); - console.log("mpl_mint:", asset.mint.publicKey); + const mplMetadata = findMetadataPda(umi, { mint: mplMint.publicKey }); + + console.log("mplMint:", mplMint.publicKey); + console.log("mplMetadata:", mplMetadata); const collectionMint = publicKey(args.collection); const collectionMetadata = findMetadataPda(umi, { mint: collectionMint }); await setAndVerifyCollection(umi, { - metadata: findMetadataPda(umi, { mint: asset.mint.publicKey }), + metadata: mplMetadata, collectionAuthority: signer, collectionMint: collectionMint, collection: collectionMetadata, @@ -120,7 +127,7 @@ yargs(hideBin(process.argv)) console.log("collection verified"); const mplAta = await getAssociatedTokenAddress( - new anchor.web3.PublicKey(asset.mint.publicKey), // The mint address of the created NFT + new anchor.web3.PublicKey(mplMint.publicKey), // The mint address of the created NFT new anchor.web3.PublicKey(keypair.publicKey), // The wallet address of the NFT owner false, TOKEN_PROGRAM_ID, @@ -159,6 +166,7 @@ yargs(hideBin(process.argv)) mplCollection: new PublicKey(args.mplCollection), }) .accounts({ + global: GLOBAL_PDA, mplCollection: new PublicKey(args.mplCollection), vendor, payer: payer.publicKey, @@ -174,6 +182,7 @@ yargs(hideBin(process.argv)) "Bind device to metaplex nft", { device: { type: "string", demandOption: true }, // device address + mplMetadata: { type: "string", demandOption: true }, mplAta: { type: "string", demandOption: true }, // Metaplex associated token address }, async (args) => { @@ -228,6 +237,8 @@ yargs(hideBin(process.argv)) mplAta: new PublicKey(args.mplAta), }) .accounts({ + global: GLOBAL_PDA, + mplMetadata: args.mplMetadata, mplAssociatedToken, // The ATA for the Metaplex NFT deviceAssociatedToken, deviceCollectionBinding: deviceCollectionBindingPda[0], // Device collection binding PDA diff --git a/extensions/puppet/tests/puppet.ts b/extensions/puppet/tests/puppet.ts index bb8ac19..3c7f434 100644 --- a/extensions/puppet/tests/puppet.ts +++ b/extensions/puppet/tests/puppet.ts @@ -326,13 +326,13 @@ const createMplNft = async ( sellerFeeBasisPoints: percentAmount(5.5), }).sendAndConfirm(umi); - // const asset = await fetchDigitalAsset(umi, mplMint.publicKey); - const collectionMint = publicKey(collection); const collectionMetadata = findMetadataPda(umi, { mint: collectionMint }); + const mplMetadata = findMetadataPda(umi, { mint: mplMint.publicKey }); + await setAndVerifyCollection(umi, { - metadata: findMetadataPda(umi, { mint: mplMint.publicKey }), + metadata: mplMetadata, collectionAuthority: signer, collectionMint: collectionMint, collection: collectionMetadata, @@ -349,8 +349,6 @@ const createMplNft = async ( ASSOCIATED_TOKEN_PROGRAM_ID ); - const mplMetadata = findMetadataPda(umi, { mint: mplMint.publicKey }); - return { mplMint: mplMint.publicKey.toString(), mplAta: mplAta.toString(), From d05636d17975008d8f13972833c974c45aac1721 Mon Sep 17 00:00:00 2001 From: Kabie <kabie+git@outlook.com> Date: Sat, 28 Sep 2024 00:09:40 +0800 Subject: [PATCH 29/29] remove token 2022 fixture --- extensions/puppet/Anchor.toml | 6 +----- .../puppet/tests/fixtures/spl_token_2022.so | Bin 691008 -> 0 bytes 2 files changed, 1 insertion(+), 5 deletions(-) delete mode 100644 extensions/puppet/tests/fixtures/spl_token_2022.so diff --git a/extensions/puppet/Anchor.toml b/extensions/puppet/Anchor.toml index c66ee65..86d4c7b 100644 --- a/extensions/puppet/Anchor.toml +++ b/extensions/puppet/Anchor.toml @@ -22,9 +22,5 @@ program = "../../target/deploy/dephy_id_program.so" address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" program = "tests/fixtures/mpl_token_metadata.so" -[[test.genesis]] -address = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" -program = "tests/fixtures/spl_token_2022.so" - [scripts] -test = "bun run test" +test = "bun run -b test" diff --git a/extensions/puppet/tests/fixtures/spl_token_2022.so b/extensions/puppet/tests/fixtures/spl_token_2022.so deleted file mode 100644 index 575282f16150ea85b57ce56e638b3c4351f12978..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691008 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%0DgRT+z@^+&Av|@ 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 zkbI5zkII}p0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}Q zJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA? zz!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X z0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmP zC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>q zcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO) zfG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H( z1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2n zPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ z@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp z08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn z3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~D zo&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc z;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G z0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D z6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}Q zJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA? zz!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmPC%_Zn3Gf7X z0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmP zC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b6~G0iFO)fG5Bc;0f>q zcmg~Do&ZmPC%_Zn3Gf7X0z3hp08fA?z!TsJ@C0}QJOQ2nPk<-D6W|H(1b71fpC|Bt E08t@N82|tP