From dea310caab86f8f8512a72464f6507d6a2763bee Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Mon, 10 Feb 2025 14:29:50 +0300 Subject: [PATCH 01/41] gitignore --- .gitignore | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a3bc93af..d271a901 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,11 @@ typechain-types # Hardhat files cache artifacts -projects/vaults/storageLayout +*.bin +*.abi + +# Inception LRT custom ignore +*.tgz +/projects/tests/omnivault-rebalancer/contracts/ +/projects/omnichain-deployer/contracts/ + From b436ff3aa6d80b0c9b48e88e72982b31e2427554 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Mon, 10 Feb 2025 14:47:14 +0300 Subject: [PATCH 02/41] bridge-lz --- projects/bridge-lz/README.md | 108 + .../FraxFerryLZCrossChainAdapterL2.sol | 147 + .../LayerZero/LZCrossChainAdapterL1.sol | 74 + .../LayerZero/LZCrossChainAdapterL2.sol | 90 + .../LayerZero/OAppCoreUpgradeable.sol | 74 + .../LayerZero/OAppReceiverUpgradeable.sol | 139 + .../LayerZero/OAppSenderUpgradeable.sol | 149 + .../contracts/LayerZero/OAppUpgradeable.sol | 46 + .../contracts/LayerZero/OptionsCreator.sol | 23 + .../contracts/LayerZero/mock/EndpointMock.sol | 844 + .../abstract/AbstractCrossChainAdapter.sol | 53 + .../abstract/AbstractCrossChainAdapterL1.sol | 53 + .../abstract/AbstractCrossChainAdapterL2.sol | 19 + .../AbstractFraxFerryERC20Adapter.sol | 53 + .../abstract/AbstractLZCrossChainAdapter.sol | 151 + .../AdapterLayer1/ICrossChainBridgeL1.sol | 13 + .../AdapterLayer2/ICrossChainBridgeL2.sol | 16 + .../interfaces/FraxFerry/IFraxFerry.sol | 162 + .../contracts/interfaces/IAdapter.sol | 51 + .../interfaces/IERC20CrossChainBridge.sol | 15 + .../contracts/interfaces/IFraxFerry.sol | 27 + .../LayerZero/IOAppCoreUpgradeable.sol | 49 + .../LayerZero/IOAppReceiverUpgradeable.sol | 29 + .../interfaces/common/IRebalancer.sol | 90 + .../contracts/interfaces/common/IXERC20.sol | 143 + .../deploy/FraxFerryLZCrossChainAdapterL2.ts | 150 + .../bridge-lz/deploy/LZCrossChainAdapterL1.ts | 110 + .../bridge-lz/deploy/LZCrossChainAdapterL2.ts | 114 + projects/bridge-lz/hardhat.config.ts | 30 + projects/bridge-lz/how-to-deploy.md | 32 + projects/bridge-lz/layerzero.config.ts | 54 + projects/bridge-lz/package-lock.json | 17468 ++++++++++++++++ projects/bridge-lz/package.json | 63 + projects/bridge-lz/scripts/call-on-opt.ts | 44 + projects/bridge-lz/scripts/call-on-sep.ts | 41 + .../scripts/calls/send-crosschain.ts | 57 + .../bridge-lz/scripts/calls/sendEthToL1.ts | 74 + .../scripts/deploy-options-creator_temp.ts | 43 + .../scripts/holesky/set-peers-l1-opt.ts | 30 + .../bridge-lz/scripts/holesky/set-peers-l1.ts | 28 + .../scripts/holesky/set-peers-l2-arb.ts | 29 + .../scripts/holesky/set-peers-l2-opt.ts | 30 + .../scripts/l1-deploy-dummy-processor.ts | 37 + .../bridge-lz/scripts/livetest/call-on-opt.ts | 68 + .../bridge-lz/scripts/mainnet/set-peers-l1.ts | 46 + .../scripts/mainnet/set-peers-l2-arb.ts | 40 + .../scripts/mainnet/set-peers-l2-opt.ts | 40 + .../scripts/send-assets-info-bridge.ts | 43 + projects/bridge-lz/scripts/set-chain-ids.ts | 41 + projects/bridge-lz/scripts/setup-iov.ts | 109 + .../scripts/update_crosschain_adapter_l1.ts | 40 + .../upgrade-cross-chain-adapter-l1.ts | 52 + .../upgrade-cross-chain-adapter-l2.ts | 46 + .../upgrades/upgrade-frax-lz-adapter.js | 26 + .../CrossChainAdapterOptimismL1.ts | 70 + .../CrossChainAdapterOptimismL2.ts | 64 + .../bridge-lz/scripts/wasDeployment/MyOApp.ts | 53 + projects/bridge-lz/solhint.config.js | 1 + projects/bridge-lz/tsconfig.json | 14 + projects/bridge-lz/yarn.lock | 9799 +++++++++ 60 files changed, 31604 insertions(+) create mode 100644 projects/bridge-lz/README.md create mode 100644 projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol create mode 100644 projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL1.sol create mode 100644 projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL2.sol create mode 100644 projects/bridge-lz/contracts/LayerZero/OAppCoreUpgradeable.sol create mode 100644 projects/bridge-lz/contracts/LayerZero/OAppReceiverUpgradeable.sol create mode 100644 projects/bridge-lz/contracts/LayerZero/OAppSenderUpgradeable.sol create mode 100644 projects/bridge-lz/contracts/LayerZero/OAppUpgradeable.sol create mode 100644 projects/bridge-lz/contracts/LayerZero/OptionsCreator.sol create mode 100644 projects/bridge-lz/contracts/LayerZero/mock/EndpointMock.sol create mode 100644 projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapter.sol create mode 100644 projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapterL1.sol create mode 100644 projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapterL2.sol create mode 100644 projects/bridge-lz/contracts/abstract/AbstractFraxFerryERC20Adapter.sol create mode 100644 projects/bridge-lz/contracts/abstract/AbstractLZCrossChainAdapter.sol create mode 100644 projects/bridge-lz/contracts/interfaces/AdapterLayer1/ICrossChainBridgeL1.sol create mode 100644 projects/bridge-lz/contracts/interfaces/AdapterLayer2/ICrossChainBridgeL2.sol create mode 100644 projects/bridge-lz/contracts/interfaces/FraxFerry/IFraxFerry.sol create mode 100644 projects/bridge-lz/contracts/interfaces/IAdapter.sol create mode 100644 projects/bridge-lz/contracts/interfaces/IERC20CrossChainBridge.sol create mode 100644 projects/bridge-lz/contracts/interfaces/IFraxFerry.sol create mode 100644 projects/bridge-lz/contracts/interfaces/LayerZero/IOAppCoreUpgradeable.sol create mode 100644 projects/bridge-lz/contracts/interfaces/LayerZero/IOAppReceiverUpgradeable.sol create mode 100644 projects/bridge-lz/contracts/interfaces/common/IRebalancer.sol create mode 100644 projects/bridge-lz/contracts/interfaces/common/IXERC20.sol create mode 100644 projects/bridge-lz/deploy/FraxFerryLZCrossChainAdapterL2.ts create mode 100644 projects/bridge-lz/deploy/LZCrossChainAdapterL1.ts create mode 100644 projects/bridge-lz/deploy/LZCrossChainAdapterL2.ts create mode 100644 projects/bridge-lz/hardhat.config.ts create mode 100644 projects/bridge-lz/how-to-deploy.md create mode 100644 projects/bridge-lz/layerzero.config.ts create mode 100644 projects/bridge-lz/package-lock.json create mode 100644 projects/bridge-lz/package.json create mode 100644 projects/bridge-lz/scripts/call-on-opt.ts create mode 100644 projects/bridge-lz/scripts/call-on-sep.ts create mode 100644 projects/bridge-lz/scripts/calls/send-crosschain.ts create mode 100644 projects/bridge-lz/scripts/calls/sendEthToL1.ts create mode 100644 projects/bridge-lz/scripts/deploy-options-creator_temp.ts create mode 100644 projects/bridge-lz/scripts/holesky/set-peers-l1-opt.ts create mode 100644 projects/bridge-lz/scripts/holesky/set-peers-l1.ts create mode 100644 projects/bridge-lz/scripts/holesky/set-peers-l2-arb.ts create mode 100644 projects/bridge-lz/scripts/holesky/set-peers-l2-opt.ts create mode 100644 projects/bridge-lz/scripts/l1-deploy-dummy-processor.ts create mode 100644 projects/bridge-lz/scripts/livetest/call-on-opt.ts create mode 100644 projects/bridge-lz/scripts/mainnet/set-peers-l1.ts create mode 100644 projects/bridge-lz/scripts/mainnet/set-peers-l2-arb.ts create mode 100644 projects/bridge-lz/scripts/mainnet/set-peers-l2-opt.ts create mode 100644 projects/bridge-lz/scripts/send-assets-info-bridge.ts create mode 100644 projects/bridge-lz/scripts/set-chain-ids.ts create mode 100644 projects/bridge-lz/scripts/setup-iov.ts create mode 100644 projects/bridge-lz/scripts/update_crosschain_adapter_l1.ts create mode 100644 projects/bridge-lz/scripts/upgrades/upgrade-cross-chain-adapter-l1.ts create mode 100644 projects/bridge-lz/scripts/upgrades/upgrade-cross-chain-adapter-l2.ts create mode 100644 projects/bridge-lz/scripts/upgrades/upgrade-frax-lz-adapter.js create mode 100644 projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL1.ts create mode 100644 projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL2.ts create mode 100644 projects/bridge-lz/scripts/wasDeployment/MyOApp.ts create mode 100644 projects/bridge-lz/solhint.config.js create mode 100644 projects/bridge-lz/tsconfig.json create mode 100644 projects/bridge-lz/yarn.lock diff --git a/projects/bridge-lz/README.md b/projects/bridge-lz/README.md new file mode 100644 index 00000000..b4c2fc5a --- /dev/null +++ b/projects/bridge-lz/README.md @@ -0,0 +1,108 @@ +

+ + LayerZero + +

+ +

+ Homepage | Docs | Developers +

+ +

OApp Example

+ +

+ Quickstart | Configuration | Message Execution Options | Endpoint Addresses +

+ +

Template project for getting started with LayerZero's OApp contract development.

+ +## 1) Developing Contracts + +#### Installing dependencies + +We recommend using `pnpm` as a package manager (but you can of course use a package manager of your choice): + +```bash +pnpm install +``` + +#### Compiling your contracts + +This project supports both `hardhat` and `forge` compilation. By default, the `compile` command will execute both: + +```bash +pnpm compile +``` + +If you prefer one over the other, you can use the tooling-specific commands: + +```bash +pnpm compile:forge +pnpm compile:hardhat +``` + +Or adjust the `package.json` to for example remove `forge` build: + +```diff +- "compile": "$npm_execpath run compile:forge && $npm_execpath run compile:hardhat", +- "compile:forge": "forge build", +- "compile:hardhat": "hardhat compile", ++ "compile": "hardhat compile" +``` + +#### Running tests + +Similarly to the contract compilation, we support both `hardhat` and `forge` tests. By default, the `test` command will execute both: + +```bash +pnpm test +``` + +If you prefer one over the other, you can use the tooling-specific commands: + +```bash +pnpm test:forge +pnpm test:hardhat +``` + +Or adjust the `package.json` to for example remove `hardhat` tests: + +```diff +- "test": "$npm_execpath test:forge && $npm_execpath test:hardhat", +- "test:forge": "forge test", +- "test:hardhat": "$npm_execpath hardhat test" ++ "test": "forge test" +``` + +## 2) Deploying Contracts + +Set up deployer wallet/account: + +- Rename `.env.example` -> `.env` +- Choose your preferred means of setting up your deployer wallet/account: + +``` +MNEMONIC="test test test test test test test test test test test junk" +or... +PRIVATE_KEY="0xabc...def" +``` + +To deploy your contracts to your desired blockchains, run the following command in your project's folder: + +```bash +npx hardhat lz:deploy +``` + +More information about available CLI arguments can be found using the `--help` flag: + +```bash +npx hardhat lz:deploy --help +``` + +By following these steps, you can focus more on creating innovative omnichain solutions and less on the complexities of cross-chain communication. + +

+ +

+ Join our community on Discord | Follow us on Twitter +

diff --git a/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol b/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol new file mode 100644 index 00000000..50c86368 --- /dev/null +++ b/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol @@ -0,0 +1,147 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {AbstractLZCrossChainAdapter} from "../abstract/AbstractLZCrossChainAdapter.sol"; +import {AbstractCrossChainAdapterL2} from "../abstract/AbstractCrossChainAdapterL2.sol"; +import {AbstractCrossChainAdapter} from "../abstract/AbstractCrossChainAdapter.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {Ownable2StepUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; +import {AbstractFraxFerryERC20Adapter} from "../abstract/AbstractFraxFerryERC20Adapter.sol"; +import {IAdapter} from "../interfaces/IAdapter.sol"; +import {IFraxFerry} from "../interfaces/IFraxFerry.sol"; + +import {Origin} from "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol"; + +/** + * @title FraxFerryLZCrossChainAdapterL2 + * @author InceptionLRT + * @dev Layer 2 adapter for LayerZero cross-chain communication, supporting ERC20 transfers and data messaging with Layer 1. + * This contract manages endpoint and chain ID mappings, enables quoting for cross-chain transactions, and provides functions for + * data transfer to L1. + */ +contract FraxFerryLZCrossChainAdapterL2 is + AbstractLZCrossChainAdapter, + AbstractCrossChainAdapterL2, + AbstractFraxFerryERC20Adapter, + Initializable, + Ownable2StepUpgradeable +{ + uint32 private _l1ChainId; + + modifier onlyOwnerRestricted() + override(AbstractCrossChainAdapter, AbstractLZCrossChainAdapter) { + _checkOwner(); + _; + } + + modifier onlyTargetReceiverRestricted() override { + require( + msg.sender == targetReceiver || msg.sender == owner(), + NotTargetReceiver(msg.sender) + ); + _; + } + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() payable { + _disableInitializers(); + } + + function initialize( + address _token, + address _ferry, + address _endpoint, + address _delegate, + uint32 l1ChainId, + uint32[] memory _eIds, + uint256[] memory _chainIds + ) public initializer { + __Ownable_init(msg.sender); + __OAppUpgradeable_init(_endpoint, _delegate); + require(_eIds.length == _chainIds.length, ArraysLengthsMismatch()); + _l1ChainId = l1ChainId; + token = IERC20(_token); + ferry = IFraxFerry(payable(_ferry)); + for (uint256 i = 0; i < _eIds.length; i++) + setChainIdFromEid(_eIds[i], _chainIds[i]); + } + + function setDestination(address _dest) external onlyOwnerRestricted { + require(_dest != address(0), errNullDestination()); + erc20DestinationChain = _dest; + emit DestinationChanged(_dest); + } + + function setFerry(address _ferry) external onlyOwnerRestricted { + require(_ferry != address(0), IFraxFerry.errNullFerry()); + ferry = IFraxFerry(payable(_ferry)); + emit IFraxFerry.FerryChanged(_ferry); + } + + function quote(bytes calldata _payload, bytes memory _options) + external + view + override + returns (uint256) + { + return _quote(_l1ChainId, _payload, _options); + } + + function sendDataL1(bytes calldata _payload, bytes memory _options) + external + payable + override + onlyTargetReceiverRestricted + returns (uint256) + { + return _sendCrosschain(_l1ChainId, _payload, _options); + } + + function _lzReceive( + Origin calldata origin, + bytes32, /*_guid*/ + bytes calldata, + address, /*_executor*/ + bytes calldata /*_extraData*/ + ) internal virtual override { + uint256 chainId = getChainIdFromEid(origin.srcEid); + if (msg.value > 0) _handleCrossChainEth(chainId); + } + + /// @dev This will allow TargetReceiver to recover ERC20 accidentally sent to the adapter itself. + // Tokens will be sent back to TargetReceiver (aka vault). + function recoverFunds() + external + override(AbstractCrossChainAdapter, IAdapter) + onlyOwnerRestricted + { + require(targetReceiver != address(0), TargetReceiverNotSet()); + token.transfer(targetReceiver, token.balanceOf(address(this))); + } + + // stubs for eth methods + function sendEthCrossChain( + uint256, /*_chainId */ + bytes memory /* _options */ + ) + external + payable + override(AbstractLZCrossChainAdapter, IAdapter) + returns (uint256) + { + revert NotAllowedInThisAdapterType(); + } + + function quoteSendEth( + uint256, /* _chainId */ + bytes memory /* _options */ + ) + external + pure + override(AbstractLZCrossChainAdapter, IAdapter) + returns (uint256) + { + revert NotAllowedInThisAdapterType(); + } +} diff --git a/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL1.sol b/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL1.sol new file mode 100644 index 00000000..5be14bcc --- /dev/null +++ b/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL1.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {Origin} from "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol"; +import {Ownable2StepUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; + +import {AbstractCrossChainAdapter} from "../abstract/AbstractCrossChainAdapter.sol"; +import {AbstractLZCrossChainAdapter} from "../abstract/AbstractLZCrossChainAdapter.sol"; +import {AbstractCrossChainAdapterL1} from "../abstract/AbstractCrossChainAdapterL1.sol"; +import {OAppReceiverUpgradeable} from "./OAppReceiverUpgradeable.sol"; + +/** + * @title LZCrossChainAdapterL1 + * @author The InceptionLRT team + * @dev Layer 1 adapter for cross-chain messaging using LayerZero's communication framework. + * This contract initializes mappings between Endpoint IDs (EIDs) and chain IDs and processes + * incoming messages with optional ETH transfers and payload handling. Extends LayerZero and + * cross-chain adapter functionalities for L1 environments. + */ +contract LZCrossChainAdapterL1 is + AbstractLZCrossChainAdapter, + AbstractCrossChainAdapterL1, + Initializable, + Ownable2StepUpgradeable +{ + modifier onlyOwnerRestricted() + override(AbstractCrossChainAdapter, AbstractLZCrossChainAdapter) { + _checkOwner(); + _; + } + + modifier onlyTargetReceiverRestricted() override { + require( + msg.sender == targetReceiver || msg.sender == owner(), + NotTargetReceiver(msg.sender) + ); + _; + } + + function initialize( + address _endpoint, + address _delegate, + uint32[] memory _eIds, + uint256[] memory _chainIds + ) public initializer { + __Ownable_init(msg.sender); + __OAppUpgradeable_init(_endpoint, _delegate); + + require(_eIds.length == _chainIds.length, ArraysLengthsMismatch()); + + for (uint256 i = 0; i < _eIds.length; i++) { + setChainIdFromEid(_eIds[i], _chainIds[i]); + } + } + + function _lzReceive( + Origin calldata origin, + bytes32, /*_guid*/ + bytes calldata payload, + address, /*_executor*/ + bytes calldata /*_extraData*/ + ) internal virtual override(OAppReceiverUpgradeable) { + uint256 chainId = getChainIdFromEid(origin.srcEid); + + if (msg.value > 0) { + _handleCrossChainEth(chainId); + } + + if (payload.length > 0) { + _handleCrossChainData(chainId, payload); + } + } +} diff --git a/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL2.sol b/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL2.sol new file mode 100644 index 00000000..4ba86307 --- /dev/null +++ b/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL2.sol @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {AbstractLZCrossChainAdapter} from "../abstract/AbstractLZCrossChainAdapter.sol"; +import {AbstractCrossChainAdapterL2} from "../abstract/AbstractCrossChainAdapterL2.sol"; +import {AbstractCrossChainAdapter} from "../abstract/AbstractCrossChainAdapter.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {Ownable2StepUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; + +import {Origin} from "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol"; + +/** + * @title LZCrossChainAdapterL2 + * @dev Layer 2 adapter for LayerZero cross-chain communication, supporting ETH transfers and data messaging with Layer 1. + * This contract manages endpoint and chain ID mappings, enables quoting for cross-chain transactions, and provides functions for + * data transfer to L1. + */ + +contract LZCrossChainAdapterL2 is + AbstractLZCrossChainAdapter, + AbstractCrossChainAdapterL2, + Initializable, + Ownable2StepUpgradeable +{ + modifier onlyOwnerRestricted() + override(AbstractCrossChainAdapter, AbstractLZCrossChainAdapter) { + _checkOwner(); + _; + } + + modifier onlyTargetReceiverRestricted() override { + require( + msg.sender == targetReceiver || msg.sender == owner(), + NotTargetReceiver(msg.sender) + ); + _; + } + + uint32 private l1ChainId; + + function initialize( + address _endpoint, + address _delegate, + uint32 _l1ChainId, + uint32[] memory _eIds, + uint256[] memory _chainIds + ) public initializer { + __Ownable_init(msg.sender); + __OAppUpgradeable_init(_endpoint, _delegate); + require(_eIds.length == _chainIds.length, ArraysLengthsMismatch()); + l1ChainId = _l1ChainId; + + for (uint256 i = 0; i < _eIds.length; i++) { + setChainIdFromEid(_eIds[i], _chainIds[i]); + } + } + + function quote(bytes calldata _payload, bytes memory _options) + external + view + override + returns (uint256) + { + return _quote(l1ChainId, _payload, _options); + } + + function sendDataL1(bytes calldata _payload, bytes memory _options) + external + payable + override + onlyTargetReceiverRestricted + returns (uint256) + { + return _sendCrosschain(l1ChainId, _payload, _options); + } + + function _lzReceive( + Origin calldata origin, + bytes32, /*_guid*/ + bytes calldata, + address, /*_executor*/ + bytes calldata /*_extraData*/ + ) internal virtual override { + uint256 chainId = getChainIdFromEid(origin.srcEid); + + if (msg.value > 0) { + _handleCrossChainEth(chainId); + } + } +} diff --git a/projects/bridge-lz/contracts/LayerZero/OAppCoreUpgradeable.sol b/projects/bridge-lz/contracts/LayerZero/OAppCoreUpgradeable.sol new file mode 100644 index 00000000..d3fa20a4 --- /dev/null +++ b/projects/bridge-lz/contracts/LayerZero/OAppCoreUpgradeable.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.23; + +import {IOAppCoreUpgradeable, ILayerZeroEndpointV2} from "../interfaces/LayerZero/IOAppCoreUpgradeable.sol"; + +/** + * @title OAppCoreUpgradeable + * @author InceptionLRT + * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations. + */ +abstract contract OAppCoreUpgradeable is IOAppCoreUpgradeable { + // The LayerZero endpoint associated with the given OApp + ILayerZeroEndpointV2 public endpoint; + + // Mapping to store peers associated with corresponding endpoints + mapping(uint32 eid => bytes32 peer) public peers; + + /** + * @dev Initializer to initialize the OAppCore with the provided endpoint and delegate. + * @param _endpoint The address of the LOCAL Layer Zero endpoint. + * @param _delegate The delegate capable of making OApp configurations inside of the endpoint. + * + * @dev The delegate typically should be set as the owner of the contract. + */ + function __OAppCoreUpgradeable_init( + address _endpoint, + address _delegate + ) internal { + endpoint = ILayerZeroEndpointV2(_endpoint); + if (_delegate == address(0)) revert InvalidDelegate(); + endpoint.setDelegate(_delegate); + } + + /** + * @notice Sets the peer address (OApp instance) for a corresponding endpoint. + * @param _eid The endpoint ID. + * @param _peer The address of the peer to be associated with the corresponding endpoint. + * + * @dev Only the owner/admin of the OApp can call this function. + * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp. + * @dev Set this to bytes32(0) to remove the peer address. + * @dev Peer is a bytes32 to accommodate non-evm chains. + */ + // function setPeer(uint32 _eid, bytes32 _peer) public virtual {} + + /** + * @notice Sets the peer address (OApp instance) for a corresponding endpoint. + * @param _eid The endpoint ID. + * @param _peer The address of the peer to be associated with the corresponding endpoint. + * + * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp. + * @dev Set this to bytes32(0) to remove the peer address. + * @dev Peer is a bytes32 to accommodate non-evm chains. + */ + function _setPeer(uint32 _eid, bytes32 _peer) internal virtual { + peers[_eid] = _peer; + emit PeerSet(_eid, _peer); + } + + /** + * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set. + * ie. the peer is set to bytes32(0). + * @param _eid The endpoint ID. + * @return peer The address of the peer associated with the specified endpoint. + */ + function _getPeerOrRevert( + uint32 _eid + ) internal view virtual returns (bytes32) { + bytes32 peer = peers[_eid]; + if (peer == bytes32(0)) revert NoPeer(_eid); + return peer; + } +} diff --git a/projects/bridge-lz/contracts/LayerZero/OAppReceiverUpgradeable.sol b/projects/bridge-lz/contracts/LayerZero/OAppReceiverUpgradeable.sol new file mode 100644 index 00000000..6312b238 --- /dev/null +++ b/projects/bridge-lz/contracts/LayerZero/OAppReceiverUpgradeable.sol @@ -0,0 +1,139 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import {IOAppReceiverUpgradeable, Origin} from "../interfaces/LayerZero/IOAppReceiverUpgradeable.sol"; +import {OAppCoreUpgradeable} from "./OAppCoreUpgradeable.sol"; + +/** + * @title OAppReceiverUpgradeable + * @author InceptionLRT + * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers. + */ +abstract contract OAppReceiverUpgradeable is + IOAppReceiverUpgradeable, + OAppCoreUpgradeable +{ + // Custom error message for when the caller is not the registered endpoint/ + error OnlyEndpoint(address addr); + + // @dev The version of the OAppReceiver implementation. + // @dev Version is bumped when changes are made to this contract. + uint64 internal constant RECEIVER_VERSION = 2; + + /** + * @notice Retrieves the OApp version information. + * @return senderVersion The version of the OAppSender.sol contract. + * @return receiverVersion The version of the OAppReceiver.sol contract. + * + * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented. + * ie. this is a RECEIVE only OApp. + * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions. + */ + function oAppVersion() + public + view + virtual + returns (uint64 senderVersion, uint64 receiverVersion) + { + return (0, RECEIVER_VERSION); + } + + /** + * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint. + * @dev _origin The origin information containing the source endpoint and sender address. + * - srcEid: The source chain endpoint ID. + * - sender: The sender address on the src chain. + * - nonce: The nonce of the message. + * @dev _message The lzReceive payload. + * @param _sender The sender address. + * @return isSender Is a valid sender. + * + * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer. + * @dev The default sender IS the OAppReceiver implementer. + */ + function isComposeMsgSender( + Origin calldata, /*_origin*/ + bytes calldata, /*_message*/ + address _sender + ) public view virtual returns (bool) { + return _sender == address(this); + } + + /** + * @notice Checks if the path initialization is allowed based on the provided origin. + * @param origin The origin information containing the source endpoint and sender address. + * @return Whether the path has been initialized. + * + * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received. + * @dev This defaults to assuming if a peer has been set, its initialized. + * Can be overridden by the OApp if there is other logic to determine this. + */ + function allowInitializePath(Origin calldata origin) + public + view + virtual + returns (bool) + { + return peers[origin.srcEid] == origin.sender; + } + + /** + * @notice Retrieves the next nonce for a given source endpoint and sender address. + * @dev _srcEid The source endpoint ID. + * @dev _sender The sender address. + * @return nonce The next nonce. + * + * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement. + * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered. + * @dev This is also enforced by the OApp. + * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0. + */ + function nextNonce( + uint32, /*_srcEid*/ + bytes32 /*_sender*/ + ) public view virtual returns (uint64 nonce) { + return 0; + } + + /** + * @dev Entry point for receiving messages or packets from the endpoint. + * @param _origin The origin information containing the source endpoint and sender address. + * - srcEid: The source chain endpoint ID. + * - sender: The sender address on the src chain. + * - nonce: The nonce of the message. + * @param _guid The unique identifier for the received LayerZero message. + * @param _message The payload of the received message. + * @param _executor The address of the executor for the received message. + * @param _extraData Additional arbitrary data provided by the corresponding executor. + * + * @dev Entry point for receiving msg/packet from the LayerZero endpoint. + */ + function lzReceive( + Origin calldata _origin, + bytes32 _guid, + bytes calldata _message, + address _executor, + bytes calldata _extraData + ) public payable virtual { + // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp. + if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender); + + // Ensure that the sender matches the expected peer for the source endpoint. + if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) + revert OnlyPeer(_origin.srcEid, _origin.sender); + + // Call the internal OApp implementation of lzReceive. + _lzReceive(_origin, _guid, _message, _executor, _extraData); + } + + /** + * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation. + */ + function _lzReceive( + Origin calldata _origin, + bytes32 _guid, + bytes calldata _message, + address _executor, + bytes calldata _extraData + ) internal virtual; +} diff --git a/projects/bridge-lz/contracts/LayerZero/OAppSenderUpgradeable.sol b/projects/bridge-lz/contracts/LayerZero/OAppSenderUpgradeable.sol new file mode 100644 index 00000000..ee842806 --- /dev/null +++ b/projects/bridge-lz/contracts/LayerZero/OAppSenderUpgradeable.sol @@ -0,0 +1,149 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.23; + +import {OAppCoreUpgradeable} from "./OAppCoreUpgradeable.sol"; +import {SafeERC20, IERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {MessagingParams, MessagingFee, MessagingReceipt} from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol"; + +/** + * @title OAppSenderUpgradeable + * @author InceptionLRT + * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint. + */ +abstract contract OAppSenderUpgradeable is OAppCoreUpgradeable { + using SafeERC20 for IERC20; + + // Custom error messages + error NotEnoughNative(uint256 msgValue); + error LzTokenUnavailable(); + + // @dev The version of the OAppSender implementation. + // @dev Version is bumped when changes are made to this contract. + uint64 internal constant SENDER_VERSION = 1; + + /** + * @notice Retrieves the OApp version information. + * @return senderVersion The version of the OAppSender.sol contract. + * @return receiverVersion The version of the OAppReceiver.sol contract. + * + * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented. + * ie. this is a SEND only OApp. + * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions + */ + function oAppVersion() + public + view + virtual + returns (uint64 senderVersion, uint64 receiverVersion) + { + return (SENDER_VERSION, 0); + } + + /** + * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation. + * @param _dstEid The destination endpoint ID. + * @param _message The message payload. + * @param _options Additional options for the message. + * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens. + * @return fee The calculated MessagingFee for the message. + * - nativeFee: The native fee for the message. + * - lzTokenFee: The LZ token fee for the message. + */ + function _quote( + uint32 _dstEid, + bytes memory _message, + bytes memory _options, + bool _payInLzToken + ) internal view virtual returns (MessagingFee memory fee) { + return + endpoint.quote( + MessagingParams( + _dstEid, + _getPeerOrRevert(_dstEid), + _message, + _options, + _payInLzToken + ), + address(this) + ); + } + + /** + * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message. + * @param _dstEid The destination endpoint ID. + * @param _message The message payload. + * @param _options Additional options for the message. + * @param _fee The calculated LayerZero fee for the message. + * - nativeFee: The native fee. + * - lzTokenFee: The lzToken fee. + * @param _refundAddress The address to receive any excess fee values sent to the endpoint. + * @return receipt The receipt for the sent message. + * - guid: The unique identifier for the sent message. + * - nonce: The nonce of the sent message. + * - fee: The LayerZero fee incurred for the message. + */ + function _lzSend( + uint32 _dstEid, + bytes memory _message, + bytes memory _options, + MessagingFee memory _fee, + address _refundAddress + ) internal virtual returns (MessagingReceipt memory receipt) { + // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint. + + uint256 messageValue = _payNative(_fee.nativeFee); + if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee); + + return + // solhint-disable-next-line check-send-result + endpoint.send{value: messageValue}( + MessagingParams( + _dstEid, + _getPeerOrRevert(_dstEid), + _message, + _options, + _fee.lzTokenFee > 0 + ), + _refundAddress + ); + } + + /** + * @dev Internal function to pay the native fee associated with the message. + * @param _nativeFee The native fee to be paid. + * @return nativeFee The amount of native currency paid. + * + * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction, + * this will need to be overridden because msg.value would contain multiple lzFees. + * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency. + * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees. + * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time. + */ + function _payNative( + uint256 _nativeFee + ) internal virtual returns (uint256 nativeFee) { + if (msg.value != _nativeFee) revert NotEnoughNative(msg.value); + return _nativeFee; + } + + /** + * @dev Internal function to pay the LZ token fee associated with the message. + * @param _lzTokenFee The LZ token fee to be paid. + * + * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint. + * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend(). + */ + function _payLzToken(uint256 _lzTokenFee) internal virtual { + // @dev Cannot cache the token because it is not immutable in the endpoint. + address lzToken = endpoint.lzToken(); + if (lzToken == address(0)) revert LzTokenUnavailable(); + + // Pay LZ token fee by sending tokens to the endpoint. + IERC20(lzToken).safeTransferFrom( + msg.sender, + address(endpoint), + _lzTokenFee + ); + } +} diff --git a/projects/bridge-lz/contracts/LayerZero/OAppUpgradeable.sol b/projects/bridge-lz/contracts/LayerZero/OAppUpgradeable.sol new file mode 100644 index 00000000..87e70bce --- /dev/null +++ b/projects/bridge-lz/contracts/LayerZero/OAppUpgradeable.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers +// solhint-disable-next-line no-unused-import +import {OAppSenderUpgradeable, MessagingFee, MessagingReceipt} from "./OAppSenderUpgradeable.sol"; +// @dev Import the 'Origin' so it's exposed to OApp implementers +// solhint-disable-next-line no-unused-import +import {OAppReceiverUpgradeable, Origin} from "./../LayerZero/OAppReceiverUpgradeable.sol"; +import {OAppCoreUpgradeable} from "../LayerZero/OAppCoreUpgradeable.sol"; + +/** + * @title OAppUpgradeable + * @author InceptionLRT + * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality. + */ +abstract contract OAppUpgradeable is + OAppSenderUpgradeable, + OAppReceiverUpgradeable +{ + /** + * @dev Initializer to initialize the OApp with the provided endpoint and owner. + * @param _endpoint The address of the LOCAL LayerZero endpoint. + * @param _delegate The delegate capable of making OApp configurations inside of the endpoint. + */ + function __OAppUpgradeable_init(address _endpoint, address _delegate) + internal + { + __OAppCoreUpgradeable_init(_endpoint, _delegate); + } + + /** + * @notice Retrieves the OApp version information. + * @return senderVersion The version of the OAppSender.sol implementation. + * @return receiverVersion The version of the OAppReceiver.sol implementation. + */ + function oAppVersion() + public + pure + virtual + override(OAppSenderUpgradeable, OAppReceiverUpgradeable) + returns (uint64 senderVersion, uint64 receiverVersion) + { + return (SENDER_VERSION, RECEIVER_VERSION); + } +} diff --git a/projects/bridge-lz/contracts/LayerZero/OptionsCreator.sol b/projects/bridge-lz/contracts/LayerZero/OptionsCreator.sol new file mode 100644 index 00000000..fcfbae7a --- /dev/null +++ b/projects/bridge-lz/contracts/LayerZero/OptionsCreator.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {OptionsBuilder} from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol"; + +contract OptionsCreator { + using OptionsBuilder for bytes; + + /// @notice Creates options for executing `lzReceive` on the destination chain. + /// @param _gas The gas amount for the `lzReceive` execution. + /// @param _value The msg.value for the `lzReceive` execution. + /// @return bytes-encoded option set for `lzReceive` executor. + function createLzReceiveOption( + uint256 _gas, + uint256 _value + ) public pure returns (bytes memory) { + return + OptionsBuilder.newOptions().addExecutorLzReceiveOption( + uint128(_gas), + uint128(_value) + ); + } +} diff --git a/projects/bridge-lz/contracts/LayerZero/mock/EndpointMock.sol b/projects/bridge-lz/contracts/LayerZero/mock/EndpointMock.sol new file mode 100644 index 00000000..f277277f --- /dev/null +++ b/projects/bridge-lz/contracts/LayerZero/mock/EndpointMock.sol @@ -0,0 +1,844 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.22; + +import {SafeCast} from "@openzeppelin/contracts/utils/math/SafeCast.sol"; +import {ILayerZeroEndpointV2, MessagingParams, MessagingReceipt, MessagingFee, Origin} from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol"; +import {ExecutionState} from "@layerzerolabs/lz-evm-protocol-v2/contracts/EndpointV2ViewUpgradeable.sol"; +import {ILayerZeroReceiver} from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol"; +import {SetConfigParam} from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol"; +import {MessagingContext} from "@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol"; +import {Packet} from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol"; +import {OFTMsgCodec} from "@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol"; +import {Origin} from "@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol"; +import {Errors} from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol"; +import {GUID} from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol"; +import {ExecutorOptions} from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol"; +import {PacketV1Codec} from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol"; +import {WorkerOptions} from "@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol"; +import {IExecutorFeeLib} from "@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol"; +import {DVNOptions} from "@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol"; +import {UlnOptions} from "@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol"; +import {CalldataBytesLib} from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol"; +import "hardhat/console.sol"; + +contract EndpointMock is ILayerZeroEndpointV2, MessagingContext { + using ExecutorOptions for bytes; + using OFTMsgCodec for bytes; + using OFTMsgCodec for bytes32; + using OFTMsgCodec for address; + using SafeCast for uint256; + using CalldataBytesLib for bytes; + + bytes32 public constant EMPTY_PAYLOAD_HASH = bytes32(0); + + uint32 public immutable eid; + mapping(address => address) public lzEndpointLookup; + + mapping(address receiver => mapping(uint32 srcEid => mapping(bytes32 sender => uint64 nonce))) + public lazyInboundNonce; + mapping(address receiver => mapping(uint32 srcEid => mapping(bytes32 sender => mapping(uint64 inboundNonce => bytes32 payloadHash)))) + public inboundPayloadHash; + mapping(address sender => mapping(uint32 dstEid => mapping(bytes32 receiver => uint64 nonce))) + public outboundNonce; + + RelayerFeeConfig public relayerFeeConfig; + ProtocolFeeConfig protocolFeeConfig; + uint256 public verifierFee; + + struct ProtocolFeeConfig { + uint256 zroFee; + uint256 nativeBP; + } + + struct RelayerFeeConfig { + uint128 dstPriceRatio; // 10^10 + uint128 dstGasPriceInWei; + uint128 dstNativeAmtCap; + uint64 baseGas; + uint64 gasPerByte; + } + + uint8 internal constant _NOT_ENTERED = 1; + uint8 internal constant _ENTERED = 2; + uint8 internal _receive_entered_state = 1; + modifier receiveNonReentrant() { + require( + _receive_entered_state == _NOT_ENTERED, + "LayerZeroMock: no receive reentrancy" + ); + _receive_entered_state = _ENTERED; + _; + _receive_entered_state = _NOT_ENTERED; + } + + event ValueTransferFailed(address indexed to, uint256 indexed quantity); + + constructor(uint32 _eid) { + eid = _eid; + // init config + relayerFeeConfig = RelayerFeeConfig({ + dstPriceRatio: 1e10, // 1:1, same chain, same native coin + dstGasPriceInWei: 1e10, + dstNativeAmtCap: 1e19, + baseGas: 100, + gasPerByte: 1 + }); + protocolFeeConfig = ProtocolFeeConfig({zroFee: 1e18, nativeBP: 1000}); // BP 0.1 + verifierFee = 1e16; + } + + function send( + MessagingParams calldata _params, + address _refundAddress + ) + public + payable + sendContext(_params.dstEid, msg.sender) + returns (MessagingReceipt memory receipt) + { + if (_params.payInLzToken) revert Errors.LZ_LzTokenUnavailable(); + + address lzEndpoint = lzEndpointLookup[ + _params.receiver.bytes32ToAddress() + ]; + require( + lzEndpoint != address(0), + "LayerZeroMock: destination LayerZero Endpoint not found" + ); + + // get the correct outbound nonce + uint64 latestNonce = _outbound( + msg.sender, + _params.dstEid, + _params.receiver + ); + + Packet memory packet = Packet({ + nonce: latestNonce, + srcEid: eid, + sender: msg.sender, + dstEid: _params.dstEid, + receiver: _params.receiver, + guid: GUID.generate( + latestNonce, + eid, + msg.sender, + _params.dstEid, + _params.receiver + ), + message: _params.message + }); + receipt.guid = packet.guid; + receipt.nonce = packet.nonce; + receipt.fee = _quote(_params, msg.sender); + require( + msg.value >= receipt.fee.nativeFee, + "LayerZeroMock: not enough native for fees" + ); + + // refund if they send too much + uint256 amount = msg.value - receipt.fee.nativeFee; + if (amount > 0) { + (bool success, ) = _refundAddress.call{value: amount}(""); + require(success, "LayerZeroMock: failed to refund"); + } + + uint256 totalGas; + uint256 dstAmount; + (totalGas, dstAmount) = executeNativeAirDropAndReturnLzGas( + _params.options + ); + + // TODO fix + // composed calls with correct gas + + Origin memory origin = Origin({ + srcEid: packet.srcEid, + sender: packet.sender.addressToBytes32(), + nonce: packet.nonce + }); + + bytes memory payload = PacketV1Codec.encodePayload(packet); + bytes32 payloadHash = keccak256(payload); + + EndpointMock(lzEndpoint).receivePayload{value: dstAmount}( + origin, + packet.receiver.bytes32ToAddress(), + payloadHash, + packet.message, + totalGas, + dstAmount, + packet.guid + ); + } + + function receivePayload( + Origin calldata _origin, + address _receiver, + bytes32 _payloadHash, + bytes calldata _message, + uint256 _gas, + uint256 _msgValue, + bytes32 _guid + ) external payable receiveNonReentrant { + inboundPayloadHash[_receiver][_origin.srcEid][_origin.sender][ + _origin.nonce + ] = _payloadHash; + console.log("EndpointMock :: message.value:", _msgValue); + if (_msgValue > 0) { + ILayerZeroReceiver(_receiver).lzReceive{ + value: _msgValue, + gas: _gas + }(_origin, _guid, _message, address(0), ""); + } else { + ILayerZeroReceiver(_receiver).lzReceive{gas: _gas}( + _origin, + _guid, + _message, + address(0), + "" + ); + } + } + + function getExecutorFee( + uint256 _payloadSize, + bytes calldata _options + ) public view returns (uint256) { + uint256 nativeFee; + // 2) get Executor fee + // a) decodeLzReceiveOption + // b) decodeNativeDropOption + // c) decodeLzComposeOption + (uint256 totalDstAmount, uint256 totalGas) = _decodeExecutorOptions( + _options + ); + uint256 remoteGasTotal = relayerFeeConfig.dstGasPriceInWei * + (relayerFeeConfig.baseGas + totalGas); + nativeFee += totalDstAmount + remoteGasTotal; + + // tokenConversionRate = dstPrice / localPrice + // basePrice = totalRemoteToken * tokenConversionRate + uint256 basePrice = (nativeFee * relayerFeeConfig.dstPriceRatio) / + 10 ** 10; + + // pricePerByte = (dstGasPriceInWei * gasPerBytes) * tokenConversionRate + uint256 pricePerByte = ((relayerFeeConfig.dstGasPriceInWei * + relayerFeeConfig.gasPerByte * + relayerFeeConfig.dstPriceRatio) / 10 ** 10) * _payloadSize; + + return basePrice + pricePerByte; + } + + function _quote( + MessagingParams calldata _params, + address /*_sender*/ + ) internal view returns (MessagingFee memory messagingFee) { + (bytes memory executorOptions, ) = splitOptions(_params.options); + + // 2) get Executor fee + uint256 executorFee = this.getExecutorFee( + _params.message.length, + executorOptions + ); + + // 1) get Verifier fee + // 3) get Treasury fee + uint256 treasuryAndVerifierFee = _getTreasuryAndVerifierFees( + executorFee, + verifierFee + ); + + messagingFee.lzTokenFee = 0; + messagingFee.nativeFee = executorFee + treasuryAndVerifierFee; + } + + function _getTreasuryAndVerifierFees( + uint256 _executorFee, + uint256 _verifierFee + ) internal view returns (uint256) { + return + ((_executorFee + _verifierFee) * protocolFeeConfig.nativeBP) / + 10000; + } + + function _outbound( + address _sender, + uint32 _dstEid, + bytes32 _receiver + ) internal returns (uint64 nonce) { + unchecked { + nonce = ++outboundNonce[_sender][_dstEid][_receiver]; + } + } + + function setDestLzEndpoint( + address destAddr, + address lzEndpointAddr + ) external { + lzEndpointLookup[destAddr] = lzEndpointAddr; + } + + function _decodeExecutorOptions( + bytes calldata _options + ) internal view returns (uint256 dstAmount, uint256 totalGas) { + if (_options.length == 0) { + revert IExecutorFeeLib.Executor_NoOptions(); + } + + uint256 cursor = 0; + totalGas = relayerFeeConfig.baseGas; + + while (cursor < _options.length) { + ( + uint8 optionType, + bytes calldata option, + uint256 newCursor + ) = _options.nextExecutorOption(cursor); + cursor = newCursor; + + if (optionType == ExecutorOptions.OPTION_TYPE_LZRECEIVE) { + (uint128 gas, uint128 value) = ExecutorOptions + .decodeLzReceiveOption(option); + dstAmount += value; + totalGas += gas; + } else if (optionType == ExecutorOptions.OPTION_TYPE_NATIVE_DROP) { + (uint128 nativeDropAmount, ) = ExecutorOptions + .decodeNativeDropOption(option); + dstAmount += nativeDropAmount; + } else if (optionType == ExecutorOptions.OPTION_TYPE_LZCOMPOSE) { + (, uint128 gas, uint128 value) = ExecutorOptions + .decodeLzComposeOption(option); + dstAmount += value; + totalGas += gas; + } else { + revert IExecutorFeeLib.Executor_UnsupportedOptionType( + optionType + ); + } + } + + if (cursor != _options.length) + revert IExecutorFeeLib.Executor_InvalidExecutorOptions(cursor); + if (dstAmount > relayerFeeConfig.dstNativeAmtCap) + revert IExecutorFeeLib.Executor_NativeAmountExceedsCap( + dstAmount, + relayerFeeConfig.dstNativeAmtCap + ); + } + + function splitOptions( + bytes calldata _options + ) internal pure returns (bytes memory, WorkerOptions[] memory) { + (bytes memory executorOpts, bytes memory dvnOpts) = decode(_options); + + if (dvnOpts.length == 0) { + return (executorOpts, new WorkerOptions[](0)); + } + + WorkerOptions[] memory workerOpts = new WorkerOptions[](1); + workerOpts[0] = WorkerOptions(DVNOptions.WORKER_ID, dvnOpts); + return (executorOpts, workerOpts); + } + + function decode( + bytes calldata _options + ) + internal + pure + returns (bytes memory executorOptions, bytes memory dvnOptions) + { + // at least 2 bytes for the option type, but can have no options + if (_options.length < 2) + revert UlnOptions.LZ_ULN_InvalidWorkerOptions(0); + + uint16 optionsType = uint16(bytes2(_options[0:2])); + uint256 cursor = 2; + + // type3 options: [worker_option][worker_option]... + // worker_option: [worker_id][option_size][option] + // worker_id: uint8, option_size: uint16, option: bytes + if (optionsType == UlnOptions.TYPE_3) { + unchecked { + uint256 start = cursor; + uint8 lastWorkerId; // worker_id starts from 1, so 0 is an invalid worker_id + + // heuristic: we assume that the options are mostly EXECUTOR options only + // checking the workerID can reduce gas usage for most cases + while (cursor < _options.length) { + uint8 workerId = uint8(bytes1(_options[cursor:cursor + 1])); + if (workerId == 0) + revert UlnOptions.LZ_ULN_InvalidWorkerId(0); + + // workerId must equal to the lastWorkerId for the first option + // so it is always skipped in the first option + // this operation slices out options whenever the scan finds a different workerId + if (lastWorkerId == 0) { + lastWorkerId = workerId; + } else if (workerId != lastWorkerId) { + bytes calldata op = _options[start:cursor]; // slice out the last worker's options + (executorOptions, dvnOptions) = _insertWorkerOptions( + executorOptions, + dvnOptions, + lastWorkerId, + op + ); + + // reset the start cursor and lastWorkerId + start = cursor; + lastWorkerId = workerId; + } + + ++cursor; // for workerId + + uint16 size = uint16(bytes2(_options[cursor:cursor + 2])); + if (size == 0) + revert UlnOptions.LZ_ULN_InvalidWorkerOptions(cursor); + cursor += size + 2; + } + + // the options length must be the same as the cursor at the end + if (cursor != _options.length) + revert UlnOptions.LZ_ULN_InvalidWorkerOptions(cursor); + + // if we have reached the end of the options and the options are not empty + // we need to process the last worker's options + if (_options.length > 2) { + bytes calldata op = _options[start:cursor]; + (executorOptions, dvnOptions) = _insertWorkerOptions( + executorOptions, + dvnOptions, + lastWorkerId, + op + ); + } + } + } else { + executorOptions = decodeLegacyOptions(optionsType, _options); + } + } + + function _insertWorkerOptions( + bytes memory _executorOptions, + bytes memory _dvnOptions, + uint8 _workerId, + bytes calldata _newOptions + ) private pure returns (bytes memory, bytes memory) { + if (_workerId == ExecutorOptions.WORKER_ID) { + _executorOptions = _executorOptions.length == 0 + ? _newOptions + : abi.encodePacked(_executorOptions, _newOptions); + } else if (_workerId == DVNOptions.WORKER_ID) { + _dvnOptions = _dvnOptions.length == 0 + ? _newOptions + : abi.encodePacked(_dvnOptions, _newOptions); + } else { + revert UlnOptions.LZ_ULN_InvalidWorkerId(_workerId); + } + return (_executorOptions, _dvnOptions); + } + + function decodeLegacyOptions( + uint16 _optionType, + bytes calldata _options + ) internal pure returns (bytes memory executorOptions) { + if (_optionType == UlnOptions.TYPE_1) { + if (_options.length != 34) + revert UlnOptions.LZ_ULN_InvalidLegacyType1Option(); + + // execution gas + uint128 executionGas = uint256(bytes32(_options[2:2 + 32])) + .toUint128(); + + // dont use the encode function in the ExecutorOptions lib for saving gas by calling abi.encodePacked once + // the result is a lzReceive option: [executor_id][option_size][option_type][execution_gas] + // option_type: uint8, execution_gas: uint128 + // option_size = len(option_type) + len(execution_gas) = 1 + 16 = 17 + executorOptions = abi.encodePacked( + ExecutorOptions.WORKER_ID, + uint16(17), // 16 + 1, 16 for option_length, + 1 for option_type + ExecutorOptions.OPTION_TYPE_LZRECEIVE, + executionGas + ); + } else if (_optionType == UlnOptions.TYPE_2) { + // receiver size <= 32 + if (_options.length <= 66 || _options.length > 98) + revert UlnOptions.LZ_ULN_InvalidLegacyType2Option(); + + // execution gas + uint128 executionGas = uint256(bytes32(_options[2:2 + 32])) + .toUint128(); + + // nativeDrop (amount + receiver) + uint128 amount = uint256(bytes32(_options[34:34 + 32])).toUint128(); // offset 2 + 32 + bytes32 receiver; + unchecked { + uint256 receiverLen = _options.length - 66; // offset 2 + 32 + 32 + receiver = bytes32(_options[66:]); + receiver = receiver >> (8 * (32 - receiverLen)); // padding 0 to the left + } + + // dont use the encode function in the ExecutorOptions lib for saving gas by calling abi.encodePacked once + // the result has one lzReceive option and one nativeDrop option: + // [executor_id][lzReceive_option_size][option_type][execution_gas] + + // [executor_id][nativeDrop_option_size][option_type][nativeDrop_amount][receiver] + // option_type: uint8, execution_gas: uint128, nativeDrop_amount: uint128, receiver: bytes32 + // lzReceive_option_size = len(option_type) + len(execution_gas) = 1 + 16 = 17 + // nativeDrop_option_size = len(option_type) + len(nativeDrop_amount) + len(receiver) = 1 + 16 + 32 = 49 + executorOptions = abi.encodePacked( + ExecutorOptions.WORKER_ID, + uint16(17), // 16 + 1, 16 for option_length, + 1 for option_type + ExecutorOptions.OPTION_TYPE_LZRECEIVE, + executionGas, + ExecutorOptions.WORKER_ID, + uint16(49), // 48 + 1, 32 + 16 for option_length, + 1 for option_type + ExecutorOptions.OPTION_TYPE_NATIVE_DROP, + amount, + receiver + ); + } else { + revert UlnOptions.LZ_ULN_UnsupportedOptionType(_optionType); + } + } + + // NOT IMPLEMENTING + function burn( + address _oapp, + uint32 _srcEid, + bytes32 _sender, + uint64 _nonce, + bytes32 _payloadHash + ) external {} + + function clear( + address _oapp, + Origin calldata _origin, + bytes32 _guid, + bytes calldata _message + ) external {} + + mapping(address from => mapping(address to => mapping(bytes32 guid => mapping(uint16 index => bytes32 messageHash)))) + public composeQueue; + + function defaultReceiveLibrary( + uint32 /*_eid*/ + ) external pure returns (address) { + return address(0); + } + + function defaultReceiveLibraryTimeout( + uint32 /*_eid*/ + ) external pure returns (address lib, uint256 expiry) { + return (address(0), 0); + } + + function defaultSendLibrary( + uint32 /*_eid*/ + ) external pure returns (address) { + return address(0); + } + + function executable( + Origin calldata /*_origin*/, + address /*receiver*/ + ) external pure returns (ExecutionState) { + return ExecutionState.NotExecutable; + } + + function getConfig( + address /*_oapp*/, + address /*_lib*/, + uint32 /*_eid*/, + uint32 /*_configType*/ + ) external pure returns (bytes memory config) { + return bytes("0x"); + } + + function getReceiveLibrary( + address /*receiver*/, + uint32 /*_eid*/ + ) external pure returns (address lib, bool isDefault) { + return (address(0), false); + } + + function getRegisteredLibraries() external pure returns (address[] memory) { + address[] memory addresses = new address[](1); + addresses[0] = address(0); + return addresses; + } + + function getSendLibrary( + address /*_sender*/, + uint32 /*_eid*/ + ) external pure returns (address lib) { + return address(0); + } + + function inboundNonce( + address _receiver, + uint32 _srcEid, + bytes32 _sender + ) external view returns (uint64) { + return lazyInboundNonce[_receiver][_srcEid][_sender]; + } + + function isDefaultSendLibrary( + address /*_sender*/, + uint32 /*_eid*/ + ) external pure returns (bool) { + return false; + } + + function isRegisteredLibrary( + address /*_lib*/ + ) external pure returns (bool) { + return false; + } + + function isSupportedEid(uint32 /*_eid*/) external pure returns (bool) { + return false; + } + + function lzCompose( + address /*_from,*/, + address /*_to,*/, + bytes32 /*_guid,*/, + uint16 /*_index,*/, + bytes calldata /*_message,*/, + bytes calldata /*_extraData*/ + ) external payable {} + + function lzReceive( + Origin calldata /*_origin,*/, + address /*_receiver,*/, + bytes32 /*_guid,*/, + bytes calldata /*_message,*/, + bytes calldata /*_extraData*/ + ) external payable {} + + function lzToken() external pure returns (address) { + return address(0); + } + + function nativeToken() external pure returns (address) { + return address(0); + } + + function nextGuid( + address /*_sender,*/, + uint32 /*_dstEid,*/, + bytes32 /*_receiver*/ + ) external pure returns (bytes32) { + return 0; + } + + function nilify( + address /*_oapp,*/, + uint32 /*_srcEid,*/, + bytes32 /*_sender,*/, + uint64 /*_nonce,*/, + bytes32 /*_payloadHash*/ + ) external {} + + function quote( + MessagingParams calldata _params, + address _sender + ) external view returns (MessagingFee memory) { + return _quote(_params, _sender); + } + + mapping(address receiver => mapping(uint32 srcEid => Timeout)) + public receiveLibraryTimeout; + + function registerLibrary(address /*_lib*/) public {} + + function sendCompose( + address, + /*_to*/ bytes32, + /*_guid*/ uint16, + /*_index*/ bytes calldata /*_message*/ + ) external {} + + function setConfig( + address, + /*_oapp*/ address, + /*_lib*/ SetConfigParam[] calldata /*_params*/ + ) external {} + + function setDefaultReceiveLibrary( + uint32 /*_eid*/, + address /*_newLib*/, + uint256 /*_gracePeriod*/ + ) external {} + + function setDefaultReceiveLibraryTimeout( + uint32 /*_eid*/, + address /*_lib*/, + uint256 /*_expiry*/ + ) external {} + + function setDefaultSendLibrary( + uint32 /*_eid*/, + address /*_newLib*/ + ) external {} + + function setDelegate(address /*_delegate*/) external {} + + function setLzToken(address /*_lzToken*/) external {} + + function setReceiveLibrary( + address, + /*_oapp*/ uint32, + /*_eid*/ address, + /*_newLib*/ uint256 /*_gracePeriod*/ + ) external {} + + function setReceiveLibraryTimeout( + address, + /*_oapp*/ uint32, + /*_eid*/ address, + /*_lib*/ uint256 /*_gracePeriod*/ + ) external {} + + function setSendLibrary( + address, + /*_oapp*/ uint32, + /*_eid*/ address /*_newLib*/ + ) external {} + + function skip( + address, + /*_oapp*/ uint32, + /*_srcEid*/ bytes32, + /*_sender*/ uint64 /*_nonce*/ + ) external {} + + function verifiable( + Origin calldata /*_origin*/, + address /*_receiver*/, + address /*_receiveLib*/, + bytes32 /*_payloadHash*/ + ) external pure returns (bool) { + return false; + } + + function verify( + Origin calldata /*origin*/, + address /*_receiver*/, + bytes32 /*_payloadHash*/ + ) external {} + + // Helper Functions + function executeNativeAirDropAndReturnLzGas( + bytes calldata _options + ) public returns (uint256 totalGas, uint256 dstAmount) { + (bytes memory executorOpts, ) = decode(_options); + return this._executeNativeAirDropAndReturnLzGas(executorOpts); + } + + function _executeNativeAirDropAndReturnLzGas( + bytes calldata _options + ) public returns (uint256 totalGas, uint256 dstAmount) { + if (_options.length == 0) { + revert IExecutorFeeLib.Executor_NoOptions(); + } + + uint256 cursor = 0; + while (cursor < _options.length) { + ( + uint8 optionType, + bytes calldata option, + uint256 newCursor + ) = _options.nextExecutorOption(cursor); + cursor = newCursor; + + if (optionType == ExecutorOptions.OPTION_TYPE_LZRECEIVE) { + (uint128 gas, uint128 value) = ExecutorOptions + .decodeLzReceiveOption(option); + totalGas += gas; + dstAmount += value; + } else if (optionType == ExecutorOptions.OPTION_TYPE_NATIVE_DROP) { + (uint128 nativeDropAmount, bytes32 receiver) = ExecutorOptions + .decodeNativeDropOption(option); + (bool success, ) = receiver.bytes32ToAddress().call{ + value: nativeDropAmount + }(""); + if (!success) { + emit ValueTransferFailed( + receiver.bytes32ToAddress(), + nativeDropAmount + ); + } + } else { + revert IExecutorFeeLib.Executor_UnsupportedOptionType( + optionType + ); + } + } + + if (cursor != _options.length) + revert IExecutorFeeLib.Executor_InvalidExecutorOptions(cursor); + } + + function _initializable( + Origin calldata _origin, + address _receiver, + uint64 _lazyInboundNonce + ) internal view returns (bool) { + return + _lazyInboundNonce > 0 || // allowInitializePath already checked + ILayerZeroReceiver(_receiver).allowInitializePath(_origin); + } + + /// @dev bytes(0) payloadHash can never be submitted + function _verifiable( + Origin calldata _origin, + address _receiver, + uint64 _lazyInboundNonce + ) internal view returns (bool) { + return + _origin.nonce > _lazyInboundNonce || // either initializing an empty slot or reverifying + inboundPayloadHash[_receiver][_origin.srcEid][_origin.sender][ + _origin.nonce + ] != + EMPTY_PAYLOAD_HASH; // only allow reverifying if it hasn't been executed + } + + // ========================= VIEW FUNCTIONS FOR OFFCHAIN ONLY ========================= + // Not involved in any state transition function. + // ==================================================================================== + function initializable( + Origin calldata _origin, + address _receiver + ) external view returns (bool) { + return + _initializable( + _origin, + _receiver, + lazyInboundNonce[_receiver][_origin.srcEid][_origin.sender] + ); + } + + function verifiable( + Origin calldata _origin, + address _receiver + ) external view returns (bool) { + return + _verifiable( + _origin, + _receiver, + lazyInboundNonce[_receiver][_origin.srcEid][_origin.sender] + ); + } + + /// @dev called when the endpoint checks if the msgLib attempting to verify the msg is the configured msgLib of the Oapp + /// @dev this check provides the ability for Oapp to lock in a trusted msgLib + /// @dev it will fist check if the msgLib is the currently configured one. then check if the msgLib is the one in grace period of msgLib versioning upgrade + function isValidReceiveLibrary( + address _receiver, + uint32 _srcEid, + address _actualReceiveLib + ) public view returns (bool) { + return true; + } +} diff --git a/projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapter.sol b/projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapter.sol new file mode 100644 index 00000000..094c2e0b --- /dev/null +++ b/projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapter.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {Address} from "@openzeppelin/contracts/utils/Address.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {OAppUpgradeable} from "../LayerZero/OAppUpgradeable.sol"; + +import {IAdapter} from "../interfaces/IAdapter.sol"; + +/** + * @title AbstractCrossChainAdapter + * @author InceptionLRT + * @dev This abstract contract provides core functionality for cross-chain ETH transfers. + * It allows designated target receivers to handle incoming cross-chain ETH deposits + * and provides recovery of contract-held ETH to a specified receiver. + * This contract is intended to be inherited by contracts implementing specific cross-chain bridge logic. + */ +abstract contract AbstractCrossChainAdapter is IAdapter { + /// NOTE: targetReceiver is a term encompassing both Rebalancer on L1 or InceptionOmniTargetReceiver on L2 + address public targetReceiver; + + modifier onlyOwnerRestricted() virtual; + + function setTargetReceiver(address _newTargetReceiver) + external + override + onlyOwnerRestricted + { + require(_newTargetReceiver != address(0), SettingZeroAddress()); + emit TargetReceiverChanged(targetReceiver, _newTargetReceiver); + targetReceiver = _newTargetReceiver; + } + + function recoverFunds() external override virtual onlyOwnerRestricted { + require(targetReceiver != address(0), TargetReceiverNotSet()); + uint256 amount = address(this).balance; + (bool success, ) = targetReceiver.call{value: amount}(""); + require(success, TransferToTargetReceiverFailed()); + emit RecoverFundsInitiated(amount); + } + + //primary function for receiving ETH from other chain + function _handleCrossChainEth(uint256 _chainId) internal { + emit CrossChainEthDeposit(_chainId, msg.value); + Address.sendValue(payable(targetReceiver), msg.value); + } + + /// @dev fallback function just in case a cross-chain adapter messes up sending ETH to the right function + receive() external payable override { + emit ReceiveTriggered(msg.sender, msg.value); + } +} diff --git a/projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapterL1.sol b/projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapterL1.sol new file mode 100644 index 00000000..80b7a864 --- /dev/null +++ b/projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapterL1.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {ICrossChainBridgeL1} from "../interfaces/AdapterLayer1/ICrossChainBridgeL1.sol"; +import {AbstractCrossChainAdapter} from "./AbstractCrossChainAdapter.sol"; +import {IRebalancer} from "../interfaces/common/IRebalancer.sol"; + +/** + * @title AbstractCrossChainAdapter + * @author InceptionLRT + * @dev This abstract contract extends `AbstractCrossChainAdapter` with functionality specific to receiving + * cross-chain data from Layer 2 to Layer 1. It decodes and processes data from incoming cross-chain messages, + * updating the designated `targetReceiver` with timestamped balance and supply information. + * Intended for use by Layer 1 cross-chain bridge adapters. + */ +abstract contract AbstractCrossChainAdapterL1 is + AbstractCrossChainAdapter, + ICrossChainBridgeL1 +{ + function _handleCrossChainData(uint256 _chainId, bytes calldata _payload) + internal + { + require(targetReceiver != address(0), TargetReceiverNotSet()); + ( + uint256 timestamp, + uint256 totalSupply, + uint256 balance + ) = _decodeCalldata(_payload); + IRebalancer(targetReceiver).handleL2Info( + _chainId, + timestamp, + balance, + totalSupply + ); + emit CrossChainInfoReceived(_chainId, timestamp, balance, totalSupply); + } + + function _decodeCalldata(bytes calldata payload) + internal + pure + returns ( + uint256, + uint256, + uint256 + ) + { + (uint256 timestamp, uint256 balance, uint256 totalSupply) = abi.decode( + payload, + (uint256, uint256, uint256) + ); + return (timestamp, balance, totalSupply); + } +} diff --git a/projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapterL2.sol b/projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapterL2.sol new file mode 100644 index 00000000..2ffeba0d --- /dev/null +++ b/projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapterL2.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {ICrossChainBridgeL2} from "../interfaces/AdapterLayer2/ICrossChainBridgeL2.sol"; +import {AbstractCrossChainAdapter} from "./AbstractCrossChainAdapter.sol"; + +/** + * @title AbstractCrossChainAdapterL2 + * @dev This abstract contract is a placeholder for Layer 2 cross-chain bridge functionality. It extends + * `AbstractCrossChainAdapter` and implements `ICrossChainBridgeL2`, serving as a placeholder for functionalities of Layer 2 + * cross-chain adapters. + */ + +abstract contract AbstractCrossChainAdapterL2 is + AbstractCrossChainAdapter, + ICrossChainBridgeL2 +{ + //EMPTY... for now +} diff --git a/projects/bridge-lz/contracts/abstract/AbstractFraxFerryERC20Adapter.sol b/projects/bridge-lz/contracts/abstract/AbstractFraxFerryERC20Adapter.sol new file mode 100644 index 00000000..88b70a8a --- /dev/null +++ b/projects/bridge-lz/contracts/abstract/AbstractFraxFerryERC20Adapter.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {IFraxFerry} from "../interfaces/IFraxFerry.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IERC20CrossChainBridge} from "../interfaces/IERC20CrossChainBridge.sol"; +import "@openzeppelin/contracts/utils/math/Math.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +/** + * @title AbstractFraxFerryERC20Adapter + * @author InceptionLRT + * @dev This abstract contract provides functionality for transfers of ERC20 tokens between networks + * by the means of FraxFerry. + * This contract is intended to be inherited by contracts implementing specific cross-chain bridge logic. + */ +abstract contract AbstractFraxFerryERC20Adapter is IERC20CrossChainBridge { + using SafeERC20 for IERC20; + + IFraxFerry public ferry; + IERC20 public token; + address public erc20DestinationChain; + + /// @dev Start the bridging process + function sendTokens(uint256 amount) external returns (uint256) { + require(erc20DestinationChain != address(0), errDestinationNotSet()); + + address vault = msg.sender; + // pull tokens from msg.sender (we already have approval from the vault) + token.safeTransferFrom(vault, address(this), amount); + // approve the ferry to draw tokens + /// TODO: forceApprove ? + token.forceApprove(address(ferry), amount); + ferry.embarkWithRecipient(amount, erc20DestinationChain); + // send back whatever wasn't taken by ferry + uint256 bal = token.balanceOf(address(this)); + if (bal == 0) return 0; + + token.safeTransfer(vault, bal); + emit DustReturnedToVault(bal); + + return bal; + } + + /// @dev Get the fee for using the ferry + function quoteSendTokens(uint256 amount) external view returns (uint256) { + return + Math.min( + Math.max(ferry.FEE_MIN(), (amount * ferry.FEE_RATE()) / 10000), + ferry.FEE_MAX() + ); + } +} diff --git a/projects/bridge-lz/contracts/abstract/AbstractLZCrossChainAdapter.sol b/projects/bridge-lz/contracts/abstract/AbstractLZCrossChainAdapter.sol new file mode 100644 index 00000000..664cda0a --- /dev/null +++ b/projects/bridge-lz/contracts/abstract/AbstractLZCrossChainAdapter.sol @@ -0,0 +1,151 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {Address} from "@openzeppelin/contracts/utils/Address.sol"; +import {Origin, MessagingReceipt, MessagingFee} from "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {OptionsBuilder} from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol"; + +import {AbstractCrossChainAdapter} from "./AbstractCrossChainAdapter.sol"; +import {IAdapter} from "../interfaces/IAdapter.sol"; +import {OAppUpgradeable} from "../LayerZero/OAppUpgradeable.sol"; + +/** + * @title AbstractLZCrossChainAdapter + * @dev Provides foundational cross-chain messaging functionality using LayerZero's messaging protocols. + * This contract includes methods to send and quote cross-chain ETH transactions, map LayerZero Endpoint IDs (EIDs) + * to chain IDs, and configure peer contracts for cross-chain interaction. It is intended to be inherited by specific + * cross-chain adapter implementations. + */ +abstract contract AbstractLZCrossChainAdapter is IAdapter, OAppUpgradeable { + using OptionsBuilder for bytes; + + error NoDestEidFoundForChainId(uint256 chainId); + error ArraysLengthsMismatch(); + error OptionsTooShort(); + + mapping(uint32 => uint256) public eidToChainId; + mapping(uint256 => uint32) public chainIdToEid; + + modifier onlyOwnerRestricted() virtual; + modifier onlyTargetReceiverRestricted() virtual; + + function sendEthCrossChain(uint256 _chainId, bytes memory _options) + external + payable + override + virtual + onlyTargetReceiverRestricted + returns (uint256) + { + return _sendCrosschain(_chainId, new bytes(0), _options); + } + + function _quote( + uint256 _chainId, + bytes calldata _payload, + bytes memory _options + ) internal view returns (uint256) { + uint32 dstEid = getEidFromChainId(_chainId); + if (dstEid == 0) revert NoDestEidFoundForChainId(_chainId); + MessagingFee memory fee = _quote(dstEid, _payload, _options, false); + return fee.nativeFee; + } + + function quoteSendEth(uint256 _chainId, bytes memory _options) + external + view + virtual + override + returns (uint256) + { + uint32 dstEid = getEidFromChainId(_chainId); + if (dstEid == 0) revert NoDestEidFoundForChainId(_chainId); + + bytes memory emptyPayload = ""; + MessagingFee memory fee = _quote(dstEid, emptyPayload, _options, false); + return fee.nativeFee; + } + + function setChainIdFromEid(uint32 _eid, uint256 _chainId) + public + onlyOwnerRestricted + { + eidToChainId[_eid] = _chainId; + chainIdToEid[_chainId] = _eid; + emit ChainIdAdded(_chainId); + } + + function getChainIdFromEid(uint32 _eid) public view returns (uint256) { + return eidToChainId[_eid]; + } + + function getEidFromChainId(uint256 _chainId) public view returns (uint32) { + return chainIdToEid[_chainId]; + } + + function setPeer(uint32 _eid, bytes32 _peer) + public + override + onlyOwnerRestricted + { + _setPeer(_eid, _peer); + } + + function _sendCrosschain( + uint256 _chainId, + bytes memory _payload, + bytes memory _options + ) internal returns (uint256) { + uint32 dstEid = getEidFromChainId(_chainId); + MessagingReceipt memory receipt = _lzSend( + dstEid, + _payload, + _options, + MessagingFee(msg.value, 0), + payable(msg.sender) + ); + + uint256 fee = receipt.fee.nativeFee - this.getValueFromOpts(_options); + emit CrossChainMessageSent( + _chainId, + this.getValueFromOpts(_options), + _payload, + fee + ); + + return fee; + } + + function getValueFromOpts(bytes calldata _options) + public + pure + override + returns (uint256) + { + require(_options.length >= 16, OptionsTooShort()); + if (_options.length <= 32) { + return 0; + } + uint256 valueStart = _options.length - 16; + uint256 valueEnd = _options.length; + return uint256(uint128(bytes16(_options[valueStart:valueEnd]))); + } + + /// @notice Creates options for executing `lzReceive` on the destination chain. + /// @param _gas The gas amount for the `lzReceive` execution. + /// @param _value The msg.value for the `lzReceive` execution. + /// @return bytes-encoded option set for `lzReceive` executor. + function createLzReceiveOption(uint256 _gas, uint256 _value) + public + pure + returns (bytes memory) + { + return + OptionsBuilder.newOptions().addExecutorLzReceiveOption( + uint128(_gas), + uint128(_value) + ); + } +} diff --git a/projects/bridge-lz/contracts/interfaces/AdapterLayer1/ICrossChainBridgeL1.sol b/projects/bridge-lz/contracts/interfaces/AdapterLayer1/ICrossChainBridgeL1.sol new file mode 100644 index 00000000..64c62a4e --- /dev/null +++ b/projects/bridge-lz/contracts/interfaces/AdapterLayer1/ICrossChainBridgeL1.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {IAdapter} from "../IAdapter.sol"; + +interface ICrossChainBridgeL1 is IAdapter { + event CrossChainInfoReceived( + uint256 indexed chainId, + uint256 timestamp, + uint256 balance, + uint256 totalSupply + ); +} diff --git a/projects/bridge-lz/contracts/interfaces/AdapterLayer2/ICrossChainBridgeL2.sol b/projects/bridge-lz/contracts/interfaces/AdapterLayer2/ICrossChainBridgeL2.sol new file mode 100644 index 00000000..4fc9746a --- /dev/null +++ b/projects/bridge-lz/contracts/interfaces/AdapterLayer2/ICrossChainBridgeL2.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {IAdapter} from "../IAdapter.sol"; + +interface ICrossChainBridgeL2 is IAdapter { + function quote(bytes calldata _payload, bytes memory _options) + external + view + returns (uint256); + + function sendDataL1(bytes calldata _payload, bytes memory _options) + external + payable + returns (uint256); +} diff --git a/projects/bridge-lz/contracts/interfaces/FraxFerry/IFraxFerry.sol b/projects/bridge-lz/contracts/interfaces/FraxFerry/IFraxFerry.sol new file mode 100644 index 00000000..3363ae9f --- /dev/null +++ b/projects/bridge-lz/contracts/interfaces/FraxFerry/IFraxFerry.sol @@ -0,0 +1,162 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.8.0; + +interface IFraxFerry { + struct Transaction { + address user; + uint64 amount; + uint32 timestamp; + } + + struct Batch { + uint64 start; + uint64 end; + uint64 departureTime; + uint64 status; + bytes32 hash; + } + + struct BatchData { + uint256 startTransactionNo; + Transaction[] transactions; + } + + function FEE() external view returns (uint256); + + function MIN_WAIT_PERIOD_ADD() external view returns (uint256); + + function MIN_WAIT_PERIOD_EXECUTE() external view returns (uint256); + + function REDUCED_DECIMALS() external view returns (uint256); + + function acceptOwnership() external; + + function batches(uint256) + external + view + returns ( + uint64 start, + uint64 end, + uint64 departureTime, + uint64 status, + bytes32 hash + ); + + function cancelled(uint256) external view returns (bool); + + function captain() external view returns (address); + + function chainid() external view returns (uint256); + + function crewmembers(address) external view returns (bool); + + function depart( + uint256 start, + uint256 end, + bytes32 hash + ) external; + + function disembark(BatchData memory batchData) external; + + function disputeBatch(uint256 batchNo, bytes32 hash) external; + + function embark(uint256 amount) external; + + function embarkWithRecipient(uint256 amount, address recipient) external; + + function embarkWithSignature( + uint256 _amount, + address recipient, + uint256 deadline, + bool approveMax, + uint8 v, + bytes32 r, + bytes32 s + ) external; + + function execute( + address _to, + uint256 _value, + bytes memory _data + ) external returns (bool, bytes memory); + + function executeIndex() external view returns (uint256); + + function firstOfficer() external view returns (address); + + function getBatchAmount(uint256 start, uint256 end) + external + view + returns (uint256 totalAmount); + + function getBatchData(uint256 start, uint256 end) + external + view + returns (BatchData memory data); + + function getNextBatch(uint256 _start, uint256 max) + external + view + returns ( + uint256 start, + uint256 end, + bytes32 hash + ); + + function getTransactionsHash(uint256 start, uint256 end) + external + view + returns (bytes32); + + function jettison(uint256 index, bool cancel) external; + + function jettisonGroup(uint256[] memory indexes, bool cancel) external; + + function noBatches() external view returns (uint256); + + function noTransactions() external view returns (uint256); + + function nominateNewOwner(address newOwner) external; + + function nominatedOwner() external view returns (address); + + function owner() external view returns (address); + + function pause() external; + + function paused() external view returns (bool); + + function removeBatches(uint256 batchNo) external; + + function sendTokens(address receiver, uint256 amount) external; + + function setCaptain(address newCaptain) external; + + function setCrewmember(address crewmember, bool set) external; + + function setFee(uint256 _FEE) external; + + function setFirstOfficer(address newFirstOfficer) external; + + function setMinWaitPeriods( + uint256 _MIN_WAIT_PERIOD_ADD, + uint256 _MIN_WAIT_PERIOD_EXECUTE + ) external; + + function targetChain() external view returns (uint256); + + function targetToken() external view returns (address); + + function token() external view returns (address); + + function transactions(uint256) + external + view + returns ( + address user, + uint64 amount, + uint32 timestamp + ); + + function unPause() external; +} diff --git a/projects/bridge-lz/contracts/interfaces/IAdapter.sol b/projects/bridge-lz/contracts/interfaces/IAdapter.sol new file mode 100644 index 00000000..ceee6788 --- /dev/null +++ b/projects/bridge-lz/contracts/interfaces/IAdapter.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.27; + +interface IAdapter { + event TargetReceiverChanged( + address prevTargetReceiver, + address newTargetReceiver + ); + event RecoverFundsInitiated(uint256 amount); + event ReceiveTriggered(address caller, uint256 amount); + event CrossChainEthDeposit(uint256 chainId, uint256 amount); + event ChainIdAdded(uint256 _chainId); + event CrossChainMessageReceived( + uint256 indexed chainId, + uint256 value, + bytes data + ); + event CrossChainMessageSent( + uint256 indexed chainId, + uint256 value, + bytes data, + uint256 fee + ); + + error TargetReceiverNotSet(); + error TransferToTargetReceiverFailed(); + error SettingZeroAddress(); + error NotTargetReceiver(address caller); + error ChainIdNotFound(uint256 chainId); + error NotAllowedInThisAdapterType(); + + function setTargetReceiver(address _newTargetReceiver) external; + + function recoverFunds() external; + + function quoteSendEth( + uint256 _chainId, + bytes memory _options + ) external view returns (uint256); + + function sendEthCrossChain( + uint256 _chainId, + bytes memory _options + ) external payable returns (uint256); + + function getValueFromOpts( + bytes calldata _options + ) external view returns (uint256); + + receive() external payable; +} diff --git a/projects/bridge-lz/contracts/interfaces/IERC20CrossChainBridge.sol b/projects/bridge-lz/contracts/interfaces/IERC20CrossChainBridge.sol new file mode 100644 index 00000000..a893c908 --- /dev/null +++ b/projects/bridge-lz/contracts/interfaces/IERC20CrossChainBridge.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {ICrossChainBridgeL2} from "./AdapterLayer2/ICrossChainBridgeL2.sol"; + +interface IERC20CrossChainBridge is ICrossChainBridgeL2 { + function sendTokens(uint256 amount) external returns (uint256); // return value = what was returned (dust, etc) + function quoteSendTokens(uint256 amount) external view returns (uint256); + + error errDestinationNotSet(); + error errNullDestination(); + + event DestinationChanged(address destination); + event DustReturnedToVault(uint256 amount); +} diff --git a/projects/bridge-lz/contracts/interfaces/IFraxFerry.sol b/projects/bridge-lz/contracts/interfaces/IFraxFerry.sol new file mode 100644 index 00000000..2f44bf9f --- /dev/null +++ b/projects/bridge-lz/contracts/interfaces/IFraxFerry.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +interface IFraxFerry { + event FerryChanged(address ferry); + error errNullFerry(); + + function FEE_RATE() external view returns (uint256); + + function FEE_MIN() external view returns (uint256); + + function FEE_MAX() external view returns (uint256); + + function embarkWithRecipient(uint amount, address recipient) external; + + function embark(uint amount) external; + + function embarkWithSignature( + uint256 _amount, + address recipient, + uint256 deadline, + bool approveMax, + uint8 v, + bytes32 r, + bytes32 s + ) external; +} diff --git a/projects/bridge-lz/contracts/interfaces/LayerZero/IOAppCoreUpgradeable.sol b/projects/bridge-lz/contracts/interfaces/LayerZero/IOAppCoreUpgradeable.sol new file mode 100644 index 00000000..57732cf0 --- /dev/null +++ b/projects/bridge-lz/contracts/interfaces/LayerZero/IOAppCoreUpgradeable.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.23; + +import {ILayerZeroEndpointV2} from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol"; + +/** + * @title IOAppCoreUpgrageable + */ +interface IOAppCoreUpgradeable { + // Custom error messages + error OnlyPeer(uint32 eid, bytes32 sender); + error NoPeer(uint32 eid); + error InvalidEndpointCall(); + error InvalidDelegate(); + + // Event emitted when a peer (OApp) is set for a corresponding endpoint + event PeerSet(uint32 eid, bytes32 peer); + + /** + * @notice Retrieves the OApp version information. + * @return senderVersion The version of the OAppSender.sol contract. + * @return receiverVersion The version of the OAppReceiver.sol contract. + */ + function oAppVersion() + external + view + returns (uint64 senderVersion, uint64 receiverVersion); + + /** + * @notice Retrieves the LayerZero endpoint associated with the OApp. + * @return iEndpoint The LayerZero endpoint as an interface. + */ + function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint); + + /** + * @notice Retrieves the peer (OApp) associated with a corresponding endpoint. + * @param _eid The endpoint ID. + * @return peer The peer address (OApp instance) associated with the corresponding endpoint. + */ + function peers(uint32 _eid) external view returns (bytes32 peer); + + /** + * @notice Sets the peer address (OApp instance) for a corresponding endpoint. + * @param _eid The endpoint ID. + * @param _peer The address of the peer to be associated with the corresponding endpoint. + */ + function setPeer(uint32 _eid, bytes32 _peer) external; +} diff --git a/projects/bridge-lz/contracts/interfaces/LayerZero/IOAppReceiverUpgradeable.sol b/projects/bridge-lz/contracts/interfaces/LayerZero/IOAppReceiverUpgradeable.sol new file mode 100644 index 00000000..f6565760 --- /dev/null +++ b/projects/bridge-lz/contracts/interfaces/LayerZero/IOAppReceiverUpgradeable.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.23; + +import {ILayerZeroReceiver, Origin} from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol"; + +/** + * @title IOAppReceiverUpgradeable + */ +interface IOAppReceiverUpgradeable is ILayerZeroReceiver { + /** + * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint. + * @param _origin The origin information containing the source endpoint and sender address. + * - srcEid: The source chain endpoint ID. + * - sender: The sender address on the src chain. + * - nonce: The nonce of the message. + * @param _message The lzReceive payload. + * @param _sender The sender address. + * @return isSender Is a valid sender. + * + * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer. + * @dev The default sender IS the OAppReceiver implementer. + */ + function isComposeMsgSender( + Origin calldata _origin, + bytes calldata _message, + address _sender + ) external view returns (bool isSender); +} diff --git a/projects/bridge-lz/contracts/interfaces/common/IRebalancer.sol b/projects/bridge-lz/contracts/interfaces/common/IRebalancer.sol new file mode 100644 index 00000000..2b14bb4c --- /dev/null +++ b/projects/bridge-lz/contracts/interfaces/common/IRebalancer.sol @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.27; + +interface IRebalancer { + struct Transaction { + uint256 timestamp; + uint256 ethBalance; + uint256 inceptionTokenBalance; + } + + // Events + event L2InfoReceived( + uint256 indexed networkId, + uint256 timestamp, + uint256 ethBalance, + uint256 inceptionTokenBalance + ); + event ETHReceived(address sender, uint256 amount); + event ETHDepositedToLiquidPool(address liquidPool, uint256 amountETH); + event InceptionTokenDepositedToLockbox(uint256 mintAmount); + event TreasuryUpdateMint(uint256 mintAmount); + event TreasuryUpdateBurn(uint256 mintAmount); + event LockboxChanged(address prevLockbox, address newLockbox); + event InceptionTokenChanged( + address prevInceptionToken, + address newInceptionToken + ); + event LiqPoolChanged(address prevLiqPool, address newLiqPool); + event OperatorChanged(address prevOperator, address newOperator); + event AdapterAdded(uint256 indexed chainId, address newAdapter); + event DefaultBridgeChanged( + address indexed prevDefaultAdapter, + address indexed newDefaultAdapter + ); + event ChainIdAdded(uint256 chainId); + event ChainIdDeleted(uint256 chainId, uint256 index); + + error MsgNotFromBridge(address caller); + error ChainIdAlreadyExists(uint256 chainId); + error ChainIdNotFound(uint256 chainId); + error BridgeAlreadyExists(uint256 chainId); + error NoBridgeForThisChainId(uint256 chainId); + error TimeCannotBeInFuture(uint256 timestamp); + error TimeBeforePrevRecord(uint256 timestamp); + error SettingZeroAddress(); + error TransferToLockboxFailed(); + error InceptionTokenAddressNotSet(); + error LiquidityPoolNotSet(); + error CrosschainBridgeNotSet(); + error MissingOneOrMoreL2Transactions(uint256 chainId); + error StakeAmountExceedsEthBalance(uint256 staked, uint256 availableEth); + error SendAmountExceedsEthBalance(uint256 amountToSend); + error StakeAmountExceedsMaxTVL(); + error OnlyOperator(); + error OnlyAdapter(); + error NoRebalancingRequired(); + error IndexOutOfBounds(uint256 index, uint256 length); + error NoAdapterAvailable(uint256 _chainId); + + function handleL2Info( + uint256 _chainId, + uint256 _timestamp, + uint256 _balance, + uint256 _totalSupply + ) external; + + function getTransactionData( + uint256 _chainId + ) external view returns (Transaction memory); + + function setDefaultAdapter(address payable _newDefaultAdapter) external; + + function setInceptionToken(address _inceptionTokenAddress) external; + + function setLockboxAddress(address _lockboxAddress) external; + + function updateTreasuryData() external; + + function inceptionToken() external view returns (address); + + function lockboxAddress() external view returns (address); + + function liqPool() external view returns (address payable); + + function ratioFeed() external view returns (address); + + function operator() external view returns (address); + + function defaultAdapter() external view returns (address payable); +} diff --git a/projects/bridge-lz/contracts/interfaces/common/IXERC20.sol b/projects/bridge-lz/contracts/interfaces/common/IXERC20.sol new file mode 100644 index 00000000..3e65f27f --- /dev/null +++ b/projects/bridge-lz/contracts/interfaces/common/IXERC20.sol @@ -0,0 +1,143 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +interface IERC20Errors { + /** + * @notice Reverts when a user with too low of a limit tries to call mint/burn + */ + error IXERC20_NotHighEnoughLimits(); + + /** + * @notice Reverts when caller is not the factory + */ + error IXERC20_NotFactory(); + + /** + * @notice Reverts when caller sets too small _limit + */ + error IXERC20_WrongBridgeLimit(); +} + +interface IXERC20 is IERC20Errors { + /** + * @notice Contains the full minting and burning data for a particular bridge + * + * @param minterParams The minting parameters for the bridge + * @param burnerParams The burning parameters for the bridge + */ + struct Bridge { + BridgeParameters minterParams; + BridgeParameters burnerParams; + } + + /** + * @notice Emits when a lockbox is set + * + * @param _lockbox The address of the lockbox + */ + event LockboxSet(address _lockbox); + + /** + * @notice Emits when a limit is set + * + * @param _mintingLimit The updated minting limit we are setting to the bridge + * @param _burningLimit The updated burning limit we are setting to the bridge + * @param _bridge The address of the bridge we are setting the limit too + */ + event BridgeLimitsSet( + uint256 _mintingLimit, + uint256 _burningLimit, + address indexed _bridge + ); + + /** + * @notice Contains the mint or burn parameters for a bridge + * + * @param timestamp The timestamp of the last mint/burn + * @param ratePerSecond The rate per second of the bridge + * @param maxLimit The max limit of the bridge + * @param currentLimit The current limit of the bridge + */ + struct BridgeParameters { + uint256 timestamp; + uint256 ratePerSecond; + uint256 maxLimit; + uint256 currentLimit; + } + + /** + * @notice Sets the lockbox address + * + * @param _lockbox The address of the lockbox + */ + function setLockbox(address _lockbox) external; + + /** + * @notice Updates the limits of any bridge + * @dev Can only be called by the owner + * @param _mintingLimit The updated minting limit we are setting to the bridge + * @param _burningLimit The updated burning limit we are setting to the bridge + * @param _bridge The address of the bridge we are setting the limits too + */ + function setBridgeLimits( + address _bridge, + uint256 _mintingLimit, + uint256 _burningLimit + ) external; + + /** + * @notice Returns the max limit of a minter + * + * @param _minter The minter we are viewing the limits of + * @return _limit The limit the minter has + */ + function mintingMaxLimitOf( + address _minter + ) external view returns (uint256 _limit); + + /** + * @notice Returns the max limit of a bridge + * + * @param _bridge the bridge we are viewing the limits of + * @return _limit The limit the bridge has + */ + function burningMaxLimitOf( + address _bridge + ) external view returns (uint256 _limit); + + /** + * @notice Returns the current limit of a minter + * + * @param _minter The minter we are viewing the limits of + * @return _limit The limit the minter has + */ + function mintingCurrentLimitOf( + address _minter + ) external view returns (uint256 _limit); + + /** + * @notice Returns the current limit of a bridge + * + * @param _bridge the bridge we are viewing the limits of + * @return _limit The limit the bridge has + */ + function burningCurrentLimitOf( + address _bridge + ) external view returns (uint256 _limit); + + /** + * @notice Mints tokens for a user + * @dev Can only be called by a minter + * @param _user The address of the user who needs tokens minted + * @param _amount The amount of tokens being minted + */ + function mint(address _user, uint256 _amount) external; + + /** + * @notice Burns tokens for a user + * @dev Can only be called by a minter + * @param _user The address of the user who needs tokens burned + * @param _amount The amount of tokens being burned + */ + function burn(address _user, uint256 _amount) external; +} diff --git a/projects/bridge-lz/deploy/FraxFerryLZCrossChainAdapterL2.ts b/projects/bridge-lz/deploy/FraxFerryLZCrossChainAdapterL2.ts new file mode 100644 index 00000000..c0953feb --- /dev/null +++ b/projects/bridge-lz/deploy/FraxFerryLZCrossChainAdapterL2.ts @@ -0,0 +1,150 @@ +import assert from "assert"; +import { DeployFunction } from "hardhat-deploy/types"; +import { ethers, upgrades, network, run } from "hardhat"; + +const contractName = "FraxFerryLZCrossChainAdapterL2"; + +const deploy: DeployFunction = async (hre) => { + const { getNamedAccounts } = hre; + const { deployer } = await getNamedAccounts(); + + assert(deployer, "Missing named deployer account"); + console.log(`Deployer Address: ${deployer}`); + + const targetNetwork = network.name; + + const testnetNames = ["fraxHolesky","optimismSepolia", "arbitrumSepolia", "hardhat"]; + const mainnetNames = ["arbitrum", "optimism"]; + + const isTestnet = testnetNames.includes(targetNetwork); + const isMainnet = mainnetNames.includes(targetNetwork); + + if (!isTestnet && !isMainnet) { + throw new Error(`Unsupported network: ${targetNetwork}`); + } + + console.log(`Target Network: ${targetNetwork}`); + console.log(`Is Testnet: ${isTestnet}`); + console.log(`Is Mainnet: ${isMainnet}`); + + const endpointAddresses: Record = { + mainnet: "0x1a44076050125825900e736c501f859c50fE728c", + holesky: "0x6EDCE65403992e310A62460808c4b910D972f10f", + sepolia: "0x6EDCE65403992e310A62460808c4b910D972f10f", + arbitrum: "0x1a44076050125825900e736c501f859c50fE728c", + arbitrumSepolia: "0x6EDCE65403992e310A62460808c4b910D972f10f", + optimism: "0x1a44076050125825900e736c501f859c50fE728c", + optimismSepolia: "0x6EDCE65403992e310A62460808c4b910D972f10f", + fraxHolesky: "0x6EDCE65403992e310A62460808c4b910D972f10f", + }; + + const ferryAddresses:Record = { + fraxHolesky: "0x54102317E9AeAcbb1Eac32214d099D60d260E9a3", // WARNING: debug version + holesky: "0x54102317E9AeAcbb1Eac32214d099D60d260E9a3", // WARNING: debug version + } + + const dummyTokenAddresses:Record = { + fraxHolesky: "0x72DE502C4F68DCE383b075dA455ed45e15122a46", // WARNING: debug version + holesky: "0x72DE502C4F68DCE383b075dA455ed45e15122a46", // WARNING: debug version + } + + const endpointAddress = endpointAddresses[targetNetwork]; + if (!endpointAddress) { + throw new Error( + `No EndpointV2 address configured for network: ${targetNetwork}`, + ); + } + + const ferryAddress = ferryAddresses[targetNetwork]; + if (!ferryAddress) { + throw new Error( + `No Fraxferry address configured for network: ${targetNetwork}`, + ); + } + + const dummyTokenAddress = dummyTokenAddresses[targetNetwork]; + if (!dummyTokenAddress) { + throw new Error( + `No ERC20 address configured for network: ${targetNetwork}`, + ); + } + + const rebalancerAddress = "0x7c702FFfCB87a0d72613bDed942925b462aCcBf0"; + + console.log(`Using EndpointV2 Address: ${endpointAddress}`); + console.log(`Using Fraxferry Address: ${ferryAddress}`); + console.log(`Using dummy token Address: ${dummyTokenAddress}`); + console.log(`Using Rebalancer Address: ${rebalancerAddress}`); + + const testEids = [40255, 40161, 40231, 40232, 40217]; + const testChainIds = [2522, 11155111, 421614, 11155420, 17000]; + + const mainnetEids = [30110, 30111, 30101]; + const mainnetChainIds = [42161, 10, 1]; + + const eIds = isTestnet ? testEids : mainnetEids; + const chainIds = isTestnet ? testChainIds : mainnetChainIds; + const l1ChainId = isTestnet ? 17000 : 1; + + console.log(`EIDs: ${eIds}`); + console.log(`Chain IDs: ${chainIds}`); + + const args_x = [dummyTokenAddress, ferryAddress, rebalancerAddress, endpointAddress, deployer, l1ChainId, eIds, chainIds]; + + // Deploy the Proxy + console.log("Deploying TransparentUpgradeableProxy..."); + const contractFactory = await ethers.getContractFactory(contractName); + const contract = await upgrades.deployProxy(contractFactory, args_x, { + kind: "transparent", + }); + await contract.waitForDeployment(); + console.log( + `${contractName} Proxy deployed at:`, + await contract.getAddress(), + ); + + const proxyAdminAddress = await upgrades.erc1967.getAdminAddress( + await contract.getAddress(), + ); + console.log("ProxyAdmin deployed at:", proxyAdminAddress); + + const implementationAddress = await upgrades.erc1967.getImplementationAddress( + await contract.getAddress(), + ); + console.log("Implementation deployed at:", implementationAddress); + + // Verification + console.log("Verifying contracts..."); + + // Verify Implementation + try { + await run("verify:verify", { + address: implementationAddress, + constructorArguments: [], + }); + console.log("Implementation contract verified!"); + } catch (error) { + console.error("Error verifying Implementation contract:", error); + } + + // Verify ProxyAdmin + try { + await run("verify:verify", { + address: proxyAdminAddress, + constructorArguments: [], + }); + console.log("ProxyAdmin contract verified!"); + } catch (error) { + console.error("Error verifying ProxyAdmin contract:", error); + } +}; + +deploy.tags = ["l2-frax"]; +/* +deploy().then(() => process.exit(0)) +.catch((error) => { + console.error(error); + process.exit(1); +}); +*/ +export default deploy; diff --git a/projects/bridge-lz/deploy/LZCrossChainAdapterL1.ts b/projects/bridge-lz/deploy/LZCrossChainAdapterL1.ts new file mode 100644 index 00000000..468f9e9a --- /dev/null +++ b/projects/bridge-lz/deploy/LZCrossChainAdapterL1.ts @@ -0,0 +1,110 @@ +import assert from "assert"; +import { DeployFunction } from "hardhat-deploy/types"; +import { ethers, upgrades, network, run } from "hardhat"; + +const contractName = "LZCrossChainAdapterL1"; + +const deploy: DeployFunction = async (hre) => { + const { getNamedAccounts } = hre; + const { deployer } = await getNamedAccounts(); + + assert(deployer, "Missing named deployer account"); + console.log(`Deployer Address: ${deployer}`); + + const targetNetwork = network.name; + + const testnetNames = ["holesky", "sepolia", "hardhat"]; + const mainnetNames = ["mainnet"]; + + const isTestnet = testnetNames.includes(targetNetwork); + const isMainnet = mainnetNames.includes(targetNetwork); + + if (!isTestnet && !isMainnet) { + throw new Error(`Unsupported network: ${targetNetwork}`); + } + + console.log(`Target Network: ${targetNetwork}`); + console.log(`Is Testnet: ${isTestnet}`); + console.log(`Is Mainnet: ${isMainnet}`); + + const endpointAddresses: Record = { + mainnet: "0x1a44076050125825900e736c501f859c50fE728c", + holesky: "0x6EDCE65403992e310A62460808c4b910D972f10f", + sepolia: "0x6EDCE65403992e310A62460808c4b910D972f10f", + arbitrum: "0x1a44076050125825900e736c501f859c50fE728c", + arbitrumSepolia: "0x6EDCE65403992e310A62460808c4b910D972f10f", + optimism: "0x1a44076050125825900e736c501f859c50fE728c", + optimismSepolia: "0x6EDCE65403992e310A62460808c4b910D972f10f", + }; + + const endpointAddress = endpointAddresses[targetNetwork]; + if (!endpointAddress) { + throw new Error( + `No EndpointV2 address configured for network: ${targetNetwork}`, + ); + } + + console.log(`Using EndpointV2 Address: ${endpointAddress}`); + + const testEids = [40161, 40231, 40232, 40217]; + const testChainIds = [11155111, 421614, 11155420, 17000]; + + const mainnetEids = [30110, 30111, 30101]; + const mainnetChainIds = [42161, 10, 1]; + + const eIds = isTestnet ? testEids : mainnetEids; + const chainIds = isTestnet ? testChainIds : mainnetChainIds; + + console.log(`EIDs: ${eIds}`); + console.log(`Chain IDs: ${chainIds}`); + + const args_x = [endpointAddress, deployer, eIds, chainIds]; + + // Deploy the Proxy + console.log("Deploying TransparentUpgradeableProxy..."); + const contractFactory = await ethers.getContractFactory(contractName); + const contract = await upgrades.deployProxy(contractFactory, args_x, { + kind: "transparent", + }); + await contract.waitForDeployment(); + console.log(`${contractName} Proxy deployed at:`, contract.address); + + const proxyAdminAddress = await upgrades.erc1967.getAdminAddress( + await contract.getAddress(), + ); + console.log("ProxyAdmin deployed at:", proxyAdminAddress); + + const implementationAddress = await upgrades.erc1967.getImplementationAddress( + await contract.getAddress(), + ); + console.log("Implementation deployed at:", implementationAddress); + + // Verification + console.log("Verifying contracts..."); + + // Verify Implementation + try { + await run("verify:verify", { + address: implementationAddress, + constructorArguments: [], + }); + console.log("Implementation contract verified!"); + } catch (error) { + console.error("Error verifying Implementation contract:", error); + } + + // Verify ProxyAdmin + try { + await run("verify:verify", { + address: proxyAdminAddress, + constructorArguments: [], + }); + console.log("ProxyAdmin contract verified!"); + } catch (error) { + console.error("Error verifying ProxyAdmin contract:", error); + } +}; + +deploy.tags = ["l1"]; + +export default deploy; diff --git a/projects/bridge-lz/deploy/LZCrossChainAdapterL2.ts b/projects/bridge-lz/deploy/LZCrossChainAdapterL2.ts new file mode 100644 index 00000000..bf0e82e1 --- /dev/null +++ b/projects/bridge-lz/deploy/LZCrossChainAdapterL2.ts @@ -0,0 +1,114 @@ +import assert from "assert"; +import { DeployFunction } from "hardhat-deploy/types"; +import { ethers, upgrades, network, run } from "hardhat"; + +const contractName = "LZCrossChainAdapterL2"; + +const deploy: DeployFunction = async (hre) => { + const { getNamedAccounts } = hre; + const { deployer } = await getNamedAccounts(); + + assert(deployer, "Missing named deployer account"); + console.log(`Deployer Address: ${deployer}`); + + const targetNetwork = network.name; + + const testnetNames = ["optimismSepolia", "arbitrumSepolia", "hardhat"]; + const mainnetNames = ["arbitrum", "optimism"]; + + const isTestnet = testnetNames.includes(targetNetwork); + const isMainnet = mainnetNames.includes(targetNetwork); + + if (!isTestnet && !isMainnet) { + throw new Error(`Unsupported network: ${targetNetwork}`); + } + + console.log(`Target Network: ${targetNetwork}`); + console.log(`Is Testnet: ${isTestnet}`); + console.log(`Is Mainnet: ${isMainnet}`); + + const endpointAddresses: Record = { + mainnet: "0x1a44076050125825900e736c501f859c50fE728c", + holesky: "0x6EDCE65403992e310A62460808c4b910D972f10f", + sepolia: "0x6EDCE65403992e310A62460808c4b910D972f10f", + arbitrum: "0x1a44076050125825900e736c501f859c50fE728c", + arbitrumSepolia: "0x6EDCE65403992e310A62460808c4b910D972f10f", + optimism: "0x1a44076050125825900e736c501f859c50fE728c", + optimismSepolia: "0x6EDCE65403992e310A62460808c4b910D972f10f", + }; + + const endpointAddress = endpointAddresses[targetNetwork]; + if (!endpointAddress) { + throw new Error( + `No EndpointV2 address configured for network: ${targetNetwork}`, + ); + } + + console.log(`Using EndpointV2 Address: ${endpointAddress}`); + + const testEids = [40161, 40231, 40232, 40217]; + const testChainIds = [11155111, 421614, 11155420, 17000]; + + const mainnetEids = [30110, 30111, 30101]; + const mainnetChainIds = [42161, 10, 1]; + + const eIds = isTestnet ? testEids : mainnetEids; + const chainIds = isTestnet ? testChainIds : mainnetChainIds; + const l1ChainId = isTestnet ? 17000 : 1; + + console.log(`EIDs: ${eIds}`); + console.log(`Chain IDs: ${chainIds}`); + + const args_x = [endpointAddress, deployer, l1ChainId, eIds, chainIds]; + + // Deploy the Proxy + console.log("Deploying TransparentUpgradeableProxy..."); + const contractFactory = await ethers.getContractFactory(contractName); + const contract = await upgrades.deployProxy(contractFactory, args_x, { + kind: "transparent", + }); + await contract.waitForDeployment(); + console.log( + `${contractName} Proxy deployed at:`, + await contract.getAddress(), + ); + + const proxyAdminAddress = await upgrades.erc1967.getAdminAddress( + await contract.getAddress(), + ); + console.log("ProxyAdmin deployed at:", proxyAdminAddress); + + const implementationAddress = await upgrades.erc1967.getImplementationAddress( + await contract.getAddress(), + ); + console.log("Implementation deployed at:", implementationAddress); + + // Verification + console.log("Verifying contracts..."); + + // Verify Implementation + try { + await run("verify:verify", { + address: implementationAddress, + constructorArguments: [], + }); + console.log("Implementation contract verified!"); + } catch (error) { + console.error("Error verifying Implementation contract:", error); + } + + // Verify ProxyAdmin + try { + await run("verify:verify", { + address: proxyAdminAddress, + constructorArguments: [], + }); + console.log("ProxyAdmin contract verified!"); + } catch (error) { + console.error("Error verifying ProxyAdmin contract:", error); + } +}; + +deploy.tags = ["l2"]; + +export default deploy; diff --git a/projects/bridge-lz/hardhat.config.ts b/projects/bridge-lz/hardhat.config.ts new file mode 100644 index 00000000..8a1a92e4 --- /dev/null +++ b/projects/bridge-lz/hardhat.config.ts @@ -0,0 +1,30 @@ +import { HardhatUserConfig } from "hardhat/config"; +import { CONFIG } from "../../hh.config"; +import "@nomicfoundation/hardhat-toolbox"; +import "hardhat-gas-reporter"; +import "hardhat-deploy"; +import "@openzeppelin/hardhat-upgrades"; +import "@nomicfoundation/hardhat-verify"; + + +const config: HardhatUserConfig = { + ...(CONFIG as HardhatUserConfig), + paths: { + cache: 'cache/hardhat', + }, + solidity: { + compilers: [ + { + version: '0.8.27', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + ], + }, +} + +export default config diff --git a/projects/bridge-lz/how-to-deploy.md b/projects/bridge-lz/how-to-deploy.md new file mode 100644 index 00000000..259554b9 --- /dev/null +++ b/projects/bridge-lz/how-to-deploy.md @@ -0,0 +1,32 @@ +# How to deploy all + +## Deploy LZCrossChainBridges +0. Ensure /bridge-lz project has no `deployments` folder. +1. Deploy the Sepolia bridge by running the command below, choosing `sepolia` as network and `l1` as tag. +>npx hardhat lz:deploy +>npx @layerzerolabs/verify-contract -d "./deployments" --contracts "LZCrossChainAdapterL1" -n "sepolia" -u "https://api-sepolia.etherscan.io/api" -k "5ECZSNXK68TW6UVFTETFJK7YDC7KBSFHGC" +2. Deploy the Arbitrum-Sepolia and Optimism-Sepolia bridges by running the command below, choosing `arbitrum sepolia` and `optimism sepolia` as networks and `l2` as tag. +>npx hardhat lz:deploy +3. Verify Arbitrum and Optimism LZCrossChainBridgeL2 contracts: +>npx @layerzerolabs/verify-contract -d "./deployments" --contracts "LZCrossChainAdapterL2" -n "arbitrum-sepolia" -u "https://api-sepolia.arbiscan.io/api" -k "RDRJNYQ7NDDSNCX3FJGKC81M5Q8PA55K6U" +>npx @layerzerolabs/verify-contract -d "./deployments" --contracts "LZCrossChainAdapterL2" -n "optimism-sepolia" -u "https://api-optimistic.etherscan.io/api" -k "C3JF1ZDIQ4TT388IVSIW8WHAZRKZH5R9XJ" +4. Write down their addresses in the repository's root: `deployment_checkpoint_sepolia.json`, `deployment_checkpoint_optimism-sepolia.json` and `deployment_checkpoint_arbitrum-sepolia.json` +5. Set peers manually, running these commands from this folder: +> npx hardhat run scripts/set-peers-l1.ts --network sepolia + +> npx hardhat run scripts/set-peers-l2-arb.ts --network arbitrum-sepolia + +> npx hardhat run scripts/set-peers-l2-opt.ts --network optimism-sepolia + +6. Deploy all other contracts: +>cd projects/restaking-pool +>yarn hardhat run scripts/deploy-omni-staking.ts --network sepolia + +>cd projects/vaults +>npx hardhat run scripts/deploy-omni-staking-l2.ts --network arbitrumSepolia +7. Now it's time to fire the test +>cd projects/restaking-pool + +>npx hardhat run scripts/call/send-eth-to-l1.ts --network arbitrumSepolia + +>npx hardhat run scripts/call/send-data-to-l1.ts --network arbitrumSepolia \ No newline at end of file diff --git a/projects/bridge-lz/layerzero.config.ts b/projects/bridge-lz/layerzero.config.ts new file mode 100644 index 00000000..3951d82a --- /dev/null +++ b/projects/bridge-lz/layerzero.config.ts @@ -0,0 +1,54 @@ +import type { OAppOmniGraphHardhat, OmniPointHardhat } from '@layerzerolabs/toolbox-hardhat' + +const sepoliaContract: OmniPointHardhat = { + eid: 40161, + contractName: 'CrossChainBridge', +} + +const arbitrumContract: OmniPointHardhat = { + eid: 40231, + contractName: 'CrossChainBridge', +} + +const optimismContract: OmniPointHardhat = { + eid: 40232, + contractName: 'CrossChainBridge', +} + + +const config: OAppOmniGraphHardhat = { + contracts: [ + { + contract: sepoliaContract, + }, + { + contract: arbitrumContract, + }, + { + contract: optimismContract, + } + ], + connections: [ + { + from: sepoliaContract, + to: optimismContract, + }, + { + from: optimismContract, + to: sepoliaContract, + + }, + { + from: sepoliaContract, + to: arbitrumContract, + + }, + { + from: arbitrumContract, + to: sepoliaContract, + + } + ], +} + +export default config diff --git a/projects/bridge-lz/package-lock.json b/projects/bridge-lz/package-lock.json new file mode 100644 index 00000000..4e95895e --- /dev/null +++ b/projects/bridge-lz/package-lock.json @@ -0,0 +1,17468 @@ +{ + "name": "InceptionBridge", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "InceptionBridge", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "solidity-bytes-utils": "^0.8.2" + }, + "devDependencies": { + "@aragon/os": "^4.4.0", + "@arbitrum/nitro-contracts": "^2.1.0", + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@layerzerolabs/devtools-evm": "~0.4.2", + "@layerzerolabs/devtools-evm-hardhat": "1.0.0", + "@layerzerolabs/eslint-config-next": "~2.3.39", + "@layerzerolabs/lz-definitions": "^2.3.39", + "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.39", + "@layerzerolabs/lz-evm-protocol-v2": "^2.3.39", + "@layerzerolabs/lz-evm-v1-0.7": "^2.3.39", + "@layerzerolabs/lz-v2-utilities": "^3.0.7", + "@layerzerolabs/oapp-evm": "^0.0.4", + "@layerzerolabs/oft-evm": "^0.1.0", + "@layerzerolabs/prettier-config-next": "^2.3.39", + "@layerzerolabs/solhint-config": "^2.3.39", + "@layerzerolabs/toolbox-hardhat": "~0.4.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-ignition": "^0.15.0", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.11", + "@nomiclabs/hardhat-etherscan": "^3.1.8", + "@openzeppelin/contracts": "^5.1.0", + "@openzeppelin/contracts-upgradeable": "^5.1.0", + "@openzeppelin/hardhat-upgrades": "^3.5.0", + "@typechain/ethers-v6": "^0.5.1", + "@typechain/hardhat": "^9.1.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=18.0.0", + "axios": "^1.7.7", + "chai": "^4.2.0", + "dotenv": "^16.4.7", + "ethers": "^6.4.0", + "hardhat": "^2.22.13", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-deploy": "^0.12.4", + "hardhat-gas-reporter": "^1.0.8", + "hardhat-storage-layout": "^0.1.7", + "hardhat-tracer": "^2.6.0", + "prettier": "3.3.2", + "solidity-coverage": "^0.8.0", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "dev": true + }, + "node_modules/@aragon/os": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@aragon/os/-/os-4.4.0.tgz", + "integrity": "sha512-EYyMj5pX0Qxu7axHAPe4hqwwDINDn+6ZZ4DqJP0tAKYKDmTxHcW8m/7DDctIM3uRqXr8HlYrNOGd6zE/hhHetQ==", + "dev": true, + "dependencies": { + "@aragon/truffle-config-v4": "^1.0.1", + "homedir": "^0.6.0", + "mkdirp": "^0.5.1", + "truffle-flattener": "^1.2.9" + } + }, + "node_modules/@aragon/truffle-config-v4": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@aragon/truffle-config-v4/-/truffle-config-v4-1.2.0.tgz", + "integrity": "sha512-eXxUpHr9D/VYLVsHzaPL4FTz4bCESGvnnHqsP2BB74B4ZlopoIVwdur9flxHIxw4ROoh6xGyrEnScw4zVD2ifw==", + "dev": true, + "dependencies": { + "@truffle/hdwallet-provider": "^1.0.0" + } + }, + "node_modules/@arbitrum/nitro-contracts": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-2.1.1.tgz", + "integrity": "sha512-cA1JnwRkUT8p0ppDrrnYXU2gO4aLjV8P+a2jaHW7R602MKsIRqbae12MM8iNttRsK9ysKWZq5qrdWjvTVlqwvg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@offchainlabs/upgrade-executor": "1.1.0-beta.0", + "@openzeppelin/contracts": "4.5.0", + "@openzeppelin/contracts-upgradeable": "4.5.2", + "patch-package": "^6.4.7", + "solady": "0.0.182" + } + }, + "node_modules/@arbitrum/nitro-contracts/node_modules/@openzeppelin/contracts": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.5.0.tgz", + "integrity": "sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==", + "dev": true + }, + "node_modules/@arbitrum/nitro-contracts/node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", + "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==", + "dev": true + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dev": true, + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", + "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.696.0.tgz", + "integrity": "sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw==", + "dev": true, + "dependencies": { + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/types/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dev": true, + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/util-utf8-browser/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", + "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bytecodealliance/preview2-shim": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz", + "integrity": "sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==", + "dev": true + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dev": true, + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "dev": true, + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dev": true, + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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.0", + "@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.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@layerzerolabs/devtools": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@layerzerolabs/devtools/-/devtools-0.3.29.tgz", + "integrity": "sha512-zOWRl7NL67gqGb75arPuseoTxvgom6RgLZknciYwTwnZL8jY5Ea9czCh+rZMcKMAgsZNa6YHu3nzJOitEVHJEQ==", + "dev": true, + "dependencies": { + "bs58": "^6.0.0", + "exponential-backoff": "~3.1.1", + "js-yaml": "~4.1.0" + }, + "peerDependencies": { + "@ethersproject/bytes": "~5.7.0", + "@layerzerolabs/io-devtools": "~0.1.13", + "@layerzerolabs/lz-definitions": "^2.3.3", + "zod": "^3.22.4" + } + }, + "node_modules/@layerzerolabs/devtools-evm": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@layerzerolabs/devtools-evm/-/devtools-evm-0.4.2.tgz", + "integrity": "sha512-/X9Bsvbi9SyaPeL7dkXClnKwsE1roU+OCtOo1Sg/dtM3+xQOa1MBGycAYjuLPg8yV1mgxL7yYKniAsGnsZ7IeQ==", + "dev": true, + "dependencies": { + "@safe-global/api-kit": "^1.3.0", + "@safe-global/protocol-kit": "^1.3.0", + "ethers": "^5.7.2", + "p-memoize": "~4.0.4" + }, + "peerDependencies": { + "@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/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.0", + "@layerzerolabs/devtools": "~0.3.25", + "@layerzerolabs/io-devtools": "~0.1.12", + "@layerzerolabs/lz-definitions": "^2.3.3", + "fp-ts": "^2.16.2", + "zod": "^3.22.4" + } + }, + "node_modules/@layerzerolabs/devtools-evm-hardhat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@layerzerolabs/devtools-evm-hardhat/-/devtools-evm-hardhat-1.0.0.tgz", + "integrity": "sha512-/MMT/PxQPpX3AGEiaXR9qjC27VSb7dXAocDb2KbY3ntqjr5z4hxiRy/Gv3sTFVrm89BO+TF9yQ/nArBJ4dZ8GQ==", + "dev": true, + "dependencies": { + "@layerzerolabs/export-deployments": "~0.0.10", + "@safe-global/protocol-kit": "^1.3.0", + "micro-memoize": "~4.1.2", + "p-memoize": "~4.0.4", + "zod": "^3.22.4" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.0", + "@layerzerolabs/devtools": "~0.3.19", + "@layerzerolabs/devtools-evm": "~0.4.0", + "@layerzerolabs/io-devtools": "~0.1.11", + "@layerzerolabs/lz-definitions": "^2.3.3", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "fp-ts": "^2.16.2", + "hardhat": "^2.22.3", + "hardhat-deploy": "^0.12.1" + } + }, + "node_modules/@layerzerolabs/devtools-evm/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@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/contracts": "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/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/@layerzerolabs/devtools/node_modules/base-x": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.0.tgz", + "integrity": "sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==", + "dev": true + }, + "node_modules/@layerzerolabs/devtools/node_modules/bs58": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", + "dev": true, + "dependencies": { + "base-x": "^5.0.0" + } + }, + "node_modules/@layerzerolabs/eslint-config-next": { + "version": "2.3.44", + "resolved": "https://registry.npmjs.org/@layerzerolabs/eslint-config-next/-/eslint-config-next-2.3.44.tgz", + "integrity": "sha512-WlBSy47LGPILdrNgzPiRtQf/hAY62IN37ncUsQwcr8T7cyX1HZREx2qljuXpvduLDAKn5otsm0XIqHuCRUHEFg==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^7.5.0", + "@typescript-eslint/parser": "^7.5.0", + "eslint": "^8.55.0", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-autofix": "^2.0.0", + "eslint-plugin-compat": "^4.2.0", + "eslint-plugin-import": "^2.29.0", + "eslint-plugin-prettier": "^5.0.1", + "eslint-plugin-unused-imports": "^3.2.0", + "prettier": "^3.2.4" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core": { + "version": "2.3.44", + "resolved": "https://registry.npmjs.org/@layerzerolabs/evm-sdks-core/-/evm-sdks-core-2.3.44.tgz", + "integrity": "sha512-T0XDKtoox8qDrlzo6H+fpFRNj2wlh8uKH5QN4RvwK1DShkL+3fmnA52LWPfI6jX17ONN9M8lrjYhIfo1mQKy1w==", + "dev": true, + "dependencies": { + "ethers": "^5.7.2" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@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/contracts": "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/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/@layerzerolabs/export-deployments": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@layerzerolabs/export-deployments/-/export-deployments-0.0.14.tgz", + "integrity": "sha512-OBwqci1LZGCq9ZSYfB4nHGZ3QKNVjr+yOUQB4M4gEpPrwaJGLOuOxQNLSEkRWPD8si22Nk48Elbrku8M1Ke3Ow==", + "dev": true, + "dependencies": { + "typescript": "^5.4.4" + }, + "bin": { + "export-deployments": "cli.js" + } + }, + "node_modules/@layerzerolabs/io-devtools": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@layerzerolabs/io-devtools/-/io-devtools-0.1.14.tgz", + "integrity": "sha512-ENiiwow9bu51MiJ0jxwhUchmimIuHevait8WTP4YtuSjRcWkT7g/8F6z3mTJs4BsCIVNOHdYWBFGgcB2IDTqdQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "logform": "^2.6.0", + "prompts": "^2.4.2", + "table": "~6.8.2", + "winston": "^3.11.0" + }, + "peerDependencies": { + "ink": "^3.2.0", + "ink-gradient": "^2.0.0", + "ink-table": "^3.1.0", + "react": "^17.0.2", + "yoga-layout-prebuilt": "^1.9.6", + "zod": "^3.22.4" + }, + "peerDependenciesMeta": { + "ink": { + "optional": true + }, + "ink-gradient": { + "optional": true + }, + "ink-table": { + "optional": true + }, + "react": { + "optional": true + }, + "yoga-layout-prebuilt": { + "optional": true + } + } + }, + "node_modules/@layerzerolabs/lz-definitions": { + "version": "2.3.44", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-definitions/-/lz-definitions-2.3.44.tgz", + "integrity": "sha512-8dH7rbHCVG+GDOizCb4RrtHEFHr5wud9Lf9Kxs/MLThgu7VWcXvy78KYHMQ4S7AXoFnyzMPaiEU/LS8kRWfhag==", + "dev": true, + "dependencies": { + "tiny-invariant": "^1.3.1" + } + }, + "node_modules/@layerzerolabs/lz-evm-messagelib-v2": { + "version": "2.3.44", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-messagelib-v2/-/lz-evm-messagelib-v2-2.3.44.tgz", + "integrity": "sha512-2HZMjV0KZH0e3W2KL/H8HvE3I7QMJw1no46IQ5LpGSvxIm5Ri45tnQAynbmEbRyKXrRSP3Brkvkc2U7VrfZ/Cg==", + "dev": true, + "peerDependencies": { + "@arbitrum/nitro-contracts": "^1.1.0", + "@axelar-network/axelar-gmp-sdk-solidity": "^5.6.4", + "@chainlink/contracts-ccip": "^0.7.6", + "@eth-optimism/contracts": "^0.6.0", + "@layerzerolabs/lz-evm-protocol-v2": "^2.3.44", + "@layerzerolabs/lz-evm-v1-0.7": "^2.3.44", + "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", + "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0", + "hardhat-deploy": "^0.12.4", + "solidity-bytes-utils": "^0.8.0" + }, + "peerDependenciesMeta": { + "@arbitrum/nitro-contracts": { + "optional": true + } + } + }, + "node_modules/@layerzerolabs/lz-evm-protocol-v2": { + "version": "2.3.44", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-protocol-v2/-/lz-evm-protocol-v2-2.3.44.tgz", + "integrity": "sha512-oNtwl4HGCogFVOr45T3FfrkB0/CRW2eGAEScBw/FY/6mlncnS4dqlvrCJ3SFlK17cu1w9q0ztD3NzS9sUrb7vw==", + "dev": true, + "peerDependencies": { + "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", + "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0", + "hardhat-deploy": "^0.12.4", + "solidity-bytes-utils": "^0.8.0" + } + }, + "node_modules/@layerzerolabs/lz-evm-sdk-v1": { + "version": "2.3.44", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-sdk-v1/-/lz-evm-sdk-v1-2.3.44.tgz", + "integrity": "sha512-jHnFqSqRQGD11TuPcpwCSY87FfVqGTdZj/1xFUTdW7r/zyZYTTr2pE/wZG5qWNZrO5VkPqgp2ttaZC6UM87+0w==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/providers": "^5.7.0", + "@layerzerolabs/evm-sdks-core": "^2.3.44", + "ethers": "^5.7.2" + } + }, + "node_modules/@layerzerolabs/lz-evm-sdk-v1/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@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/contracts": "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/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/@layerzerolabs/lz-evm-sdk-v2": { + "version": "2.3.44", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-sdk-v2/-/lz-evm-sdk-v2-2.3.44.tgz", + "integrity": "sha512-j99rAzalyaYx3sDn06Dfc7bLsQfLCRbx3qhgIhBxOfe9T9bYKRXV6UAD+dHFpwdFOU0UxioQKosKCGgIwSNKAw==", + "dev": true, + "dependencies": { + "@layerzerolabs/evm-sdks-core": "^2.3.44", + "ethers": "^5.7.2" + } + }, + "node_modules/@layerzerolabs/lz-evm-sdk-v2/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@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/contracts": "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/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/@layerzerolabs/lz-evm-v1-0.7": { + "version": "2.3.44", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-v1-0.7/-/lz-evm-v1-0.7-2.3.44.tgz", + "integrity": "sha512-gxPUv5yk5TLy4Rp4KwFqiPHGpVOPMtnwUi+LvRysnGgkqopOJRCzzvWqEv6M2YMUAsof+Vmr3UYWxKcilvv97g==", + "dev": true, + "peerDependencies": { + "@openzeppelin/contracts": "3.4.2-solc-0.7 || ^3.4.2 || ^4.0.0 || ^5.0.0", + "@openzeppelin/contracts-upgradeable": "3.4.2-solc-0.7 || ^3.4.2 || ^4.0.0 || ^5.0.0", + "hardhat-deploy": "^0.12.4" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities": { + "version": "3.0.19", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-v2-utilities/-/lz-v2-utilities-3.0.19.tgz", + "integrity": "sha512-V4b3rahsXylonyzTHUAAmtcQ6qCg8+3Oyqjrr30hUr6wzUqJ6Uo0jOR9/v3bWVNG9jlbQqPgVXahyoRL98mCsw==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/solidity": "^5.7.0", + "bs58": "^5.0.0", + "tiny-invariant": "^1.3.1" + } + }, + "node_modules/@layerzerolabs/oapp-evm": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@layerzerolabs/oapp-evm/-/oapp-evm-0.0.4.tgz", + "integrity": "sha512-h0papPd9mQAPsWoQuzZk3dIcLWLrJ8tnDNPg7Hn8aa+v7HPY1lo6Zmyn3t7RmzfKnvrjnjKWDTbX2zgesu4hYg==", + "dev": true, + "dependencies": { + "ethers": "^5.7.2" + }, + "peerDependencies": { + "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.39", + "@layerzerolabs/lz-evm-protocol-v2": "^2.3.39", + "@layerzerolabs/lz-evm-v1-0.7": "^2.3.39", + "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", + "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0" + } + }, + "node_modules/@layerzerolabs/oapp-evm/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@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/contracts": "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/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/@layerzerolabs/oft-evm": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@layerzerolabs/oft-evm/-/oft-evm-0.1.0.tgz", + "integrity": "sha512-8LiotgJjbQN+wexOtpUPh2vgYDgec2ac0ypKKbBIE2kt1DWAxvKxI8nGuE6RRjBnvvMS3qNGmJQFxzwcOKHq+g==", + "dev": true, + "peerDependencies": { + "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.39", + "@layerzerolabs/lz-evm-protocol-v2": "^2.3.39", + "@layerzerolabs/lz-evm-v1-0.7": "^2.3.39", + "@layerzerolabs/oapp-evm": "^0.0.4", + "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", + "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0" + } + }, + "node_modules/@layerzerolabs/prettier-config-next": { + "version": "2.3.44", + "resolved": "https://registry.npmjs.org/@layerzerolabs/prettier-config-next/-/prettier-config-next-2.3.44.tgz", + "integrity": "sha512-mIsxKLaelXHXXXvMEAE6Jc8IVydra0PesHquHYwvxFKwDhMhzfrnoRLLzbgCX/Zi1q0GGET/oMAKJTs6OWFPxQ==", + "dev": true, + "dependencies": { + "prettier": "^3.2.4", + "prettier-plugin-packagejson": "^2.4.7", + "prettier-plugin-solidity": "^1.2.0" + } + }, + "node_modules/@layerzerolabs/protocol-devtools": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@layerzerolabs/protocol-devtools/-/protocol-devtools-0.4.3.tgz", + "integrity": "sha512-72qMcXw99wpe3v6qyh6ynFW66U6rnYuAzKXKz6R7q5JdYI/sAbnVNxuANq7ON0hffs3d24ea6qX4f6T+Lo6zJQ==", + "dev": true, + "peerDependencies": { + "@layerzerolabs/devtools": "~0.3.25", + "@layerzerolabs/lz-definitions": "^2.3.3", + "zod": "^3.22.4" + } + }, + "node_modules/@layerzerolabs/protocol-devtools-evm": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@layerzerolabs/protocol-devtools-evm/-/protocol-devtools-evm-1.2.1.tgz", + "integrity": "sha512-VyjpO4LJ+eiszxImXWst6lfJQNm0dv7XAf8m7vI6ZJk8Tg48QswBYoNZwlDDLBvMWv3vz+uf5HHn1AspVModyA==", + "dev": true, + "dependencies": { + "p-memoize": "~4.0.4" + }, + "peerDependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.0", + "@layerzerolabs/devtools": "~0.3.25", + "@layerzerolabs/devtools-evm": "~0.4.2", + "@layerzerolabs/io-devtools": "~0.1.12", + "@layerzerolabs/lz-definitions": "^2.3.3", + "@layerzerolabs/protocol-devtools": "~0.4.3", + "zod": "^3.22.4" + } + }, + "node_modules/@layerzerolabs/solhint-config": { + "version": "2.3.44", + "resolved": "https://registry.npmjs.org/@layerzerolabs/solhint-config/-/solhint-config-2.3.44.tgz", + "integrity": "sha512-1FnAwiV6FNH2KAcVWd36u7xthcs4+HI6BvU8BLp8boxEppYylxm1KFCcWSyHij9Ct5bUScKTPI6jwks/FzTU3A==", + "dev": true, + "dependencies": { + "solhint": "^4.0.0" + } + }, + "node_modules/@layerzerolabs/test-devtools-evm-hardhat": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@layerzerolabs/test-devtools-evm-hardhat/-/test-devtools-evm-hardhat-0.3.0.tgz", + "integrity": "sha512-776SF+Rp6+8PPMjl5WYglgfas6IyqZ2g7dU73seQC9VaPfbM+6XORtOCLVUxl6Hrp43edAI0dZuIm6xWhVFiYQ==", + "dev": true, + "peerDependencies": { + "hardhat": "^2.22.10", + "solidity-bytes-utils": "^0.8.2" + } + }, + "node_modules/@layerzerolabs/toolbox-hardhat": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@layerzerolabs/toolbox-hardhat/-/toolbox-hardhat-0.4.0.tgz", + "integrity": "sha512-WTc22nlEX4HwBUSvsVA/RzkZKp4wkY0f9k8m/NKXY7BrikdpilkWXJ+jgE1hG7tPY55bKd6CNHm41P5bTqIh4w==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/address": "~5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@layerzerolabs/devtools": "~0.3.25", + "@layerzerolabs/devtools-evm": "~0.4.2", + "@layerzerolabs/devtools-evm-hardhat": "~1.2.0", + "@layerzerolabs/io-devtools": "~0.1.12", + "@layerzerolabs/lz-definitions": "^2.3.39", + "@layerzerolabs/lz-evm-sdk-v1": "^2.3.39", + "@layerzerolabs/lz-evm-sdk-v2": "^2.3.39", + "@layerzerolabs/lz-v2-utilities": "^2.3.39", + "@layerzerolabs/protocol-devtools": "~0.4.3", + "@layerzerolabs/protocol-devtools-evm": "~1.2.1", + "@layerzerolabs/test-devtools-evm-hardhat": "~0.3.0", + "@layerzerolabs/ua-devtools": "~1.0.5", + "@layerzerolabs/ua-devtools-evm": "~3.0.1", + "@layerzerolabs/ua-devtools-evm-hardhat": "~4.0.0", + "fp-ts": "^2.16.2", + "ink": "^3.2.0", + "ink-gradient": "^2.0.0", + "ink-table": "^3.1.0", + "react": "^17.0.2", + "yoga-layout-prebuilt": "^1.10.0", + "zod": "^3.22.4" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.2", + "ethers": "^5.7.2", + "hardhat": "^2.22.10", + "hardhat-deploy": "^0.12.1" + } + }, + "node_modules/@layerzerolabs/toolbox-hardhat/node_modules/@layerzerolabs/devtools-evm-hardhat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@layerzerolabs/devtools-evm-hardhat/-/devtools-evm-hardhat-1.2.3.tgz", + "integrity": "sha512-kIVMvLb1BZ+7rcPjjfl3iDnrszLfH+RnD9H4PWsbazqEOWizNQnO0+u9Aj9/KMTyly6hl5e5gZINZoTwkrPi+w==", + "dev": true, + "dependencies": { + "@layerzerolabs/export-deployments": "~0.0.12", + "@safe-global/protocol-kit": "^1.3.0", + "micro-memoize": "~4.1.2", + "p-memoize": "~4.0.4", + "zod": "^3.22.4" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.0", + "@layerzerolabs/devtools": "~0.3.27", + "@layerzerolabs/devtools-evm": "~0.4.2", + "@layerzerolabs/io-devtools": "~0.1.13", + "@layerzerolabs/lz-definitions": "^2.3.3", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "fp-ts": "^2.16.2", + "hardhat": "^2.22.10", + "hardhat-deploy": "^0.12.1" + } + }, + "node_modules/@layerzerolabs/toolbox-hardhat/node_modules/@layerzerolabs/lz-v2-utilities": { + "version": "2.3.44", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-v2-utilities/-/lz-v2-utilities-2.3.44.tgz", + "integrity": "sha512-0p7tdJCf6BSmN38tAnO7WyOoC84NDTCQt1MqPBomXTyIux1RLpkS82jcxv92+E+1LNulhHIx5W62gaKKx27B2A==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/solidity": "^5.7.0", + "bs58": "^5.0.0", + "tiny-invariant": "^1.3.1" + } + }, + "node_modules/@layerzerolabs/ua-devtools": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@layerzerolabs/ua-devtools/-/ua-devtools-1.0.6.tgz", + "integrity": "sha512-PP6Alf5VoQA+tiQJybe0VZ6Ol/HzoPE8tIFp6BE/PyEallLwkO3KEaYKv1vfA24wFaOuEdzfurIrP3AmIrrY8Q==", + "dev": true, + "peerDependencies": { + "@layerzerolabs/devtools": "~0.3.25", + "@layerzerolabs/io-devtools": "~0.1.12", + "@layerzerolabs/lz-definitions": "^2.3.3", + "@layerzerolabs/lz-v2-utilities": "^2.3.3", + "@layerzerolabs/protocol-devtools": "~0.4.3", + "zod": "^3.22.4" + } + }, + "node_modules/@layerzerolabs/ua-devtools-evm": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@layerzerolabs/ua-devtools-evm/-/ua-devtools-evm-3.0.1.tgz", + "integrity": "sha512-r/Voc1vmB9OEXc18sA/7prQdmZOqO7eR2/8CeiH7T3yCSA2vjjgByn2wxbmYy828gIw8wcx7GEky5F4gpvRnow==", + "dev": true, + "dependencies": { + "p-memoize": "~4.0.4" + }, + "peerDependencies": { + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@layerzerolabs/devtools": "~0.3.25", + "@layerzerolabs/devtools-evm": "~0.4.2", + "@layerzerolabs/io-devtools": "~0.1.12", + "@layerzerolabs/lz-definitions": "^2.3.3", + "@layerzerolabs/lz-v2-utilities": "^2.3.3", + "@layerzerolabs/protocol-devtools": "~0.4.3", + "@layerzerolabs/protocol-devtools-evm": "~1.2.1", + "@layerzerolabs/ua-devtools": "~1.0.5", + "zod": "^3.22.4" + } + }, + "node_modules/@layerzerolabs/ua-devtools-evm-hardhat": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@layerzerolabs/ua-devtools-evm-hardhat/-/ua-devtools-evm-hardhat-4.0.2.tgz", + "integrity": "sha512-1ePEYl5j27Rw5M799PXTjDkzXdV9zHOjHP8Adb/pKVq4u4yVhLFuUbOUEprTkrRBvOfK/HfIPZT0t7L32tthQQ==", + "dev": true, + "dependencies": { + "p-memoize": "~4.0.4", + "typescript": "^5.4.4" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@layerzerolabs/devtools": "~0.3.29", + "@layerzerolabs/devtools-evm": "~0.4.2", + "@layerzerolabs/devtools-evm-hardhat": "~1.2.2", + "@layerzerolabs/io-devtools": "~0.1.13", + "@layerzerolabs/lz-definitions": "^2.3.3", + "@layerzerolabs/protocol-devtools": "~0.4.3", + "@layerzerolabs/protocol-devtools-evm": "~1.2.1", + "@layerzerolabs/ua-devtools": "~1.0.5", + "@layerzerolabs/ua-devtools-evm": "~3.0.1", + "ethers": "^5.7.2", + "hardhat": "^2.22.10", + "hardhat-deploy": "^0.12.1" + } + }, + "node_modules/@mdn/browser-compat-data": { + "version": "5.6.19", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.6.19.tgz", + "integrity": "sha512-nov43xmgYccY9ePMQfqPD29ASOKbOhn3iOJxA5reOfC3wLbEM5an8Sn6A3Th1TuD3XfXc0hjrFQYbJ3qhyPhhQ==", + "dev": true + }, + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dev": true, + "dependencies": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@nomicfoundation/edr": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.6.5.tgz", + "integrity": "sha512-tAqMslLP+/2b2sZP4qe9AuGxG3OkQ5gGgHE4isUuq6dUVjwCRPFhAOhpdFl+OjY5P3yEv3hmq9HjUGRa2VNjng==", + "dev": true, + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.6.5", + "@nomicfoundation/edr-darwin-x64": "0.6.5", + "@nomicfoundation/edr-linux-arm64-gnu": "0.6.5", + "@nomicfoundation/edr-linux-arm64-musl": "0.6.5", + "@nomicfoundation/edr-linux-x64-gnu": "0.6.5", + "@nomicfoundation/edr-linux-x64-musl": "0.6.5", + "@nomicfoundation/edr-win32-x64-msvc": "0.6.5" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.5.tgz", + "integrity": "sha512-A9zCCbbNxBpLgjS1kEJSpqxIvGGAX4cYbpDYCU2f3jVqOwaZ/NU761y1SvuCRVpOwhoCXqByN9b7HPpHi0L4hw==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.5.tgz", + "integrity": "sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.5.tgz", + "integrity": "sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.5.tgz", + "integrity": "sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.5.tgz", + "integrity": "sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.5.tgz", + "integrity": "sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.5.tgz", + "integrity": "sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", + "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", + "dev": true, + "dependencies": { + "@nomicfoundation/ethereumjs-util": "9.0.4" + } + }, + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", + "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", + "dev": true, + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", + "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", + "dev": true, + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", + "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", + "dev": true, + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.8.tgz", + "integrity": "sha512-Z5PiCXH4xhNLASROlSUOADfhfpfhYO6D7Hn9xp8PddmHey0jq704cr6kfU8TRrQ4PUZbpfsZadPj+pCfZdjPIg==", + "dev": true, + "dependencies": { + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "chai": "^4.2.0", + "ethers": "^6.1.0", + "hardhat": "^2.9.4" + } + }, + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz", + "integrity": "sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.1.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/@nomicfoundation/hardhat-ignition": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.8.tgz", + "integrity": "sha512-TN8TFQokcd7VyqGfbXO+KS8Q4K/gmsOFlv8dPnt/N596AncgV2Igxh5C3O+KVez11PDHNqoj1JzcDzzNVHrIRw==", + "dev": true, + "dependencies": { + "@nomicfoundation/ignition-core": "^0.15.8", + "@nomicfoundation/ignition-ui": "^0.15.8", + "chalk": "^4.0.0", + "debug": "^4.3.2", + "fs-extra": "^10.0.0", + "json5": "^2.2.3", + "prompts": "^2.4.2" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-verify": "^2.0.1", + "hardhat": "^2.18.0" + } + }, + "node_modules/@nomicfoundation/hardhat-ignition-ethers": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.8.tgz", + "integrity": "sha512-5Ev8cXBKgqqOsFXxWe8iijsRabWGd/Vclx3SC903KeKVePdssVsZcYTtRNRcIwRcPJ0RIKJPIZz7MNDo64l3+w==", + "dev": true, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.4", + "@nomicfoundation/hardhat-ignition": "^0.15.8", + "@nomicfoundation/ignition-core": "^0.15.8", + "ethers": "^6.7.0", + "hardhat": "^2.18.0" + } + }, + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.12.tgz", + "integrity": "sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA==", + "dev": true, + "dependencies": { + "ethereumjs-util": "^7.1.4" + }, + "peerDependencies": { + "hardhat": "^2.9.5" + } + }, + "node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-5.0.0.tgz", + "integrity": "sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==", + "dev": true, + "peerDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=18.0.0", + "chai": "^4.2.0", + "ethers": "^6.4.0", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.12.tgz", + "integrity": "sha512-Lg3Nu7DCXASQRVI/YysjuAX2z8jwOCbS0w5tz2HalWGSTZThqA0v9N0v0psHbKNqzPJa8bNOeapIVSziyJTnAg==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "picocolors": "^1.1.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomicfoundation/ignition-core": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.8.tgz", + "integrity": "sha512-U+CmTjKU9uwvh7qIabqboy/K/sDoClDgpsFRHoFvAj87DPDkXYb/mZBSkXPTU1wxTxrW6GTFE4lG3e7LAyF+kw==", + "dev": true, + "dependencies": { + "@ethersproject/address": "5.6.1", + "@nomicfoundation/solidity-analyzer": "^0.1.1", + "cbor": "^9.0.0", + "debug": "^4.3.2", + "ethers": "^6.7.0", + "fs-extra": "^10.0.0", + "immer": "10.0.2", + "lodash": "4.17.21", + "ndjson": "2.0.0" + } + }, + "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "node_modules/@nomicfoundation/ignition-core/node_modules/cbor": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", + "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", + "dev": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@nomicfoundation/ignition-ui": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.8.tgz", + "integrity": "sha512-VUD5MsWrrv7E2P0AJO01pV8w8m66Du0uwBKXM0oUV5DRIzqm6eYHt9eCDb1KBINDpiFxOQiuyWQMdeKxgPp3qw==", + "dev": true + }, + "node_modules/@nomicfoundation/slang": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.18.3.tgz", + "integrity": "sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ==", + "dev": true, + "dependencies": { + "@bytecodealliance/preview2-shim": "0.17.0" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "dev": true, + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.8.tgz", + "integrity": "sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ==", + "deprecated": "The @nomiclabs/hardhat-etherscan package is deprecated, please use @nomicfoundation/hardhat-verify instead", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@offchainlabs/upgrade-executor": { + "version": "1.1.0-beta.0", + "resolved": "https://registry.npmjs.org/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz", + "integrity": "sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw==", + "dev": true, + "dependencies": { + "@openzeppelin/contracts": "4.7.3", + "@openzeppelin/contracts-upgradeable": "4.7.3" + } + }, + "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", + "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==", + "dev": true + }, + "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", + "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==", + "dev": true + }, + "node_modules/@openzeppelin/contracts": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.1.0.tgz", + "integrity": "sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==", + "dev": true + }, + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.1.0.tgz", + "integrity": "sha512-AIElwP5Ck+cslNE+Hkemf5SxjJoF4wBvvjxc27Rp+9jaPs/CLIaUBMYe1FNzhdiN0cYuwGRmYaRHmmntuiju4Q==", + "dev": true, + "peerDependencies": { + "@openzeppelin/contracts": "5.1.0" + } + }, + "node_modules/@openzeppelin/defender-sdk-base-client": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.15.2.tgz", + "integrity": "sha512-N3ZTeH8TXyklL7yNPMLUv0dxQwT78DTkOEDhzMS2/QE2FxbXrclSseoeeXxl6UYI61RBtZKn+okbSsbwiB5QWQ==", + "dev": true, + "dependencies": { + "amazon-cognito-identity-js": "^6.3.6", + "async-retry": "^1.3.3" + } + }, + "node_modules/@openzeppelin/defender-sdk-deploy-client": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.15.2.tgz", + "integrity": "sha512-zspzMqh+OC8arXAkgBqTUDVO+NfCkt54UrsmQHbA3UAjr5TiDXKycBKU5ORb01hE+2gAmoPwEpDW9uS2VLg33A==", + "dev": true, + "dependencies": { + "@openzeppelin/defender-sdk-base-client": "^1.15.2", + "axios": "^1.7.2", + "lodash": "^4.17.21" + } + }, + "node_modules/@openzeppelin/defender-sdk-network-client": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-1.15.2.tgz", + "integrity": "sha512-9r9pegc1aR7xzP9fmj1zvkk0OXMRJE10JabxxiJzAQQgmNXDeTGI6W5bFgrNJfxzcImNGqddJ3K4weKdLyL21A==", + "dev": true, + "dependencies": { + "@openzeppelin/defender-sdk-base-client": "^1.15.2", + "axios": "^1.7.2", + "lodash": "^4.17.21" + } + }, + "node_modules/@openzeppelin/hardhat-upgrades": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.6.0.tgz", + "integrity": "sha512-RuVuCciCfFOqCyKSJ2D4Zffp3hxhvXTn16JzTlD9cx3A7V/2d3JA75tpRHD7RVPic+dcSFIf+BZRWOHuhc2ayg==", + "dev": true, + "dependencies": { + "@openzeppelin/defender-sdk-base-client": "^1.14.4", + "@openzeppelin/defender-sdk-deploy-client": "^1.14.4", + "@openzeppelin/defender-sdk-network-client": "^1.14.4", + "@openzeppelin/upgrades-core": "^1.41.0", + "chalk": "^4.1.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.1.5", + "proper-lockfile": "^4.1.1", + "undici": "^6.11.1" + }, + "bin": { + "migrate-oz-cli-project": "dist/scripts/migrate-oz-cli-project.js" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "ethers": "^6.6.0", + "hardhat": "^2.0.2" + }, + "peerDependenciesMeta": { + "@nomicfoundation/hardhat-verify": { + "optional": true + } + } + }, + "node_modules/@openzeppelin/hardhat-upgrades/node_modules/undici": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.0.tgz", + "integrity": "sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==", + "dev": true, + "engines": { + "node": ">=18.17" + } + }, + "node_modules/@openzeppelin/upgrades-core": { + "version": "1.41.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.41.0.tgz", + "integrity": "sha512-+oryinqZnxkiZvg7bWqWX4Ki/CNwVUZEqC6Elpi5PQoahpL3/6Sq9xjIozD5AiI2O61h8JHQ+A//5NtczyavJw==", + "dev": true, + "dependencies": { + "@nomicfoundation/slang": "^0.18.3", + "cbor": "^9.0.0", + "chalk": "^4.1.0", + "compare-versions": "^6.0.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.0.3", + "minimatch": "^9.0.5", + "minimist": "^1.2.7", + "proper-lockfile": "^4.1.1", + "solidity-ast": "^0.4.51" + }, + "bin": { + "openzeppelin-upgrades-core": "dist/cli/cli.js" + } + }, + "node_modules/@openzeppelin/upgrades-core/node_modules/cbor": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", + "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", + "dev": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "dev": true, + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@resolver-engine/core": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.2.1.tgz", + "integrity": "sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "request": "^2.85.0" + } + }, + "node_modules/@resolver-engine/core/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@resolver-engine/fs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.2.1.tgz", + "integrity": "sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg==", + "dev": true, + "dependencies": { + "@resolver-engine/core": "^0.2.1", + "debug": "^3.1.0" + } + }, + "node_modules/@resolver-engine/fs/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@resolver-engine/imports": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.2.2.tgz", + "integrity": "sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg==", + "dev": true, + "dependencies": { + "@resolver-engine/core": "^0.2.1", + "debug": "^3.1.0", + "hosted-git-info": "^2.6.0" + } + }, + "node_modules/@resolver-engine/imports-fs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.2.2.tgz", + "integrity": "sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ==", + "dev": true, + "dependencies": { + "@resolver-engine/fs": "^0.2.1", + "@resolver-engine/imports": "^0.2.2", + "debug": "^3.1.0" + } + }, + "node_modules/@resolver-engine/imports-fs/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@resolver-engine/imports/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, + "node_modules/@safe-global/api-kit": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@safe-global/api-kit/-/api-kit-1.3.1.tgz", + "integrity": "sha512-JKvCNs8p+42+N8pV2MIqoXlBLckTe5CKboVT7t9mTluuA66i5W8+Kr+B5j9D//EIU5vO7iSOOIYnJuA2ck4XRQ==", + "dev": true, + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@safe-global/safe-core-sdk-types": "^2.3.0", + "node-fetch": "^2.6.6" + } + }, + "node_modules/@safe-global/protocol-kit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@safe-global/protocol-kit/-/protocol-kit-1.3.0.tgz", + "integrity": "sha512-zBhwHpaUggywmnR1Xm5RV22DpyjmVWYP3pnOl4rcf9LAc1k7IVmw6WIt2YVhHRaWGxVYMd4RitJX8Dx2+8eLZQ==", + "dev": true, + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/solidity": "^5.7.0", + "@safe-global/safe-deployments": "^1.26.0", + "ethereumjs-util": "^7.1.5", + "semver": "^7.5.4", + "web3": "^1.8.1", + "web3-core": "^1.8.1", + "web3-utils": "^1.8.1", + "zksync-web3": "^0.14.3" + } + }, + "node_modules/@safe-global/protocol-kit/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@safe-global/safe-core-sdk-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@safe-global/safe-core-sdk-types/-/safe-core-sdk-types-2.3.0.tgz", + "integrity": "sha512-dU0KkDV1KJNf11ajbUjWiSi4ygdyWfhk1M50lTJWUdCn1/2Bsb/hICM8LoEk6DCoFumxaoCet02SmYakXsW2CA==", + "deprecated": "WARNING: This project has been renamed to @safe-global/types-kit. Please, migrate from @safe-global/safe-core-sdk-types@5.1.0 to @safe-global/types-kit@1.0.0.", + "dev": true, + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@safe-global/safe-deployments": "^1.26.0", + "web3-core": "^1.8.1", + "web3-utils": "^1.8.1" + } + }, + "node_modules/@safe-global/safe-deployments": { + "version": "1.37.18", + "resolved": "https://registry.npmjs.org/@safe-global/safe-deployments/-/safe-deployments-1.37.18.tgz", + "integrity": "sha512-flX/TtgsbKp5qLJSSy/v7bcdtTsml6F9Vyf/JnG1Zfeto5aDeNYlvzljHAd8atnbOiggrZ8z5jyvdlh6njsXfw==", + "dev": true, + "dependencies": { + "semver": "^7.6.2" + } + }, + "node_modules/@safe-global/safe-deployments/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dev": true, + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dev": true, + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@smithy/types": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.1.tgz", + "integrity": "sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA==", + "dev": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/types/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@truffle/hdwallet-provider": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-1.7.0.tgz", + "integrity": "sha512-nT7BPJJ2jPCLJc5uZdVtRnRMny5he5d3kO9Hi80ZSqe5xlnK905grBptM/+CwOfbeqHKQirI1btwm6r3wIBM8A==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "dependencies": { + "@ethereumjs/common": "^2.4.0", + "@ethereumjs/tx": "^3.3.0", + "@trufflesuite/web3-provider-engine": "15.0.14", + "eth-sig-util": "^3.0.1", + "ethereum-cryptography": "^0.1.3", + "ethereum-protocol": "^1.0.1", + "ethereumjs-util": "^6.1.0", + "ethereumjs-wallet": "^1.0.1" + } + }, + "node_modules/@truffle/hdwallet-provider/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@truffle/hdwallet-provider/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/@truffle/hdwallet-provider/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/@trufflesuite/eth-json-rpc-filters": { + "version": "4.1.2-1", + "resolved": "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.2-1.tgz", + "integrity": "sha512-/MChvC5dw2ck9NU1cZmdovCz2VKbOeIyR4tcxDvA5sT+NaL0rA2/R5U0yI7zsbo1zD+pgqav77rQHTzpUdDNJQ==", + "dev": true, + "dependencies": { + "@trufflesuite/eth-json-rpc-middleware": "^4.4.2-0", + "await-semaphore": "^0.1.3", + "eth-query": "^2.1.2", + "json-rpc-engine": "^5.1.3", + "lodash.flatmap": "^4.5.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/@trufflesuite/eth-json-rpc-infura": { + "version": "4.0.3-0", + "resolved": "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-infura/-/eth-json-rpc-infura-4.0.3-0.tgz", + "integrity": "sha512-xaUanOmo0YLqRsL0SfXpFienhdw5bpQ1WEXxMTRi57az4lwpZBv4tFUDvcerdwJrxX9wQqNmgUgd1BrR01dumw==", + "dev": true, + "dependencies": { + "@trufflesuite/eth-json-rpc-middleware": "^4.4.2-1", + "cross-fetch": "^2.1.1", + "eth-json-rpc-errors": "^1.0.1", + "json-rpc-engine": "^5.1.3" + } + }, + "node_modules/@trufflesuite/eth-json-rpc-infura/node_modules/eth-json-rpc-errors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz", + "integrity": "sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg==", + "deprecated": "Package renamed: https://www.npmjs.com/package/eth-rpc-errors", + "dev": true, + "dependencies": { + "fast-safe-stringify": "^2.0.6" + } + }, + "node_modules/@trufflesuite/eth-json-rpc-middleware": { + "version": "4.4.2-1", + "resolved": "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.2-1.tgz", + "integrity": "sha512-iEy9H8ja7/8aYES5HfrepGBKU9n/Y4OabBJEklVd/zIBlhCCBAWBqkIZgXt11nBXO/rYAeKwYuE3puH3ByYnLA==", + "dev": true, + "dependencies": { + "@trufflesuite/eth-sig-util": "^1.4.2", + "btoa": "^1.2.1", + "clone": "^2.1.1", + "eth-json-rpc-errors": "^1.0.1", + "eth-query": "^2.1.2", + "ethereumjs-block": "^1.6.0", + "ethereumjs-tx": "^1.3.7", + "ethereumjs-util": "^5.1.2", + "ethereumjs-vm": "^2.6.0", + "fetch-ponyfill": "^4.0.0", + "json-rpc-engine": "^5.1.3", + "json-stable-stringify": "^1.0.1", + "pify": "^3.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/@trufflesuite/eth-json-rpc-middleware/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/@trufflesuite/eth-json-rpc-middleware/node_modules/eth-json-rpc-errors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz", + "integrity": "sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg==", + "deprecated": "Package renamed: https://www.npmjs.com/package/eth-rpc-errors", + "dev": true, + "dependencies": { + "fast-safe-stringify": "^2.0.6" + } + }, + "node_modules/@trufflesuite/eth-json-rpc-middleware/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/@trufflesuite/eth-sig-util": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@trufflesuite/eth-sig-util/-/eth-sig-util-1.4.2.tgz", + "integrity": "sha512-+GyfN6b0LNW77hbQlH3ufZ/1eCON7mMrGym6tdYf7xiNw9Vv3jBO72bmmos1EId2NgBvPMhmYYm6DSLQFTmzrA==", + "dev": true, + "dependencies": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^5.1.1" + } + }, + "node_modules/@trufflesuite/eth-sig-util/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/@trufflesuite/eth-sig-util/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/@trufflesuite/web3-provider-engine": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@trufflesuite/web3-provider-engine/-/web3-provider-engine-15.0.14.tgz", + "integrity": "sha512-6/LoWvNMxYf0oaYzJldK2a9AdnkAdIeJhHW4nuUBAeO29eK9xezEaEYQ0ph1QRTaICxGxvn+1Azp4u8bQ8NEZw==", + "dev": true, + "dependencies": { + "@ethereumjs/tx": "^3.3.0", + "@trufflesuite/eth-json-rpc-filters": "^4.1.2-1", + "@trufflesuite/eth-json-rpc-infura": "^4.0.3-0", + "@trufflesuite/eth-json-rpc-middleware": "^4.4.2-1", + "@trufflesuite/eth-sig-util": "^1.4.2", + "async": "^2.5.0", + "backoff": "^2.5.0", + "clone": "^2.0.0", + "cross-fetch": "^2.1.0", + "eth-block-tracker": "^4.4.2", + "eth-json-rpc-errors": "^2.0.2", + "ethereumjs-block": "^1.2.2", + "ethereumjs-util": "^5.1.5", + "ethereumjs-vm": "^2.3.4", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "readable-stream": "^2.2.9", + "request": "^2.85.0", + "semaphore": "^1.0.3", + "ws": "^5.1.1", + "xhr": "^2.2.0", + "xtend": "^4.0.1" + } + }, + "node_modules/@trufflesuite/web3-provider-engine/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/@trufflesuite/web3-provider-engine/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/@trufflesuite/web3-provider-engine/node_modules/ws": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.4.tgz", + "integrity": "sha512-fFCejsuC8f9kOSu9FYaOw8CdO68O3h5v0lg4p74o8JqWpwTf9tniOD+nOB78aWoVSS6WptVUmDrp/KPsMVBWFQ==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@typechain/ethers-v6": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", + "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", + "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@typechain/ethers-v6": "^0.5.1", + "ethers": "^6.1.0", + "hardhat": "^2.9.9", + "typechain": "^8.3.2" + } + }, + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/chai": { + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "dev": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", + "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "dev": true, + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", + "dev": true + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tinycolor2": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", + "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", + "dev": true + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "dev": true + }, + "node_modules/@types/yoga-layout": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz", + "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.6.tgz", + "integrity": "sha512-Zypm+LjYdWAzvuypZvDN0smUJrhOurcuBWhhMRBExqVLRvdjp3Z9mASxKyq19K+meZMshwjjy5S0lkm388zE4Q==", + "dev": true + }, + "node_modules/abstract-leveldown": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", + "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==", + "dev": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amazon-cognito-identity-js": { + "version": "6.3.12", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz", + "integrity": "sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-js": "1.2.2", + "buffer": "4.9.2", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antlr4": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", + "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/ast-metadata-inferer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz", + "integrity": "sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==", + "dev": true, + "dependencies": { + "@mdn/browser-compat-data": "^5.2.34" + } + }, + "node_modules/ast-parents": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", + "integrity": "sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dev": true, + "dependencies": { + "async": "^2.4.0" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/auto-bind": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", + "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/await-semaphore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/await-semaphore/-/await-semaphore-0.1.3.tgz", + "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==", + "dev": true + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true + }, + "node_modules/axios": { + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", + "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.3", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/backoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", + "integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==", + "dev": true, + "dependencies": { + "precond": "0.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "dev": true + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "dev": true, + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dev": true, + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/bs58check/node_modules/base-x": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58check/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "dev": true, + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "dev": true, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "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.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001684", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", + "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "dev": true, + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/checkpoint-store": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", + "integrity": "sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==", + "dev": true, + "dependencies": { + "functional-red-black-tree": "^1.0.1" + } + }, + "node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cids": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", + "deprecated": "This module has been superseded by the multiformats module", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/cids/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/cids/node_modules/multicodec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", + "deprecated": "This module has been superseded by the multiformats module", + "dev": true, + "dependencies": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/class-is": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", + "dev": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/code-excerpt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-3.0.0.tgz", + "integrity": "sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==", + "dev": true, + "dependencies": { + "convert-to-spaces": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dev": true, + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/console-table-printer": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/console-table-printer/-/console-table-printer-2.12.1.tgz", + "integrity": "sha512-wKGOQRRvdnd89pCeH96e2Fn4wkbenSP6LMHfjfyNLMbGuHEFbMqQNuxXqd0oXG9caIOQ1FTvc5Uijp9/4jujnQ==", + "dev": true, + "dependencies": { + "simple-wcswidth": "^1.0.1" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-hash": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "dev": true, + "dependencies": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-to-spaces": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz", + "integrity": "sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/core-js-compat": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", + "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", + "dev": true, + "dependencies": { + "browserslist": "^4.24.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", + "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.7", + "whatwg-fetch": "^2.0.4" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/deferred-leveldown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", + "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-indent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", + "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/detect-newline": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", + "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "dev": true, + "dependencies": { + "heap": ">= 0.2.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "dev": true + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ds-test": { + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/dapphub/ds-test.git#e282159d5170298eb2455a6c05280ab5a73a4ef0" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.67", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz", + "integrity": "sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "dev": true + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dev": true, + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "dev": true, + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-autofix": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-autofix/-/eslint-plugin-autofix-2.2.0.tgz", + "integrity": "sha512-lu8+0r+utyTroROqXIL+a8sUpICi6za22hIzlpb0+x0tQGRnOjhOKU7v8mC/NS/faDoVsw6xW3vUpc+Mcz5NWA==", + "dev": true, + "dependencies": { + "eslint-rule-composer": "^0.3.0", + "espree": "^9.0.0", + "esutils": "^2.0.2", + "string-similarity": "^4.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-compat": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz", + "integrity": "sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==", + "dev": true, + "dependencies": { + "@mdn/browser-compat-data": "^5.3.13", + "ast-metadata-inferer": "^0.8.0", + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001524", + "find-up": "^5.0.0", + "lodash.memoize": "^4.1.2", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=14.x" + }, + "peerDependencies": { + "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-compat/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-unused-imports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.2.0.tgz", + "integrity": "sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==", + "dev": true, + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "6 - 7", + "eslint": "8" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eth-block-tracker": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", + "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-runtime": "^7.5.5", + "@babel/runtime": "^7.5.5", + "eth-query": "^2.1.0", + "json-rpc-random-id": "^1.0.1", + "pify": "^3.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", + "dev": true, + "dependencies": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + } + }, + "node_modules/eth-ens-namehash/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", + "dev": true + }, + "node_modules/eth-gas-reporter": { + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", + "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", + "dev": true, + "dependencies": { + "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^5.7.2", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^10.2.0", + "req-cwd": "^2.0.0", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" + }, + "peerDependencies": { + "@codechecks/client": "^0.1.0" + }, + "peerDependenciesMeta": { + "@codechecks/client": { + "optional": true + } + } + }, + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-gas-reporter/node_modules/cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@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/contracts": "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/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-gas-reporter/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-gas-reporter/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-json-rpc-errors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz", + "integrity": "sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA==", + "deprecated": "Package renamed: https://www.npmjs.com/package/eth-rpc-errors", + "dev": true, + "dependencies": { + "fast-safe-stringify": "^2.0.6" + } + }, + "node_modules/eth-lib": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/eth-lib/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/eth-lib/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/eth-lib/node_modules/ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/eth-query": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", + "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", + "dev": true, + "dependencies": { + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "node_modules/eth-rpc-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz", + "integrity": "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==", + "dev": true, + "dependencies": { + "fast-safe-stringify": "^2.0.6" + } + }, + "node_modules/eth-sig-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-3.0.1.tgz", + "integrity": "sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ==", + "deprecated": "Deprecated in favor of '@metamask/eth-sig-util'", + "dev": true, + "dependencies": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^5.1.1", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.0" + } + }, + "node_modules/eth-sig-util/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/eth-sig-util/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "dev": true, + "dependencies": { + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", + "dev": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-common": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", + "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==", + "dev": true + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereum-protocol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz", + "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==", + "dev": true + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "deprecated": "This library has been deprecated and usage is discouraged.", + "dev": true, + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-account": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", + "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", + "dev": true, + "dependencies": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-account/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/ethereumjs-account/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-block": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", + "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", + "deprecated": "New package name format for new versions: @ethereumjs/block. Please update.", + "dev": true, + "dependencies": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ethereumjs-block/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-common": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", + "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", + "deprecated": "New package name format for new versions: @ethereumjs/common. Please update.", + "dev": true + }, + "node_modules/ethereumjs-tx": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", + "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", + "deprecated": "New package name format for new versions: @ethereumjs/tx. Please update.", + "dev": true, + "dependencies": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "node_modules/ethereumjs-tx/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/ethereumjs-tx/node_modules/ethereum-common": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", + "integrity": "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==", + "dev": true + }, + "node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethereumjs-vm": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", + "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", + "deprecated": "New package name format for new versions: @ethereumjs/vm. Please update.", + "dev": true, + "dependencies": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-vm/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-vm/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", + "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", + "deprecated": "New package name format for new versions: @ethereumjs/block. Please update.", + "dev": true, + "dependencies": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", + "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", + "deprecated": "New package name format for new versions: @ethereumjs/tx. Please update.", + "dev": true, + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-wallet": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz", + "integrity": "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==", + "deprecated": "New package name format for new versions: @ethereumjs/wallet. Please update.", + "dev": true, + "dependencies": { + "aes-js": "^3.1.2", + "bs58check": "^2.1.2", + "ethereum-cryptography": "^0.1.3", + "ethereumjs-util": "^7.1.2", + "randombytes": "^2.1.0", + "scrypt-js": "^3.0.1", + "utf8": "^3.0.0", + "uuid": "^8.3.2" + } + }, + "node_modules/ethers": { + "version": "6.13.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.4.tgz", + "integrity": "sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ethers/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true + }, + "node_modules/ethers/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true + }, + "node_modules/ethers/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, + "node_modules/ethers/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "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 + } + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dev": true, + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fake-merkle-patricia-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", + "integrity": "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==", + "dev": true, + "dependencies": { + "checkpoint-store": "^1.1.0" + } + }, + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "dev": true + }, + "node_modules/fetch-ponyfill": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz", + "integrity": "sha512-knK9sGskIg2T7OnYLdZ2hZXn0CtDrAIBxYQLpmEf0BqfdWnwmM1weccUl5+4EdA44tzNSFAuxITPbXtPehUB3g==", + "dev": true, + "dependencies": { + "node-fetch": "~1.7.1" + } + }, + "node_modules/fetch-ponyfill/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fetch-ponyfill/node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true + }, + "node_modules/fmix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", + "dev": true, + "dependencies": { + "imul": "^1.0.0" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/forge-std": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/forge-std/-/forge-std-1.1.2.tgz", + "integrity": "sha512-Wfb0iAS9PcfjMKtGpWQw9mXzJxrWD62kJCUqqLcyuI0+VRtJ3j20XembjF3kS20qELYdXft1vD/SPFVWVKMFOw==" + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "dev": true, + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fp-ts": { + "version": "2.16.9", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.9.tgz", + "integrity": "sha512-+I2+FnVB+tVaxcYyQkHUq7ZdKScaBlX53A41mxQtpIccsfyv8PzdzP7fzp2AY832T4aoK6UZ5WRX/ebGd8uZuQ==", + "dev": true + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "bin": { + "testrpc-sc": "index.js" + } + }, + "node_modules/ghost-testrpc/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ghost-testrpc/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ghost-testrpc/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-hooks-list": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.1.0.tgz", + "integrity": "sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==", + "dev": true, + "funding": { + "url": "https://github.com/fisker/git-hooks-list?sponsor=1" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/gradient-string": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gradient-string/-/gradient-string-1.2.0.tgz", + "integrity": "sha512-Lxog7IDMMWNjwo4O0KbdBvSewk4vW6kQe5XaLuuPCyCE65AGQ1P8YqKJa5dq8TYf/Ge31F+KjWzPR5mAJvjlAg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "tinygradient": "^0.4.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gradient-string/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gradient-string/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gradient-string/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/gradient-string/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/gradient-string/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/gradient-string/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/gradient-string/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hardhat": { + "version": "2.22.16", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.16.tgz", + "integrity": "sha512-d52yQZ09u0roL6GlgJSvtknsBtIuj9JrJ/U8VMzr/wue+gO5v2tQayvOX6llerlR57Zw2EOTQjLAt6RpHvjwHA==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/edr": "^0.6.4", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chokidar": "^4.0.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^5.0.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "picocolors": "^1.1.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.8.26", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.6", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/hardhat-contract-sizer": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz", + "integrity": "sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "cli-table3": "^0.6.0", + "strip-ansi": "^6.0.0" + }, + "peerDependencies": { + "hardhat": "^2.0.0" + } + }, + "node_modules/hardhat-deploy": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.12.4.tgz", + "integrity": "sha512-bYO8DIyeGxZWlhnMoCBon9HNZb6ji0jQn7ngP1t5UmGhC8rQYhji7B73qETMOFhzt5ECZPr+U52duj3nubsqdQ==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^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/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@types/qs": "^6.9.7", + "axios": "^0.21.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "ethers": "^5.7.0", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "match-all": "^1.2.6", + "murmur-128": "^0.2.1", + "qs": "^6.9.4", + "zksync-ethers": "^5.0.0" + } + }, + "node_modules/hardhat-deploy/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/hardhat-deploy/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/hardhat-deploy/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@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/contracts": "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/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/hardhat-deploy/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hardhat-deploy/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/hardhat-gas-reporter": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", + "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", + "dev": true, + "dependencies": { + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" + }, + "peerDependencies": { + "hardhat": "^2.0.2" + } + }, + "node_modules/hardhat-storage-layout": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/hardhat-storage-layout/-/hardhat-storage-layout-0.1.7.tgz", + "integrity": "sha512-q723g2iQnJpRdMC6Y8fbh/stG6MLHKNxa5jq/ohjtD5znOlOzQ6ojYuInY8V4o4WcPyG3ty4hzHYunLf66/1+A==", + "dev": true, + "dependencies": { + "console-table-printer": "^2.9.0" + }, + "peerDependencies": { + "hardhat": "^2.0.3" + } + }, + "node_modules/hardhat-tracer": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/hardhat-tracer/-/hardhat-tracer-2.8.3.tgz", + "integrity": "sha512-bZrz8KtqQUbBcCAYcXnQh3bIkA7JCb2rC7tmq5XlTcDDFPW425HA58CtfHLHsoArrOQdogb0tPTLwh3ONmDj6w==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "debug": "^4.3.4", + "ethers": "^5.6.1" + }, + "peerDependencies": { + "chai": "4.x", + "hardhat": ">=2.16 <2.21.0" + } + }, + "node_modules/hardhat-tracer/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@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/contracts": "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/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/hardhat/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/hardhat/node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true + }, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat/node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/homedir": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/homedir/-/homedir-0.6.0.tgz", + "integrity": "sha512-KZFBHenkVuyyG4uaqRSXqWJr3HTxcaPguM7rU1BlH/mtbDlzaXNSXTa9AhV+fXEjrNemHu9vtLRIaM8/8OW0xA==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==", + "dev": true + }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "dev": true, + "dependencies": { + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/idna-uts46-hx/node_modules/punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true + }, + "node_modules/immer": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", + "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imul": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", + "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "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.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/ink": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ink/-/ink-3.2.0.tgz", + "integrity": "sha512-firNp1q3xxTzoItj/eOOSZQnYSlyrWks5llCTVX37nJ59K3eXbQ8PtzCguqo8YI19EELo5QxaKnJd4VxzhU8tg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "auto-bind": "4.0.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.0", + "cli-cursor": "^3.1.0", + "cli-truncate": "^2.1.0", + "code-excerpt": "^3.0.0", + "indent-string": "^4.0.0", + "is-ci": "^2.0.0", + "lodash": "^4.17.20", + "patch-console": "^1.0.0", + "react-devtools-core": "^4.19.1", + "react-reconciler": "^0.26.2", + "scheduler": "^0.20.2", + "signal-exit": "^3.0.2", + "slice-ansi": "^3.0.0", + "stack-utils": "^2.0.2", + "string-width": "^4.2.2", + "type-fest": "^0.12.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.0", + "ws": "^7.5.5", + "yoga-layout-prebuilt": "^1.9.6" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": ">=16.8.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/ink-gradient": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ink-gradient/-/ink-gradient-2.0.0.tgz", + "integrity": "sha512-d2BK/EzzBRoDL54NWkS3JGE4J8xtzwRVWxDAIkQ/eQ60XIzrFMtT5JlUqgV05Qlt32Jvk50qW51YqxGJggTuqA==", + "dev": true, + "dependencies": { + "gradient-string": "^1.2.0", + "prop-types": "^15.7.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "peerDependencies": { + "ink": ">=3.0.0", + "react": ">=16.8.0" + } + }, + "node_modules/ink-table": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ink-table/-/ink-table-3.1.0.tgz", + "integrity": "sha512-qxVb4DIaEaJryvF9uZGydnmP9Hkmas3DCKVpEcBYC0E4eJd3qNgNe+PZKuzgCERFe9LfAS1TNWxCr9+AU4v3YA==", + "dev": true, + "dependencies": { + "object-hash": "^2.0.3" + }, + "peerDependencies": { + "ink": ">=3.0.0", + "react": ">=16.8.0" + } + }, + "node_modules/ink/node_modules/type-fest": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", + "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ink/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "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 + } + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/io-ts/node_modules/fp-ts": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz", + "integrity": "sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", + "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "dev": true, + "dependencies": { + "semver": "^7.6.3" + } + }, + "node_modules/is-bun-module/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", + "integrity": "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "dev": true, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "dev": true + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-rpc-engine": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", + "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", + "dev": true, + "dependencies": { + "eth-rpc-errors": "^3.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/json-rpc-random-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", + "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", + "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stable-stringify/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "dev": true, + "engines": { + "node": ">=7.10.1" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jsonschema": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keccak/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "dev": true + }, + "node_modules/latest-version": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "dev": true, + "dependencies": { + "package-json": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/level-codec": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", + "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==", + "dev": true + }, + "node_modules/level-errors": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", + "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", + "dev": true, + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/level-iterator-stream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", + "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/level-iterator-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/level-iterator-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "node_modules/level-ws": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", + "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", + "dev": true, + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/level-ws/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/level-ws/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", + "dev": true + }, + "node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/level-ws/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levelup": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", + "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/levelup/node_modules/semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.flatmap": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", + "integrity": "sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg==", + "dev": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "dev": true, + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true + }, + "node_modules/match-all": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", + "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", + "dev": true + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memdown": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", + "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", + "deprecated": "Superseded by memory-level (https://github.com/Level/community#faq)", + "dev": true, + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", + "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/memdown/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", + "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", + "dev": true, + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "node_modules/merkle-patricia-tree/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "dev": true + }, + "node_modules/micro-memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.2.tgz", + "integrity": "sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dev": true, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", + "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", + "dev": true, + "dependencies": { + "mkdirp": "*" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/mocha/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mock-fs": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/multibase": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", + "deprecated": "This module has been superseded by the multiformats module", + "dev": true, + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/multibase/node_modules/base-x": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/multibase/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/multicodec": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", + "deprecated": "This module has been superseded by the multiformats module", + "dev": true, + "dependencies": { + "varint": "^5.0.0" + } + }, + "node_modules/multihashes": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + } + }, + "node_modules/multihashes/node_modules/base-x": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/multihashes/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/multihashes/node_modules/multibase": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + "deprecated": "This module has been superseded by the multiformats module", + "dev": true, + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/murmur-128": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", + "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", + "dev": true, + "dependencies": { + "encode-utf8": "^1.0.2", + "fmix": "^0.1.0", + "imul": "^1.0.0" + } + }, + "node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/ndjson": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", + "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", + "dev": true, + "dependencies": { + "json-stringify-safe": "^5.0.1", + "minimist": "^1.2.5", + "readable-stream": "^3.6.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "ndjson": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ndjson/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dev": true, + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true + }, + "node_modules/oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "dev": true, + "dependencies": { + "http-https": "^1.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dev": true, + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "dev": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-memoize": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-4.0.4.tgz", + "integrity": "sha512-ijdh0DP4Mk6J4FXlOM6vPPoCjPytcEseW8p/k5SDTSSfGV3E9bpt9Yzfifvzp6iohIieoLTkXRb32OWV0fB2Lw==", + "dev": true, + "dependencies": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.0.0", + "p-settle": "^4.1.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/p-memoize?sponsor=1" + } + }, + "node_modules/p-reflect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz", + "integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-settle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-4.1.1.tgz", + "integrity": "sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.2", + "p-reflect": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-settle/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "dev": true, + "dependencies": { + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", + "dev": true + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/patch-console": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-1.0.0.tgz", + "integrity": "sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/patch-package": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", + "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", + "dev": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^1.10.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=10", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/patch-package/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/patch-package/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/patch-package/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/patch-package/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/patch-package/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/patch-package/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/patch-package/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/patch-package/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/patch-package/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/precond": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", + "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prettier-plugin-packagejson": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.6.tgz", + "integrity": "sha512-TY7KiLtyt6Tlf53BEbXUWkN0+TRdHKgIMmtXtDCyHH6yWnZ50Lwq6Vb6lyjapZrhDTXooC4EtlY5iLe1sCgi5w==", + "dev": true, + "dependencies": { + "sort-package-json": "2.12.0", + "synckit": "0.9.2" + }, + "peerDependencies": { + "prettier": ">= 1.16.0" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } + } + }, + "node_modules/prettier-plugin-solidity": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.1.tgz", + "integrity": "sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg==", + "dev": true, + "dependencies": { + "@solidity-parser/parser": "^0.18.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "prettier": ">=2.3.0" + } + }, + "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", + "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", + "dev": true + }, + "node_modules/prettier-plugin-solidity/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dev": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/promise-to-callback": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", + "integrity": "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==", + "dev": true, + "dependencies": { + "is-fn": "^1.0.0", + "set-immediate-shim": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proper-lockfile/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "node_modules/psl": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.14.0.tgz", + "integrity": "sha512-Syk1bnf6fRZ9wQs03AtKJHcM12cKbOLo9L8JtCCdYj5/DTsHmTyXM4BK5ouWeG2P6kZ4nmFvuNTdtaqfobCOCg==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + } + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz", + "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==", + "dev": true, + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/react-reconciler": { + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.26.2.tgz", + "integrity": "sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^17.0.2" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/recursive-readdir/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", + "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "which-builtin-type": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/registry-auth-token": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.3.tgz", + "integrity": "sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==", + "dev": true, + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "dev": true, + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", + "dev": true, + "dependencies": { + "req-from": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-from/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dev": true, + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "dev": true + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-event-emitter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", + "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", + "deprecated": "Renamed to @metamask/safe-event-emitter", + "dev": true, + "dependencies": { + "events": "^3.0.0" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sc-istanbul": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", + "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "dev": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/sc-istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/sc-istanbul/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "node_modules/sc-istanbul/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sc-istanbul/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/sc-istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/sc-istanbul/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true + }, + "node_modules/secp256k1": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/secp256k1/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/secp256k1/node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "dev": true + }, + "node_modules/semaphore": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", + "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "dev": true, + "dependencies": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", + "dev": true, + "dependencies": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shelljs/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/shelljs/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/shelljs/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", + "dev": true, + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/simple-get/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "node_modules/simple-wcswidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz", + "integrity": "sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/solady": { + "version": "0.0.182", + "resolved": "https://registry.npmjs.org/solady/-/solady-0.0.182.tgz", + "integrity": "sha512-FW6xo1akJoYpkXMzu58/56FcNU3HYYNamEbnFO3iSibXk0nSHo0DV2Gu/zI3FPg3So5CCX6IYli1TT1IWATnvg==", + "dev": true + }, + "node_modules/solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "dev": true, + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/solhint": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/solhint/-/solhint-4.5.4.tgz", + "integrity": "sha512-Cu1XiJXub2q1eCr9kkJ9VPv1sGcmj3V7Zb76B0CoezDOB9bu3DxKIFFH7ggCl9fWpEPD6xBmRLfZrYijkVmujQ==", + "dev": true, + "dependencies": { + "@solidity-parser/parser": "^0.18.0", + "ajv": "^6.12.6", + "antlr4": "^4.13.1-patch-1", + "ast-parents": "^0.0.1", + "chalk": "^4.1.2", + "commander": "^10.0.0", + "cosmiconfig": "^8.0.0", + "fast-diff": "^1.2.0", + "glob": "^8.0.3", + "ignore": "^5.2.4", + "js-yaml": "^4.1.0", + "latest-version": "^7.0.0", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "semver": "^7.5.2", + "strip-ansi": "^6.0.1", + "table": "^6.8.1", + "text-table": "^0.2.0" + }, + "bin": { + "solhint": "solhint.js" + }, + "optionalDependencies": { + "prettier": "^2.8.3" + } + }, + "node_modules/solhint/node_modules/@solidity-parser/parser": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", + "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", + "dev": true + }, + "node_modules/solhint/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/solhint/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/solhint/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-ast": { + "version": "0.4.59", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.59.tgz", + "integrity": "sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g==", + "dev": true + }, + "node_modules/solidity-bytes-utils": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/solidity-bytes-utils/-/solidity-bytes-utils-0.8.2.tgz", + "integrity": "sha512-cqXPYAV2auhpdKSTPuqji0CwpSceZDu95CzqSM/9tDJ2MoMaMsdHTpOIWtVw31BIqqGPNmIChCswzbw0tHaMTw==", + "dependencies": { + "ds-test": "github:dapphub/ds-test", + "forge-std": "^1.1.2" + } + }, + "node_modules/solidity-coverage": { + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.14.tgz", + "integrity": "sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.19.0", + "chalk": "^2.4.2", + "death": "^1.1.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.21", + "mocha": "^10.2.0", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" + }, + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" + } + }, + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.19.0.tgz", + "integrity": "sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/solidity-coverage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/solidity-coverage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/solidity-coverage/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/solidity-coverage/node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/solidity-coverage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solidity-coverage/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/solidity-coverage/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/sort-object-keys": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", + "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==", + "dev": true + }, + "node_modules/sort-package-json": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.12.0.tgz", + "integrity": "sha512-/HrPQAeeLaa+vbAH/znjuhwUluuiM/zL5XX9kop8UpDgjtyWKt43hGDk2vd/TBdDpzIyzIHVUgmYofzYrAQjew==", + "dev": true, + "dependencies": { + "detect-indent": "^7.0.1", + "detect-newline": "^4.0.0", + "get-stdin": "^9.0.0", + "git-hooks-list": "^3.0.0", + "is-plain-obj": "^4.1.0", + "semver": "^7.6.0", + "sort-object-keys": "^1.1.3", + "tinyglobby": "^0.2.9" + }, + "bin": { + "sort-package-json": "cli.js" + } + }, + "node_modules/sort-package-json/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/split2/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true + }, + "node_modules/string-similarity": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", + "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dev": true, + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swarm-js": { + "version": "0.1.42", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", + "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^11.8.5", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } + }, + "node_modules/swarm-js/node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/swarm-js/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/swarm-js/node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/swarm-js/node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/swarm-js/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/swarm-js/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/swarm-js/node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/swarm-js/node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/swarm-js/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/swarm-js/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/swarm-js/node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/swarm-js/node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/swarm-js/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/synckit/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/table": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", + "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "dev": true + }, + "node_modules/tinyglobby": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", + "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", + "dev": true, + "dependencies": { + "fdir": "^6.4.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tinygradient": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-0.4.3.tgz", + "integrity": "sha512-tBPYQSs6eWukzzAITBSmqcOwZCKACvRa/XjPPh1mj4mnx4G3Drm51HxyCTU/TKnY8kG4hmTe5QlOh9O82aNtJQ==", + "dev": true, + "dependencies": { + "@types/tinycolor2": "^1.4.0", + "tinycolor2": "^1.0.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "dev": true, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/truffle-flattener": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/truffle-flattener/-/truffle-flattener-1.6.0.tgz", + "integrity": "sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q==", + "dev": true, + "dependencies": { + "@resolver-engine/imports-fs": "^0.2.2", + "@solidity-parser/parser": "^0.14.1", + "find-up": "^2.1.0", + "mkdirp": "^1.0.4", + "tsort": "0.0.1" + }, + "bin": { + "truffle-flattener": "index.js" + } + }, + "node_modules/truffle-flattener/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/truffle-flattener/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/truffle-flattener/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/truffle-flattener/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/truffle-flattener/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/truffle-flattener/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/truffle-flattener/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-command-line-args": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", + "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "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 + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typechain": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", + "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", + "dev": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typechain/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici": { + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true + }, + "node_modules/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", + "dev": true + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/web3": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.4.tgz", + "integrity": "sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "web3-bzz": "1.10.4", + "web3-core": "1.10.4", + "web3-eth": "1.10.4", + "web3-eth-personal": "1.10.4", + "web3-net": "1.10.4", + "web3-shh": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.4.tgz", + "integrity": "sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz/node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, + "node_modules/web3-bzz/node_modules/cacheable-lookup": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", + "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/web3-bzz/node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/web3-bzz/node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/web3-bzz/node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/web3-bzz/node_modules/form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", + "dev": true + }, + "node_modules/web3-bzz/node_modules/got": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/web3-bzz/node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/web3-bzz/node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/web3-bzz/node_modules/responselike/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/web3-core": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.4.tgz", + "integrity": "sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww==", + "dev": true, + "dependencies": { + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-requestmanager": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-helpers": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz", + "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==", + "dev": true, + "dependencies": { + "web3-eth-iban": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.4.tgz", + "integrity": "sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA==", + "dev": true, + "dependencies": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.10.4", + "web3-core-promievent": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-promievent": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz", + "integrity": "sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==", + "dev": true, + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-requestmanager": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.4.tgz", + "integrity": "sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg==", + "dev": true, + "dependencies": { + "util": "^0.12.5", + "web3-core-helpers": "1.10.4", + "web3-providers-http": "1.10.4", + "web3-providers-ipc": "1.10.4", + "web3-providers-ws": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.4.tgz", + "integrity": "sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw==", + "dev": true, + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, + "node_modules/web3-eth": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.4.tgz", + "integrity": "sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA==", + "dev": true, + "dependencies": { + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-eth-abi": "1.10.4", + "web3-eth-accounts": "1.10.4", + "web3-eth-contract": "1.10.4", + "web3-eth-ens": "1.10.4", + "web3-eth-iban": "1.10.4", + "web3-eth-personal": "1.10.4", + "web3-net": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.4.tgz", + "integrity": "sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.4.tgz", + "integrity": "sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "2.6.5", + "@ethereumjs/tx": "3.5.2", + "@ethereumjs/util": "^8.1.0", + "eth-lib": "0.2.8", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/web3-eth-contract": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.4.tgz", + "integrity": "sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A==", + "dev": true, + "dependencies": { + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-promievent": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-eth-abi": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.4.tgz", + "integrity": "sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg==", + "dev": true, + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-promievent": "1.10.4", + "web3-eth-abi": "1.10.4", + "web3-eth-contract": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz", + "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.4.tgz", + "integrity": "sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w==", + "dev": true, + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-net": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, + "node_modules/web3-net": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.4.tgz", + "integrity": "sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow==", + "dev": true, + "dependencies": { + "web3-core": "1.10.4", + "web3-core-method": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.4.tgz", + "integrity": "sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ==", + "dev": true, + "dependencies": { + "abortcontroller-polyfill": "^1.7.5", + "cross-fetch": "^4.0.0", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http/node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/web3-providers-ipc": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.4.tgz", + "integrity": "sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw==", + "dev": true, + "dependencies": { + "oboe": "2.1.5", + "web3-core-helpers": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.4.tgz", + "integrity": "sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA==", + "dev": true, + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.4", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-shh": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.4.tgz", + "integrity": "sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "web3-core": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-net": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "dev": true, + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/websocket": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", + "dev": true, + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.63", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", + "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/winston": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", + "dev": true, + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "dev": true, + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/winston/node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "dev": true, + "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 + } + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dev": true, + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dev": true, + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dev": true, + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "dev": true, + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoga-layout-prebuilt": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.10.0.tgz", + "integrity": "sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==", + "dev": true, + "dependencies": { + "@types/yoga-layout": "1.9.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/zksync-ethers": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/zksync-ethers/-/zksync-ethers-5.10.0.tgz", + "integrity": "sha512-OAjTGAHF9wbdkRGkj7XZuF/a1Sk/FVbwH4pmLjAKlR7mJ7sQtQhBhrPU2dCc67xLaNvEESPfwil19ES5wooYFg==", + "dev": true, + "dependencies": { + "ethers": "~5.7.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "ethers": "~5.7.0" + } + }, + "node_modules/zksync-ethers/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@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/contracts": "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/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/zksync-web3": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.4.tgz", + "integrity": "sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==", + "deprecated": "This package has been deprecated in favor of zksync-ethers@5.0.0", + "dev": true, + "peerDependencies": { + "ethers": "^5.7.0" + } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/projects/bridge-lz/package.json b/projects/bridge-lz/package.json new file mode 100644 index 00000000..803108f6 --- /dev/null +++ b/projects/bridge-lz/package.json @@ -0,0 +1,63 @@ +{ + "name": "InceptionBridge", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "test": "mocha --timeout 15000", + "format": "prettier --write scripts/*.js tasks/*.js test/*.js" + }, + "license": "MIT", + "devDependencies": { + "@aragon/os": "^4.4.0", + "@arbitrum/nitro-contracts": "^2.1.0", + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@layerzerolabs/devtools-evm": "~0.4.2", + "@layerzerolabs/devtools-evm-hardhat": "1.0.0", + "@layerzerolabs/eslint-config-next": "~2.3.39", + "@layerzerolabs/lz-definitions": "^2.3.39", + "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.39", + "@layerzerolabs/lz-evm-protocol-v2": "^2.3.39", + "@layerzerolabs/lz-evm-v1-0.7": "^2.3.39", + "@layerzerolabs/lz-v2-utilities": "^3.0.7", + "@layerzerolabs/oapp-evm": "^0.0.4", + "@layerzerolabs/oft-evm": "^0.1.0", + "@layerzerolabs/prettier-config-next": "^2.3.39", + "@layerzerolabs/solhint-config": "^2.3.39", + "@layerzerolabs/toolbox-hardhat": "~0.4.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-ignition": "^0.15.0", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.11", + "@nomiclabs/hardhat-etherscan": "^3.1.8", + "@openzeppelin/contracts": "^5.1.0", + "@openzeppelin/contracts-upgradeable": "^5.1.0", + "@openzeppelin/hardhat-upgrades": "^3.5.0", + "@typechain/ethers-v6": "^0.5.1", + "@typechain/hardhat": "^9.1.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=18.0.0", + "axios": "^1.7.7", + "chai": "^4.2.0", + "dotenv": "^16.4.7", + "ethers": "^6.4.0", + "hardhat": "^2.22.13", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-deploy": "^0.12.4", + "hardhat-gas-reporter": "^1.0.8", + "hardhat-storage-layout": "^0.1.7", + "hardhat-tracer": "^2.6.0", + "prettier": "3.3.2", + "solidity-coverage": "^0.8.0", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": ">=4.5.0" + }, + "dependencies": { + "solidity-bytes-utils": "^0.8.2" + } +} diff --git a/projects/bridge-lz/scripts/call-on-opt.ts b/projects/bridge-lz/scripts/call-on-opt.ts new file mode 100644 index 00000000..12e79354 --- /dev/null +++ b/projects/bridge-lz/scripts/call-on-opt.ts @@ -0,0 +1,44 @@ +const { ethers } = require("hardhat"); + +const Options = require("@layerzerolabs/lz-v2-utilities").Options; +const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString(); + +async function main() { + // const myOAppAddressA = "0xB9B9AfA6B41c26A4EC360248ebC7787d60f85AFd"; + const myOAppAddressA = "0x64c1e6D05750657AE1b1Cb056Fc41E6D654716dC"; + // const MyOAppA = await ethers.getContractAt("MyOApp", myOAppAddressA); + const MyOAppA = await ethers.getContractAt("CrosschainBridge", myOAppAddressA); + + // Set peers before quoting + const destinationEid = 40161; + + // Define message and options + const message = ethers.utils.toUtf8Bytes(""); + const options = Options.newOptions().addExecutorLzReceiveOption(200000, 1000).toHex().toString(); + + + // Estimate fees + const [nativeFee] = await MyOAppA.quote(destinationEid, message, options, false); + + console.log(`nativeFee: ${nativeFee}`); + + + // Send message with some ETH for messaging fees + const tx = await MyOAppA.sendCrosschain(destinationEid, message, options, { + value: nativeFee, // Ensure to provide enough fee + gasLimit: 500000, // You can set a manual gas limit + }); + + console.log("Transaction sent:", tx.hash); + + // Wait for the transaction to be confirmed + await tx.wait(); + console.log("Message sent successfully!"); +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/call-on-sep.ts b/projects/bridge-lz/scripts/call-on-sep.ts new file mode 100644 index 00000000..b2e9ca4b --- /dev/null +++ b/projects/bridge-lz/scripts/call-on-sep.ts @@ -0,0 +1,41 @@ +const { ethers } = require("hardhat"); + +async function main() { + const [deployer] = await ethers.getSigners(); + + // Replace with your deployed contract addresses + const myOAppAddressA = "0x07E146B89606828A34D7d096E21be78207700a69"; //0x07E146B89606828A34D7d096E21be78207700a69 + const MyOAppA = await ethers.getContractAt("MyOApp", myOAppAddressA); + + const myOAppAddressB = "0xB9B9AfA6B41c26A4EC360248ebC7787d60f85AFd"; + const MyOAppB = await ethers.getContractAt("MyOApp", myOAppAddressB); + + // Set peers before quoting + const destinationEid = 40232; + + // Define message and options + const message = "Hello from L1!"; + const options = "0x"; // Empty options in hex format + + // Estimate fees + const [nativeFee] = await MyOAppA.quote(destinationEid, message, options, false); + + // Send message with some ETH for messaging fees + const tx = await MyOAppA.send(destinationEid, message, options, { + value: nativeFee.toString(), // Ensure to provide enough fee + gasLimit: 500000, // You can set a manual gas limit + }); + + console.log("Transaction sent:", tx.hash); + + // Wait for the transaction to be confirmed + await tx.wait(); + console.log("Message sent successfully!"); +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/calls/send-crosschain.ts b/projects/bridge-lz/scripts/calls/send-crosschain.ts new file mode 100644 index 00000000..d740921e --- /dev/null +++ b/projects/bridge-lz/scripts/calls/send-crosschain.ts @@ -0,0 +1,57 @@ +import { ethers } from "hardhat"; +import fs from "fs"; +import path from "path"; + +async function main() { + const [deployer] = await ethers.getSigners(); + console.log(`Deployer Address: ${deployer.address}`); + + // Load the checkpoint data to get the LZCrossChainBridge contract address + const checkpointFilePath = path.join(__dirname, "../../../../deployment_checkpoint_optimism-sepolia.json"); + + // Ensure the deployment checkpoint file exists + if (!fs.existsSync(checkpointFilePath)) { + throw new Error(`Checkpoint file not found: ${checkpointFilePath}`); + } + + // Read the deployment checkpoint data + const checkpointData = JSON.parse(fs.readFileSync(checkpointFilePath, "utf8")); + + // Retrieve the LZCrossChainBridge address + const lzCrossChainBridgeAddress = checkpointData.LZCrossChainBridge; + if (!lzCrossChainBridgeAddress) { + throw new Error('LZCrossChainBridge address not found in deployment_checkpoint_optimism-sepolia.json'); + } + + // Get the LZCrossChainBridge contract instance + const LZCrossChainBridge = await ethers.getContractAt("ICrossChainBridge", lzCrossChainBridgeAddress); + + // Prepare parameters for the sendCrosschain call + const destinationChainId = 40161; + const payload = "0x"; // Empty data + const options = "0x"; // Empty options + const ethToSend = ethers.parseUnits("0.002", "ether"); // Sending 0.002 ETH + + // Step 1: Call .quote() to get the fee estimate and extract MessagingFee.nativeFee + console.log(`Calling .quote() to get fee estimate for the crosschain transaction...`); + const feeEstimate = await LZCrossChainBridge.quote(destinationChainId, payload, options, false); + const nativeFee = ethers.toBigInt(feeEstimate); // Cast the result as BigInt + console.log(`Estimated fee: ${ethers.formatEther(nativeFee)} ETH`); + + // Step 2: Add ethToSend to the fee estimate + const totalValueToSend = nativeFee + ethToSend; + console.log(`Total ETH to send (fee + value): ${ethers.formatEther(totalValueToSend)} ETH`); + + // Step 3: Call sendCrosschain with the calculated total value + console.log(`Calling sendCrosschain() on LZCrossChainBridge at: ${lzCrossChainBridgeAddress}`); + const tx = await LZCrossChainBridge.sendCrosschain(destinationChainId, payload, options, { value: totalValueToSend }); + await tx.wait(); + + console.log(`sendCrosschain() successfully called. Tx hash: ${tx.hash}`); +} + +// Run the script +main().catch((error) => { + console.error("Error:", error); + process.exit(1); +}); diff --git a/projects/bridge-lz/scripts/calls/sendEthToL1.ts b/projects/bridge-lz/scripts/calls/sendEthToL1.ts new file mode 100644 index 00000000..2ca6aa6e --- /dev/null +++ b/projects/bridge-lz/scripts/calls/sendEthToL1.ts @@ -0,0 +1,74 @@ +import { ethers } from "hardhat"; +import fs from "fs"; +import path from "path"; + +const Options = require("@layerzerolabs/lz-v2-utilities").Options; +const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString(); + +async function main() { + + const [deployer] = await ethers.getSigners(); + console.log(`deployer: ${deployer.address}`); + + // Path to the JSON file + const checkpointFilePath = path.join(__dirname, '../../../../deployment_checkpoint_optimism-sepolia.json'); + + // Check if the file exists + if (!fs.existsSync(checkpointFilePath)) { + throw new Error(`File not found: ${checkpointFilePath}`); + } + + // Read and parse the JSON file + const checkpointData = JSON.parse(fs.readFileSync(checkpointFilePath, 'utf8')); + + // Get the CrossChainAdapterOptimismL2 address + const crossChainAdapterAddress = checkpointData.CrossChainAdapterOptimismL2; + if (!crossChainAdapterAddress) { + throw new Error('CrossChainAdapterOptimismL2 address not found in deployment_checkpoint_optimism-sepolia.json'); + } + + + + // Attach to the CrossChainAdapterOptimismL2 contract + const CrossChainAdapterOptimismL2 = await ethers.getContractAt("CrossChainAdapterOptimismL2", crossChainAdapterAddress); + + const operator = await CrossChainAdapterOptimismL2.operator(); + console.log(`Operator Address: ${operator}`); + + // Output the vault address before the transaction + const vaultAddress = await CrossChainAdapterOptimismL2.vault(); + console.log(`Vault Address: ${vaultAddress}`); + + // Define message and options + const message = "1"; + const options = Options.newOptions().toHex().toString(); + + console.log(`options: ${options}`); + + + console.log(`Calling sendEthToL1 with 0.0002 ETH to contract at address ${crossChainAdapterAddress}...`); + + const destinationEid = 40161; + + try { + // Call sendEthToL1 with 0.0002 ETH + const tx = await CrossChainAdapterOptimismL2.sendEthToL1_2(destinationEid, message, options, { + value: "650750093439552" + }); + + console.log("Transaction sent:", tx.hash); + + // Wait for the transaction to be mined + await tx.wait(); + console.log("Transaction confirmed!"); + } catch (e) { + console.error(e); + } + + +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/projects/bridge-lz/scripts/deploy-options-creator_temp.ts b/projects/bridge-lz/scripts/deploy-options-creator_temp.ts new file mode 100644 index 00000000..e1c7a1c7 --- /dev/null +++ b/projects/bridge-lz/scripts/deploy-options-creator_temp.ts @@ -0,0 +1,43 @@ +import { ethers, run } from "hardhat"; + +async function main() { + // Compile and get the contract factory + const OptionsCreator = await ethers.getContractFactory("OptionsCreator"); + + console.log("Deploying OptionsCreator contract..."); + + // Deploy the contract + const optionsCreator = await OptionsCreator.deploy(); + + // Wait for the contract to be mined + await optionsCreator.waitForDeployment(); + + // Get the deployment transaction hash + const txHash = optionsCreator.deployTransaction.hash; + + // Wait for 5 confirmations + console.log("Waiting for 5 confirmations..."); + await ethers.provider.waitForTransaction(txHash, 5); + + console.log("OptionsCreator deployed to:", await optionsCreator.getAddress()); + + // Verify the contract on Etherscan + try { + console.log("Waiting for Etherscan indexing..."); + await new Promise((resolve) => setTimeout(resolve, 60000)); // Wait 60 seconds to allow Etherscan to index + + console.log("Verifying OptionsCreator contract on Etherscan..."); + await run("verify:verify", { + address: await optionsCreator.getAddress(), + constructorArguments: [], + }); + console.log("Contract verified successfully!"); + } catch (error) { + console.error("Verification failed:", error); + } +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/projects/bridge-lz/scripts/holesky/set-peers-l1-opt.ts b/projects/bridge-lz/scripts/holesky/set-peers-l1-opt.ts new file mode 100644 index 00000000..e83fd2a3 --- /dev/null +++ b/projects/bridge-lz/scripts/holesky/set-peers-l1-opt.ts @@ -0,0 +1,30 @@ +const { ethers } = require("hardhat"); +const fs = require("fs"); +const path = require("path"); + +async function main() { + const [deployer] = await ethers.getSigners(); + + const CrossChainBridgeEthereumAddress = "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E"; + const CrossChainBridgeOptimismAddress = "0x838a7fe80f1AF808Bc5ad0f9B1AC6e26B2475E17"; + + if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeOptimismAddress) { + throw new Error("CrossChainBridge addresses not found in the checkpoint files."); + } + + // Get contract instances + const CrossChainBridgeSepolia = await ethers.getContractAt("LZCrossChainAdapterL1", CrossChainBridgeEthereumAddress); + const eIDOptimismSepolia = 40232; //Optimism Sepolia eID + + const tx = await CrossChainBridgeSepolia.connect(deployer).setPeer(eIDOptimismSepolia, ethers.utils.zeroPad(CrossChainBridgeEthereumAddress, 32)); + await tx.wait(); + + console.log("Peers set successfully"); +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/holesky/set-peers-l1.ts b/projects/bridge-lz/scripts/holesky/set-peers-l1.ts new file mode 100644 index 00000000..9ee9fed5 --- /dev/null +++ b/projects/bridge-lz/scripts/holesky/set-peers-l1.ts @@ -0,0 +1,28 @@ +const { ethers } = require("hardhat"); +const fs = require("fs"); +const path = require("path"); + +async function main() { + const [deployer] = await ethers.getSigners(); + + const CrossChainBridgeEthereumAddress = "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E"; + const CrossChainBridgeArbitrumAddress = "0xb7A8CA74cbfe313804c3D52663e9b0C0585B5C4e"; + + if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeArbitrumAddress) { + throw new Error("CrossChainBridge addresses not found in the checkpoint files."); + } + + // Get contract instances + const CrossChainBridgeSepolia = await ethers.getContractAt("LZCrossChainAdapterL1", CrossChainBridgeEthereumAddress); + const eIDArbitrumSepolia = 40231; //Arbitrum Sepolia eID + + await CrossChainBridgeSepolia.connect(deployer).setPeer(eIDArbitrumSepolia, ethers.utils.zeroPad(CrossChainBridgeArbitrumAddress, 32)); + console.log("Peers set successfully"); +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/holesky/set-peers-l2-arb.ts b/projects/bridge-lz/scripts/holesky/set-peers-l2-arb.ts new file mode 100644 index 00000000..7c7fa5fa --- /dev/null +++ b/projects/bridge-lz/scripts/holesky/set-peers-l2-arb.ts @@ -0,0 +1,29 @@ +const { ethers } = require("hardhat"); +const fs = require("fs"); +const path = require("path"); + +async function main() { + const [deployer] = await ethers.getSigners(); + + const CrossChainBridgeEthereumAddress = "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E"; + const CrossChainBridgeArbitrumAddress = "0xb7A8CA74cbfe313804c3D52663e9b0C0585B5C4e"; + + if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeArbitrumAddress) { + throw new Error("CrossChainBridge addresses not found in the checkpoint files."); + } + + // Get contract instance + const CrossChainBridgeOptimism = await ethers.getContractAt("LZCrossChainAdapterL2", CrossChainBridgeArbitrumAddress); + const eIdSepolia = 40217; //Holesky eID + + // Set peer for Holesky + await CrossChainBridgeOptimism.connect(deployer).setPeer(eIdSepolia, ethers.utils.zeroPad(CrossChainBridgeEthereumAddress, 32)); + console.log(`Bridge at address ${CrossChainBridgeArbitrumAddress} was set successfully with peer at address ${CrossChainBridgeEthereumAddress} at Ethereum`); +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/holesky/set-peers-l2-opt.ts b/projects/bridge-lz/scripts/holesky/set-peers-l2-opt.ts new file mode 100644 index 00000000..a3d1d55b --- /dev/null +++ b/projects/bridge-lz/scripts/holesky/set-peers-l2-opt.ts @@ -0,0 +1,30 @@ +const { ethers } = require("hardhat"); +const fs = require("fs"); +const path = require("path"); + +async function main() { + const [deployer] = await ethers.getSigners(); + + const CrossChainBridgeEthereumAddress = "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E"; + const CrossChainBridgeOptimismAddress = "0x838a7fe80f1AF808Bc5ad0f9B1AC6e26B2475E17"; + + if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeOptimismAddress) { + throw new Error("CrossChainBridge addresses not found in the checkpoint files."); + } + + // Get contract instance + const CrossChainBridgeOptimism = await ethers.getContractAt("LZCrossChainAdapterL2", CrossChainBridgeOptimismAddress); + const eIdSepolia = 40217; //Holesky eID + + // Set peer for Holesky + const tx = await CrossChainBridgeOptimism.connect(deployer).setPeer(eIdSepolia, ethers.utils.zeroPad(CrossChainBridgeEthereumAddress, 32)); + await tx.wait(); + console.log(`Bridge at address ${CrossChainBridgeOptimismAddress} was set successfully with peer at address ${CrossChainBridgeEthereumAddress} at Ethereum`); +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/l1-deploy-dummy-processor.ts b/projects/bridge-lz/scripts/l1-deploy-dummy-processor.ts new file mode 100644 index 00000000..cf804ccd --- /dev/null +++ b/projects/bridge-lz/scripts/l1-deploy-dummy-processor.ts @@ -0,0 +1,37 @@ +import { ethers } from "hardhat"; +import fs from "fs"; +import path from "path"; + +async function main() { + const [deployer] = await ethers.getSigners(); + console.log(`Deployer address: ${deployer.address}`); + + // Deploy the DummyDataProcessor contract + const DummyDataProcessor = await ethers.getContractFactory("DummyDataProcessor"); + const dummyDataProcessor = await DummyDataProcessor.deploy(); + await dummyDataProcessor.deployed(); + + console.log(`DummyDataProcessor deployed at: ${dummyDataProcessor.address}`); + + // Path to the JSON file + const checkpointFilePath = path.join(__dirname, '../deployment_checkpoint_sepolia.json'); + + // Check if the file exists + if (!fs.existsSync(checkpointFilePath)) { + throw new Error(`File not found: ${checkpointFilePath}`); + } + + // Read the JSON file + const checkpointData = JSON.parse(fs.readFileSync(checkpointFilePath, 'utf8')); + + // Update the JSON file with the deployed contract address + checkpointData.DummyDataProcessor = dummyDataProcessor.address; + fs.writeFileSync(checkpointFilePath, JSON.stringify(checkpointData, null, 2), 'utf8'); + + console.log(`Updated deployment_checkpoint_sepolia.json with DummyDataProcessor: ${dummyDataProcessor.address}`); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/projects/bridge-lz/scripts/livetest/call-on-opt.ts b/projects/bridge-lz/scripts/livetest/call-on-opt.ts new file mode 100644 index 00000000..4eaa31f9 --- /dev/null +++ b/projects/bridge-lz/scripts/livetest/call-on-opt.ts @@ -0,0 +1,68 @@ +const { ethers } = require("hardhat"); + +const Options = require("@layerzerolabs/lz-v2-utilities").Options; +const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString(); + +async function main() { + // const myOAppAddressA = "0xB9B9AfA6B41c26A4EC360248ebC7787d60f85AFd"; + const myOAppAddressA = "0x9FfCcD2684236AA029e3EE2aFD36f785CB7cF4E2"; + // const MyOAppA = await ethers.getContractAt("MyOApp", myOAppAddressA); + const MyOAppA = await ethers.getContractAt("LZCrossChainBridge", myOAppAddressA); + + // Destination - Ethereum Sepolia, so we're setting its Chain ID + const chainId = 11155111; + //LZ Endpoint ID for Ethereum Sepolia + const eId = 40161; + + // let's set the eid and chainId + // const txSetChainId = await MyOAppA.setChainIdFromEid(eId, chainId); + // txSetChainId.wait(); + // console.log("Chain ID and eID set"); + + + // Define message and options + + // Define the message with BigInt values + const timestamp = Math.floor(Date.now() / 1000) - 200; // Current timestamp in seconds + const balance = ethers.utils.parseUnits("1000", 18); // BigInt Balance + const totalSupply = ethers.utils.parseUnits("50000", 18); // BigInt Total supply + + // ABI encode the BigInt values + // const message = ethers.utils.defaultAbiCoder.encode( + // ["uint256", "uint256", "uint256"], + // [timestamp, balance, totalSupply] + // ); + + const message = ethers.utils.defaultAbiCoder.encode( + ["uint256", "uint256", "uint256"], + [timestamp, balance, totalSupply] + ); + + const options = Options.newOptions().addExecutorLzReceiveOption(200000, 2000).toHex().toString(); + + + // Estimate fees + const nativeFee = await MyOAppA.quote(chainId, message, options, false); + + console.log(`nativeFee: ${nativeFee}`); + + + // Send message with some ETH for messaging fees + const tx = await MyOAppA.sendCrosschain(chainId, message, options, { + value: nativeFee, // Ensure to provide enough fee + gasLimit: 500000, // You can set a manual gas limit + }); + + console.log("Transaction sent:", tx.hash); + + // Wait for the transaction to be confirmed + await tx.wait(); + console.log("Message sent successfully!"); +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/mainnet/set-peers-l1.ts b/projects/bridge-lz/scripts/mainnet/set-peers-l1.ts new file mode 100644 index 00000000..fec555f8 --- /dev/null +++ b/projects/bridge-lz/scripts/mainnet/set-peers-l1.ts @@ -0,0 +1,46 @@ +const { ethers } = require("hardhat"); +import { zeroPadValue } from "ethers"; + +async function main() { + const [deployer] = await ethers.getSigners(); + + // Fetch addresses from the checkpoint files + const CrossChainBridgeEthereumAddress = + "0x1E0Bd0291165F789b794e9513Eb07a76849c1448"; //TODO! Insert LZCrossChainBridgeL1 address here + const CrossChainBridgeOptimismAddress = + "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; //TODO! Insert LZCrossChainBridgeL2 Optimism address here + const CrossChainBridgeArbitrumAddress = + "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; //TODO! Insert LZCrossChainBridgeL2 Optimism address here + + if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeOptimismAddress || !CrossChainBridgeArbitrumAddress) { + throw new Error("CrossChainBridge addresses are not set."); + } + + // Get contract instances + const CrossChainBridgeSepolia = await ethers.getContractAt( + "LZCrossChainAdapterL1", + CrossChainBridgeEthereumAddress, + ); + const eIDArbitrumSepolia = 30110; //Arbitrum Mainnet eID + const eIDOptimismSepolia = 30111; //Optimism Mainnet eID + + // Set peer for OptimismSepolia + let tx = await CrossChainBridgeSepolia.connect(deployer).setPeer( + eIDOptimismSepolia, + zeroPadValue(CrossChainBridgeOptimismAddress, 32), + ); + await tx.wait(); + tx = await CrossChainBridgeSepolia.connect(deployer).setPeer( + eIDArbitrumSepolia, + zeroPadValue(CrossChainBridgeArbitrumAddress, 32), + ); + await tx.wait(); + console.log("Peers set successfully"); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/mainnet/set-peers-l2-arb.ts b/projects/bridge-lz/scripts/mainnet/set-peers-l2-arb.ts new file mode 100644 index 00000000..8ffe2982 --- /dev/null +++ b/projects/bridge-lz/scripts/mainnet/set-peers-l2-arb.ts @@ -0,0 +1,40 @@ +const { ethers } = require("hardhat"); +const fs = require("fs"); +const path = require("path"); +import { zeroPadValue } from "ethers"; + +async function main() { + const [deployer] = await ethers.getSigners(); + + const CrossChainBridgeEthereumAddress = + "0x1E0Bd0291165F789b794e9513Eb07a76849c1448"; //TODO! Insert LZCrossChainBridgeL1 address here + const CrossChainBridgeArbitrumAddress = + "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; //TODO! Insert LZCrossChainBridgeL2 Arbitrum address here + + if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeArbitrumAddress) { + throw new Error("CrossChainBridge addresses are not set."); + } + + // Get contract instance + const CrossChainBridgeOptimism = await ethers.getContractAt( + "LZCrossChainAdapterL2", + CrossChainBridgeArbitrumAddress, + ); + const eIdSepolia = 30101; //Ethereum Mainnet eID + + // Set peer for Ethereum Mainnet + await CrossChainBridgeOptimism.connect(deployer).setPeer( + eIdSepolia, + zeroPadValue(CrossChainBridgeEthereumAddress, 32), + ); + console.log( + `Bridge at address ${CrossChainBridgeArbitrumAddress} was set successfully with peer at address ${CrossChainBridgeEthereumAddress} at Ethereum`, + ); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/mainnet/set-peers-l2-opt.ts b/projects/bridge-lz/scripts/mainnet/set-peers-l2-opt.ts new file mode 100644 index 00000000..00af96b4 --- /dev/null +++ b/projects/bridge-lz/scripts/mainnet/set-peers-l2-opt.ts @@ -0,0 +1,40 @@ +const { ethers } = require("hardhat"); +const fs = require("fs"); +const path = require("path"); +import { zeroPadValue } from "ethers"; + +async function main() { + const [deployer] = await ethers.getSigners(); + + const CrossChainBridgeEthereumAddress = + "0x1E0Bd0291165F789b794e9513Eb07a76849c1448"; //TODO! Insert LZCrossChainBridgeL1 address here + const CrossChainBridgeOptimismAddress = + "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; //TODO! Insert LZCrossChainBridgeL2 Optimism address here + + if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeOptimismAddress) { + throw new Error("CrossChainBridge addresses are not set."); + } + + // Get contract instance + const CrossChainBridgeOptimism = await ethers.getContractAt( + "LZCrossChainAdapterL2", + CrossChainBridgeOptimismAddress, + ); + const eIdSepolia = 30101; //Ethereum Mainnet eID + + // Set peer for Ethereum Mainnet + await CrossChainBridgeOptimism.connect(deployer).setPeer( + eIdSepolia, + zeroPadValue(CrossChainBridgeEthereumAddress, 32), + ); + console.log( + `Bridge at address ${CrossChainBridgeOptimismAddress} was set successfully with peer at address ${CrossChainBridgeEthereumAddress} at Ethereum`, + ); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/send-assets-info-bridge.ts b/projects/bridge-lz/scripts/send-assets-info-bridge.ts new file mode 100644 index 00000000..6fe3b8e4 --- /dev/null +++ b/projects/bridge-lz/scripts/send-assets-info-bridge.ts @@ -0,0 +1,43 @@ +import { ethers } from "hardhat"; + +const LZ_CROSS_CHAIN_ADAPTER_L2_ADDRESS = "0x838a7fe80f1AF808Bc5ad0f9B1AC6e26B2475E17"; +const OPTIONS_CREATOR_ADDRESS = "0x8149Df043F5376aa0E5e34A18171Da7Cc0212cF4"; + +async function main() { + const [signer] = await ethers.getSigners(); + console.log("Using signer address:", await signer.getAddress()); + + const tokensAmount = ethers.parseUnits("524000001092000000", 0); + const blockTimestamp = Math.floor(Date.now() / 1000); + const ethAmount = 0; + + const LZCrossChainAdapterL2 = await ethers.getContractAt("LZCrossChainAdapterL2", LZ_CROSS_CHAIN_ADAPTER_L2_ADDRESS); + const OptionsCreator = await ethers.getContractAt("OptionsCreator", OPTIONS_CREATOR_ADDRESS); + + const payload = ethers.AbiCoder.defaultAbiCoder().encode( + ["uint256", "uint256", "uint256"], + [blockTimestamp, tokensAmount, ethAmount] + ); + console.log("Encoded payload:", payload); + + const gas = 300000; + const value = 0; + const options = await OptionsCreator.createLzReceiveOption(gas, value); + console.log("Created options:", options); + + console.log("Getting quote..."); + const msgValue = await LZCrossChainAdapterL2.quote(payload, options); + console.log(`Quote (msg.value): ${ethers.formatEther(msgValue)} ETH`); + + console.log("Calling sendDataL1..."); + const tx = await LZCrossChainAdapterL2.sendDataL1(payload, options, { value: msgValue }); + console.log("Transaction hash:", tx.hash); + + const receipt = await tx.wait(); + console.log("Transaction confirmed in block:", receipt.blockNumber); +} + +main().catch((error) => { + console.error("Error:", error); + process.exit(1); +}); diff --git a/projects/bridge-lz/scripts/set-chain-ids.ts b/projects/bridge-lz/scripts/set-chain-ids.ts new file mode 100644 index 00000000..408a49c3 --- /dev/null +++ b/projects/bridge-lz/scripts/set-chain-ids.ts @@ -0,0 +1,41 @@ +const { ethers } = require("hardhat"); + +const Options = require("@layerzerolabs/lz-v2-utilities").Options; +const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString(); + +async function main() { + const myOAppAddressA = "0x3f2dF8698b09c02Ea7aeBC5aC3E56a05afb870cf"; + const MyOAppA = await ethers.getContractAt("LZCrossChainBridge", myOAppAddressA); + + // Destination - Ethereum Sepolia, so we're setting its Chain ID + const chainId = 11155111; + //LZ Endpoint ID for Ethereum Sepolia + const eId = 40161; + + //LZ Endpoint ID for Optimism Sepolia + const chainIdOpt = 11155420; + const eIdOpt = 40232; + + + //LZ Endpoint ID for Arbitrum Sepolia + const chainIdArb = 421614; + const eIdArb = 40231; + + // let's set the eid and chainId + let txSetChainId = await MyOAppA.setChainIdFromEid(eId, chainId); + txSetChainId.wait(); + txSetChainId = await MyOAppA.setChainIdFromEid(eIdOpt, chainIdOpt); + txSetChainId.wait(); + txSetChainId = await MyOAppA.setChainIdFromEid(eIdArb, chainIdArb); + txSetChainId.wait(); + console.log("Chain IDs and eIDs set"); + + +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/setup-iov.ts b/projects/bridge-lz/scripts/setup-iov.ts new file mode 100644 index 00000000..7ab461dd --- /dev/null +++ b/projects/bridge-lz/scripts/setup-iov.ts @@ -0,0 +1,109 @@ +import { ethers, network } from "hardhat"; + +async function main() { + console.log("Setting up InceptionOmniVault..."); + + const networkName = network.name; + console.log(`Network: ${networkName}`); + + let INCEPTION_TOKEN_ADDRESS: string; + let CROSS_CHAIN_BRIDGE_ADDRESS_L2: string; + let IOV_ADDRESS: string; + let RATIO_FEED: string; + + switch (networkName) { + case "arbitrum": + IOV_ADDRESS = "0x7EEd6897D9F032AbccffD2f6AAFCfb59b24BD58E"; // TODO: Insert InceptionOmniVault address for Arbitrum here + INCEPTION_TOKEN_ADDRESS = "0x5A7a183B6B44Dc4EC2E3d2eF43F98C5152b1d76d"; + CROSS_CHAIN_BRIDGE_ADDRESS_L2 = + "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; // TODO: Insert LZCrossChainBridgeL2 address for Arbitrum here + RATIO_FEED = "0xfE715358368416E01d3A961D3a037b7359735d5e"; // Value from inception-service contracts-prod.yaml + break; + case "optimism": + IOV_ADDRESS = "0x7EEd6897D9F032AbccffD2f6AAFCfb59b24BD58E"; // TODO: Insert InceptionOmniVault address for Optimism here + INCEPTION_TOKEN_ADDRESS = "0x5A7a183B6B44Dc4EC2E3d2eF43F98C5152b1d76d"; + CROSS_CHAIN_BRIDGE_ADDRESS_L2 = + "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; // TODO: Insert LZCrossChainBridgeL2 address for Optimism here + RATIO_FEED = "0xfD07fD5EBEa6F24888a397997E262179Bf494336"; // Value from inception-service contracts-prod.yaml + break; + case "arbitrumSepolia": + IOV_ADDRESS = ""; // TODO: Insert InceptionOmniVault address for Arbitrum Sepolia here + INCEPTION_TOKEN_ADDRESS = ""; + CROSS_CHAIN_BRIDGE_ADDRESS_L2 = + "0xb7A8CA74cbfe313804c3D52663e9b0C0585B5C4e"; + RATIO_FEED = ""; // TODO: Insert IInceptionRatioFeed address here + break; + case "optimismSepolia": + IOV_ADDRESS = ""; // TODO: Insert InceptionOmniVault address for Optimism Sepolia here + INCEPTION_TOKEN_ADDRESS = "0xb1692ed9b08f8dd641f4109568ed6f471166c7e5"; + CROSS_CHAIN_BRIDGE_ADDRESS_L2 = + "0x838a7fe80f1AF808Bc5ad0f9B1AC6e26B2475E17"; + RATIO_FEED = ""; // TODO: Insert IInceptionRatioFeed address here + break; + default: + throw new Error(`Unsupported network: ${networkName}`); + } + + if (!IOV_ADDRESS) { + throw new Error("Please set the IOV_ADDRESS for the current network"); + } + + if (!RATIO_FEED) { + throw new Error("Please set the RATIO_FEED for the current network"); + } + + const operatorAddress = process.env.OPERATOR_ADDRESS; + if (!operatorAddress) { + throw new Error("Please set the OPERATOR_ADDRESS environment variable"); + } + + console.log("Deployment parameters:"); + console.log("Network:", networkName); + console.log("Operator Address:", operatorAddress); + console.log("Inception Token Address:", INCEPTION_TOKEN_ADDRESS); + console.log("Inception Omni Vault:", IOV_ADDRESS); + console.log("CrossChainBridge Address:", CROSS_CHAIN_BRIDGE_ADDRESS_L2); + console.log("Ratio Feed:", RATIO_FEED); + + console.log("Setting target receiver on LZCrossChainAdapterL2..."); + + const lzCrossChainAdapterL2 = await ethers.getContractAt( + "LZCrossChainAdapterL2", + CROSS_CHAIN_BRIDGE_ADDRESS_L2, + ); + + // const tx1 = await lzCrossChainAdapterL2.setTargetReceiver(IOV_ADDRESS); + // console.log("Waiting for target receiver transaction to complete..."); + // await tx1.wait(); + + console.log( + `Target receiver set successfully on LZCrossChainAdapterL2: ${IOV_ADDRESS}`, + ); + + console.log("Setting Ratio Feed on InceptionOmniVault..."); + + const inceptionOmniVaultABI = [ + "function setRatioFeed(address newRatioFeed) external", + ]; + const inceptionOmniVault = await ethers.getContractAt( + inceptionOmniVaultABI, + IOV_ADDRESS, + ); + + const tx2 = await inceptionOmniVault.setRatioFeed(RATIO_FEED); + console.log("Waiting for Ratio Feed transaction to complete..."); + await tx2.wait(); + + console.log( + `Ratio Feed set successfully on InceptionOmniVault: ${RATIO_FEED}`, + ); + + console.log("Deployment complete."); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error("Error deploying InceptionOmniVault:", error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/update_crosschain_adapter_l1.ts b/projects/bridge-lz/scripts/update_crosschain_adapter_l1.ts new file mode 100644 index 00000000..1e5c1dbc --- /dev/null +++ b/projects/bridge-lz/scripts/update_crosschain_adapter_l1.ts @@ -0,0 +1,40 @@ +import { ethers, network } from "hardhat"; + +async function main() { + console.log("Setting target receiver for CrossChainAdapterL1..."); + + const networkName = network.name; + console.log(`Network: ${networkName}`); + + let nativeRebalancerAddress = ""; + let crossChainBridgeAddress = ""; + + if (network.name === "mainnet") { + // TODO + nativeRebalancerAddress = ""; + crossChainBridgeAddress = ""; + } else if (network.name === "holesky") { + nativeRebalancerAddress = "0xd13469584C26c329D56176b243f0507f84Fb778A"; + crossChainBridgeAddress = "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E"; + } else { + throw new Error(`Unknown network: ${network.name}`); + } + console.log("NativeRebalancer address:", nativeRebalancerAddress); + console.log("crossChainBridge address:", crossChainBridgeAddress); + + const lzCrossChainAdapterL1 = await ethers.getContractAt("LZCrossChainAdapterL1", crossChainBridgeAddress); + + console.log(`Setting targetReceiver to NativeRebalancer address at ${nativeRebalancerAddress}`); + const tx = await lzCrossChainAdapterL1.setTargetReceiver(nativeRebalancerAddress); + + await tx.wait(); + console.log("targetReceiver set successfully in transaction:", tx.hash); + +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error("Error deploying InceptionOmniVault:", error); + process.exit(1); + }); diff --git a/projects/bridge-lz/scripts/upgrades/upgrade-cross-chain-adapter-l1.ts b/projects/bridge-lz/scripts/upgrades/upgrade-cross-chain-adapter-l1.ts new file mode 100644 index 00000000..50767255 --- /dev/null +++ b/projects/bridge-lz/scripts/upgrades/upgrade-cross-chain-adapter-l1.ts @@ -0,0 +1,52 @@ +import { ethers, upgrades, network } from "hardhat"; +import hre from "hardhat"; + +async function main() { + let proxyAddress: String; + + if (network.name === "mainnet") { + proxyAddress = "0x1E0Bd0291165F789b794e9513Eb07a76849c1448"; + } else if (network.name === "holesky") { + proxyAddress = "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E"; + } else { + throw new Error(`Unknown network: ${network.name}`); + } + + const LZCrossChainAdapterL1 = await ethers.getContractFactory( + "LZCrossChainAdapterL1", + ); + + const currentImplementationAddress = + await upgrades.erc1967.getImplementationAddress(proxyAddress); + console.log( + `Current implementation address before upgrade: ${currentImplementationAddress}`, + ); + + console.log(`Upgrading LZCrossChainAdapterL1 at address: ${proxyAddress}...`); + const upgradedContract = await upgrades.upgradeProxy( + proxyAddress, + LZCrossChainAdapterL1, + ); + + await upgradedContract.waitForDeployment(); + + const newImplementationAddress = + await upgrades.erc1967.getImplementationAddress(proxyAddress); + console.log( + `New implementation address after upgrade: ${newImplementationAddress}`, + ); + + console.log( + `Successfully upgraded CrossChainAdapterArbitrumL2. Proxy address remains: ${proxyAddress}`, + ); + + console.log(`Verifying new implementation on Etherscan...`); + await hre.run("verify:verify", { + address: newImplementationAddress, + }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/projects/bridge-lz/scripts/upgrades/upgrade-cross-chain-adapter-l2.ts b/projects/bridge-lz/scripts/upgrades/upgrade-cross-chain-adapter-l2.ts new file mode 100644 index 00000000..23606afe --- /dev/null +++ b/projects/bridge-lz/scripts/upgrades/upgrade-cross-chain-adapter-l2.ts @@ -0,0 +1,46 @@ +import { ethers, upgrades, network } from "hardhat"; +import hre from 'hardhat'; + +async function main() { + + let proxyAddress: String; + + if (network.name === "arbitrum") { + proxyAddress = "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; + } else if (network.name === "optimism") { + proxyAddress = "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; + } else if (network.name === "optimismSepolia") { + proxyAddress = "0x838a7fe80f1AF808Bc5ad0f9B1AC6e26B2475E17"; + } else if (network.name === "arbitrumSepolia") { + proxyAddress = ""; + throw new Error(`Not configured yet: ${network.name}`); + } + else { + throw new Error(`Unknown network: ${network.name}`); + } + + const CrossChainAdapterArbitrumL2 = await ethers.getContractFactory("LZCrossChainAdapterL2"); + + const currentImplementationAddress = await upgrades.erc1967.getImplementationAddress(proxyAddress); + console.log(`Current implementation address before upgrade: ${currentImplementationAddress}`); + + console.log(`Upgrading CrossChainAdapterArbitrumL2 at address: ${proxyAddress}...`); + const upgradedContract = await upgrades.upgradeProxy(proxyAddress, CrossChainAdapterArbitrumL2); + + await upgradedContract.waitForDeployment(); + + const newImplementationAddress = await upgrades.erc1967.getImplementationAddress(proxyAddress); + console.log(`New implementation address after upgrade: ${newImplementationAddress}`); + + console.log(`Successfully upgraded CrossChainAdapterArbitrumL2. Proxy address remains: ${proxyAddress}`); + + console.log(`Verifying new implementation on Etherscan...`); + await hre.run("verify:verify", { + address: newImplementationAddress, + }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/projects/bridge-lz/scripts/upgrades/upgrade-frax-lz-adapter.js b/projects/bridge-lz/scripts/upgrades/upgrade-frax-lz-adapter.js new file mode 100644 index 00000000..498eb86b --- /dev/null +++ b/projects/bridge-lz/scripts/upgrades/upgrade-frax-lz-adapter.js @@ -0,0 +1,26 @@ +// deplot proxy +const { ethers, upgrades } = require("hardhat"); + +const ADAPTER_ADDRESS = "0x3b0154Bb623A04f991294333bF07037bc2EBd054"; + +async function main() { + const [deployer] = await ethers.getSigners(); + + console.log("Deploying contracts with the account:", deployer.address); + const initBalance = await deployer.provider.getBalance(deployer.address); + console.log("Account balance:", initBalance.toString()); + + const adapterFactory = await hre.ethers.getContractFactory("FraxFerryLZCrossChainAdapterL2"); + await upgrades.upgradeProxy(ADAPTER_ADDRESS, adapterFactory, { + kind: "transparent", + }); + console.log("Frax LZ adapter upgraded"); +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); + diff --git a/projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL1.ts b/projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL1.ts new file mode 100644 index 00000000..c77ba6d7 --- /dev/null +++ b/projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL1.ts @@ -0,0 +1,70 @@ +import assert from 'assert'; +import { type DeployFunction } from 'hardhat-deploy/types'; +import fs from 'fs'; +import path from 'path'; + +const contractName = 'CrossChainAdapterOptimismL1'; + +const deploy: DeployFunction = async (hre) => { + const { getNamedAccounts, deployments, network } = hre; + const { deploy } = deployments; + const { deployer } = await getNamedAccounts(); + + assert(deployer, 'Missing named deployer account'); + + // Check if the network is 'sepolia' + if (network.name !== 'sepolia') { + throw new Error(`Deployment is only allowed on the 'sepolia' network. Current network: ${network.name}`); + } + + // Define the path to the checkpoint file + const checkpointFilePath = path.join(__dirname, '../deployment_checkpoint_sepolia.json'); + + // Check if the file exists, if not, create an empty JSON structure + let checkpointData = {}; + if (fs.existsSync(checkpointFilePath)) { + checkpointData = JSON.parse(fs.readFileSync(checkpointFilePath, 'utf8')); + } + + const rebalancer = checkpointData.Rebalancer; + const transactionStorage = checkpointData.TransactionStorage; + + if (!rebalancer || !transactionStorage) { + throw new Error('Missing Rebalancer or TransactionStorage address in deployment_checkpoint_sepolia.json'); + } + + console.log(`Network: ${network.name}`); + console.log(`Deployer and Operator: ${deployer}`); + console.log(`Rebalancer Address: ${rebalancer}`); + console.log(`TransactionStorage Address: ${transactionStorage}`); + + // Fetch the external LayerZero EndpointV2 deployment + const endpointV2Deployment = await hre.deployments.get('EndpointV2'); + + const operator = deployer; // Set deployer as operator + + const { address } = await deploy(contractName, { + from: deployer, + args: [ + endpointV2Deployment.address, // LayerZero's EndpointV2 address + deployer, // Delegate address (deployer as owner) + rebalancer, // Rebalancer address from JSON + transactionStorage, // Transaction storage address from JSON + operator, // Operator (deployer) + ], + log: true, + skipIfAlreadyDeployed: false, + }); + + console.log(`Deployed contract: ${contractName}, network: ${network.name}, address: ${address}`); + + // Write the new deployed address to deployment_checkpoint_sepolia.json + checkpointData.CrossChainAdapterOptimismL1 = address; + fs.writeFileSync(checkpointFilePath, JSON.stringify(checkpointData, null, 2), 'utf8'); + + console.log(`Updated deployment_checkpoint_sepolia.json with CrossChainAdapterOptimismL1: ${address}`); +}; + +deploy.tags = [contractName]; + +export default deploy; diff --git a/projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL2.ts b/projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL2.ts new file mode 100644 index 00000000..dec7bc31 --- /dev/null +++ b/projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL2.ts @@ -0,0 +1,64 @@ +import assert from 'assert'; +import { type DeployFunction } from 'hardhat-deploy/types'; +import fs from 'fs'; +import path from 'path'; + +const contractName = 'CrossChainAdapterOptimismL2'; + +const deploy: DeployFunction = async (hre) => { + const { getNamedAccounts, deployments, network } = hre; + const { deploy } = deployments; + const { deployer } = await getNamedAccounts(); + + assert(deployer, 'Missing named deployer account'); + + // Define the path to the checkpoint file + const checkpointFilePath = path.join(__dirname, '../deployment_checkpoint_optimism-sepolia.json'); + + // Check if the file exists, if not, throw an error + if (!fs.existsSync(checkpointFilePath)) { + throw new Error(`File not found: ${checkpointFilePath}`); + } + + // Read the JSON file to get rebalancer, transactionStorage, and vault addresses + const checkpointData = JSON.parse(fs.readFileSync(checkpointFilePath, 'utf8')); + + const vault = checkpointData.InceptionOmniVault; + + if (!vault) { + throw new Error('Missing InceptionOmniVault address in deployment_checkpoint_optimism_sepolia.json'); + } + + console.log(`Network: ${network.name}`); + console.log(`Deployer and Operator: ${deployer}`); + console.log(`Vault Address: ${vault}`); + + // Fetch the external LayerZero EndpointV2 deployment + const endpointV2Deployment = await hre.deployments.get('EndpointV2'); + + const operator = deployer; // Set deployer as operator + + const { address } = await deploy(contractName, { + from: deployer, + args: [ + endpointV2Deployment.address, // LayerZero's EndpointV2 address + deployer, // Delegate address (deployer as owner) + vault, // Vault address from JSON + operator, // Operator (deployer) + ], + log: true, + skipIfAlreadyDeployed: false, + }); + + console.log(`Deployed contract: ${contractName}, network: ${network.name}, address: ${address}`); + + // Write the new deployed address to deployment_checkpoint_optimism_sepolia.json + checkpointData.CrossChainAdapterOptimismL2 = address; + fs.writeFileSync(checkpointFilePath, JSON.stringify(checkpointData, null, 2), 'utf8'); + + console.log(`Updated deployment_checkpoint_optimism_sepolia.json with CrossChainAdapterOptimismL2: ${address}`); +}; + +deploy.tags = [contractName]; + +export default deploy; diff --git a/projects/bridge-lz/scripts/wasDeployment/MyOApp.ts b/projects/bridge-lz/scripts/wasDeployment/MyOApp.ts new file mode 100644 index 00000000..b3854fa9 --- /dev/null +++ b/projects/bridge-lz/scripts/wasDeployment/MyOApp.ts @@ -0,0 +1,53 @@ +import assert from 'assert' + +import { type DeployFunction } from 'hardhat-deploy/types' + +// TODO declare your contract name here +const contractName = 'MyOApp' + +const deploy: DeployFunction = async (hre) => { + const { getNamedAccounts, deployments } = hre + + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + assert(deployer, 'Missing named deployer account') + + console.log(`Network: ${hre.network.name}`) + console.log(`Deployer: ${deployer}`) + + // This is an external deployment pulled in from @layerzerolabs/lz-evm-sdk-v2 + // + // @layerzerolabs/toolbox-hardhat takes care of plugging in the external deployments + // from @layerzerolabs packages based on the configuration in your hardhat config + // + // For this to work correctly, your network config must define an eid property + // set to `EndpointId` as defined in @layerzerolabs/lz-definitions + // + // For example: + // + // networks: { + // fuji: { + // ... + // eid: EndpointId.AVALANCHE_V2_TESTNET + // } + // } + const endpointV2Deployment = await hre.deployments.get('EndpointV2') + + + const { address } = await deploy(contractName, { + from: deployer, + args: [ + endpointV2Deployment.address, // LayerZero's EndpointV2 address + deployer, // owner + ], + log: true, + skipIfAlreadyDeployed: false, + }) + + console.log(`Deployed contract: ${contractName}, network: ${hre.network.name}, address: ${address}`) +} + +deploy.tags = [contractName] + +export default deploy diff --git a/projects/bridge-lz/solhint.config.js b/projects/bridge-lz/solhint.config.js new file mode 100644 index 00000000..52efe629 --- /dev/null +++ b/projects/bridge-lz/solhint.config.js @@ -0,0 +1 @@ +module.exports = require('@layerzerolabs/solhint-config'); diff --git a/projects/bridge-lz/tsconfig.json b/projects/bridge-lz/tsconfig.json new file mode 100644 index 00000000..21d541fa --- /dev/null +++ b/projects/bridge-lz/tsconfig.json @@ -0,0 +1,14 @@ +{ + "exclude": ["node_modules"], + "include": ["deploy", "test", "tasks", "hardhat.config.ts"], + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "types": ["node", "mocha"] + } +} diff --git a/projects/bridge-lz/yarn.lock b/projects/bridge-lz/yarn.lock new file mode 100644 index 00000000..5e293064 --- /dev/null +++ b/projects/bridge-lz/yarn.lock @@ -0,0 +1,9799 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + +"@aragon/os@^4.4.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@aragon/os/-/os-4.4.0.tgz" + integrity sha512-EYyMj5pX0Qxu7axHAPe4hqwwDINDn+6ZZ4DqJP0tAKYKDmTxHcW8m/7DDctIM3uRqXr8HlYrNOGd6zE/hhHetQ== + dependencies: + "@aragon/truffle-config-v4" "^1.0.1" + homedir "^0.6.0" + mkdirp "^0.5.1" + truffle-flattener "^1.2.9" + +"@aragon/truffle-config-v4@^1.0.1": + version "1.2.0" + resolved "https://registry.npmjs.org/@aragon/truffle-config-v4/-/truffle-config-v4-1.2.0.tgz" + integrity sha512-eXxUpHr9D/VYLVsHzaPL4FTz4bCESGvnnHqsP2BB74B4ZlopoIVwdur9flxHIxw4ROoh6xGyrEnScw4zVD2ifw== + dependencies: + "@truffle/hdwallet-provider" "^1.0.0" + +"@arbitrum/nitro-contracts@^2.1.0": + version "2.1.1" + resolved "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-2.1.1.tgz" + integrity sha512-cA1JnwRkUT8p0ppDrrnYXU2gO4aLjV8P+a2jaHW7R602MKsIRqbae12MM8iNttRsK9ysKWZq5qrdWjvTVlqwvg== + dependencies: + "@offchainlabs/upgrade-executor" "1.1.0-beta.0" + "@openzeppelin/contracts" "4.5.0" + "@openzeppelin/contracts-upgradeable" "4.5.2" + patch-package "^6.4.7" + solady "0.0.182" + +"@aws-crypto/sha256-js@1.2.2": + version "1.2.2" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz" + integrity sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g== + dependencies: + "@aws-crypto/util" "^1.2.2" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + +"@aws-crypto/util@^1.2.2": + version "1.2.2" + resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz" + integrity sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg== + dependencies: + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/types@^3.1.0": + version "3.696.0" + resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.696.0.tgz" + integrity sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw== + dependencies: + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.25.9": + version "7.26.2" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.9": + version "7.26.2" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz" + integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg== + +"@babel/generator@^7.25.9": + version "7.26.2" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz" + integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw== + dependencies: + "@babel/parser" "^7.26.2" + "@babel/types" "^7.26.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.22.6": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== + dependencies: + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.2", "@babel/helper-define-polyfill-provider@^0.6.3": + version "0.6.3" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz" + integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/parser@^7.25.9", "@babel/parser@^7.26.2": + version "7.26.2" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz" + integrity sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ== + dependencies: + "@babel/types" "^7.26.0" + +"@babel/plugin-transform-runtime@^7.5.5": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz" + integrity sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" + semver "^6.3.1" + +"@babel/runtime@^7.5.5": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/traverse@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz" + integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/generator" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/template" "^7.25.9" + "@babel/types" "^7.25.9" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.25.9", "@babel/types@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz" + integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@bytecodealliance/preview2-shim@0.17.0": + version "0.17.0" + resolved "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz" + integrity sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ== + +"@colors/colors@^1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" + integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@colors/colors@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" + integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@dabh/diagnostics@^2.0.2": + version "2.0.3" + resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.1" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": + version "4.12.1" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== + +"@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.6.4", "@ethereumjs/common@2.6.5": + version "2.6.5" + resolved "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@3.5.2": + version "3.5.2" + resolved "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + dependencies: + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.7", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0", "@ethersproject/abi@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" + 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" + +"@ethersproject/abstract-provider@^5.7.0", "@ethersproject/abstract-provider@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@^5.7.0", "@ethersproject/abstract-signer@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" + 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" + +"@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0", "@ethersproject/address@~5.7.0", "@ethersproject/address@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" + 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" + +"@ethersproject/address@5.6.1": + version "5.6.1" + resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz" + integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp" "^5.6.1" + +"@ethersproject/base64@^5.7.0", "@ethersproject/base64@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@^5.7.0", "@ethersproject/basex@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@^5.6.2", "@ethersproject/bignumber@^5.7.0", "@ethersproject/bignumber@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@^5.6.1", "@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@^5.7.0", "@ethersproject/constants@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@^5.7.0", "@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz" + 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" + +"@ethersproject/hash@^5.7.0", "@ethersproject/hash@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" + 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" + +"@ethersproject/hdnode@^5.7.0", "@ethersproject/hdnode@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz" + 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" + +"@ethersproject/json-wallets@^5.7.0", "@ethersproject/json-wallets@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz" + 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" + +"@ethersproject/keccak256@^5.6.1", "@ethersproject/keccak256@^5.7.0", "@ethersproject/keccak256@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.7.0", "@ethersproject/logger@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@^5.7.0", "@ethersproject/networks@5.7.1": + version "5.7.1" + resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@^5.7.0", "@ethersproject/pbkdf2@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@^5.7.0", "@ethersproject/properties@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@^5.4.7", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@^5.7.2", "@ethersproject/providers@5.7.2": + version "5.7.2" + resolved "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz" + 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.0" + "@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.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@^5.7.0", "@ethersproject/random@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@^5.6.1", "@ethersproject/rlp@^5.7.0", "@ethersproject/rlp@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@^5.7.0", "@ethersproject/sha2@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@^5.7.0", "@ethersproject/signing-key@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" + 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" + +"@ethersproject/solidity@^5.7.0", "@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@^5.7.0", "@ethersproject/strings@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" + 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" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@^5.7.0", "@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz" + 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" + +"@ethersproject/web@^5.7.0", "@ethersproject/web@5.7.1": + version "5.7.1" + resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" + 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" + +"@ethersproject/wordlists@^5.7.0", "@ethersproject/wordlists@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz" + 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" + +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@layerzerolabs/devtools-evm-hardhat@~1.2.0": + version "1.2.3" + resolved "https://registry.npmjs.org/@layerzerolabs/devtools-evm-hardhat/-/devtools-evm-hardhat-1.2.3.tgz" + integrity sha512-kIVMvLb1BZ+7rcPjjfl3iDnrszLfH+RnD9H4PWsbazqEOWizNQnO0+u9Aj9/KMTyly6hl5e5gZINZoTwkrPi+w== + dependencies: + "@layerzerolabs/export-deployments" "~0.0.12" + "@safe-global/protocol-kit" "^1.3.0" + micro-memoize "~4.1.2" + p-memoize "~4.0.4" + zod "^3.22.4" + +"@layerzerolabs/devtools-evm-hardhat@1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@layerzerolabs/devtools-evm-hardhat/-/devtools-evm-hardhat-1.0.0.tgz" + integrity sha512-/MMT/PxQPpX3AGEiaXR9qjC27VSb7dXAocDb2KbY3ntqjr5z4hxiRy/Gv3sTFVrm89BO+TF9yQ/nArBJ4dZ8GQ== + dependencies: + "@layerzerolabs/export-deployments" "~0.0.10" + "@safe-global/protocol-kit" "^1.3.0" + micro-memoize "~4.1.2" + p-memoize "~4.0.4" + zod "^3.22.4" + +"@layerzerolabs/devtools-evm@~0.4.2": + version "0.4.2" + resolved "https://registry.npmjs.org/@layerzerolabs/devtools-evm/-/devtools-evm-0.4.2.tgz" + integrity sha512-/X9Bsvbi9SyaPeL7dkXClnKwsE1roU+OCtOo1Sg/dtM3+xQOa1MBGycAYjuLPg8yV1mgxL7yYKniAsGnsZ7IeQ== + dependencies: + "@safe-global/api-kit" "^1.3.0" + "@safe-global/protocol-kit" "^1.3.0" + ethers "^5.7.2" + p-memoize "~4.0.4" + +"@layerzerolabs/devtools@~0.3.25": + version "0.3.29" + resolved "https://registry.npmjs.org/@layerzerolabs/devtools/-/devtools-0.3.29.tgz" + integrity sha512-zOWRl7NL67gqGb75arPuseoTxvgom6RgLZknciYwTwnZL8jY5Ea9czCh+rZMcKMAgsZNa6YHu3nzJOitEVHJEQ== + dependencies: + bs58 "^6.0.0" + exponential-backoff "~3.1.1" + js-yaml "~4.1.0" + +"@layerzerolabs/eslint-config-next@~2.3.39": + version "2.3.44" + resolved "https://registry.npmjs.org/@layerzerolabs/eslint-config-next/-/eslint-config-next-2.3.44.tgz" + integrity sha512-WlBSy47LGPILdrNgzPiRtQf/hAY62IN37ncUsQwcr8T7cyX1HZREx2qljuXpvduLDAKn5otsm0XIqHuCRUHEFg== + dependencies: + "@typescript-eslint/eslint-plugin" "^7.5.0" + "@typescript-eslint/parser" "^7.5.0" + eslint "^8.55.0" + eslint-config-prettier "^9.1.0" + eslint-import-resolver-typescript "^3.6.1" + eslint-plugin-autofix "^2.0.0" + eslint-plugin-compat "^4.2.0" + eslint-plugin-import "^2.29.0" + eslint-plugin-prettier "^5.0.1" + eslint-plugin-unused-imports "^3.2.0" + prettier "^3.2.4" + +"@layerzerolabs/evm-sdks-core@^2.3.44": + version "2.3.44" + resolved "https://registry.npmjs.org/@layerzerolabs/evm-sdks-core/-/evm-sdks-core-2.3.44.tgz" + integrity sha512-T0XDKtoox8qDrlzo6H+fpFRNj2wlh8uKH5QN4RvwK1DShkL+3fmnA52LWPfI6jX17ONN9M8lrjYhIfo1mQKy1w== + dependencies: + ethers "^5.7.2" + +"@layerzerolabs/export-deployments@~0.0.10", "@layerzerolabs/export-deployments@~0.0.12": + version "0.0.14" + resolved "https://registry.npmjs.org/@layerzerolabs/export-deployments/-/export-deployments-0.0.14.tgz" + integrity sha512-OBwqci1LZGCq9ZSYfB4nHGZ3QKNVjr+yOUQB4M4gEpPrwaJGLOuOxQNLSEkRWPD8si22Nk48Elbrku8M1Ke3Ow== + dependencies: + typescript "^5.4.4" + +"@layerzerolabs/io-devtools@~0.1.12": + version "0.1.14" + resolved "https://registry.npmjs.org/@layerzerolabs/io-devtools/-/io-devtools-0.1.14.tgz" + integrity sha512-ENiiwow9bu51MiJ0jxwhUchmimIuHevait8WTP4YtuSjRcWkT7g/8F6z3mTJs4BsCIVNOHdYWBFGgcB2IDTqdQ== + dependencies: + chalk "^4.1.2" + logform "^2.6.0" + prompts "^2.4.2" + table "~6.8.2" + winston "^3.11.0" + +"@layerzerolabs/lz-definitions@^2.3.39": + version "2.3.44" + resolved "https://registry.npmjs.org/@layerzerolabs/lz-definitions/-/lz-definitions-2.3.44.tgz" + integrity sha512-8dH7rbHCVG+GDOizCb4RrtHEFHr5wud9Lf9Kxs/MLThgu7VWcXvy78KYHMQ4S7AXoFnyzMPaiEU/LS8kRWfhag== + dependencies: + tiny-invariant "^1.3.1" + +"@layerzerolabs/lz-evm-messagelib-v2@^2.3.39": + version "2.3.44" + resolved "https://registry.npmjs.org/@layerzerolabs/lz-evm-messagelib-v2/-/lz-evm-messagelib-v2-2.3.44.tgz" + integrity sha512-2HZMjV0KZH0e3W2KL/H8HvE3I7QMJw1no46IQ5LpGSvxIm5Ri45tnQAynbmEbRyKXrRSP3Brkvkc2U7VrfZ/Cg== + +"@layerzerolabs/lz-evm-protocol-v2@^2.3.39": + version "2.3.44" + resolved "https://registry.npmjs.org/@layerzerolabs/lz-evm-protocol-v2/-/lz-evm-protocol-v2-2.3.44.tgz" + integrity sha512-oNtwl4HGCogFVOr45T3FfrkB0/CRW2eGAEScBw/FY/6mlncnS4dqlvrCJ3SFlK17cu1w9q0ztD3NzS9sUrb7vw== + +"@layerzerolabs/lz-evm-sdk-v1@^2.3.39": + version "2.3.44" + resolved "https://registry.npmjs.org/@layerzerolabs/lz-evm-sdk-v1/-/lz-evm-sdk-v1-2.3.44.tgz" + integrity sha512-jHnFqSqRQGD11TuPcpwCSY87FfVqGTdZj/1xFUTdW7r/zyZYTTr2pE/wZG5qWNZrO5VkPqgp2ttaZC6UM87+0w== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/providers" "^5.7.0" + "@layerzerolabs/evm-sdks-core" "^2.3.44" + ethers "^5.7.2" + +"@layerzerolabs/lz-evm-sdk-v2@^2.3.39": + version "2.3.44" + resolved "https://registry.npmjs.org/@layerzerolabs/lz-evm-sdk-v2/-/lz-evm-sdk-v2-2.3.44.tgz" + integrity sha512-j99rAzalyaYx3sDn06Dfc7bLsQfLCRbx3qhgIhBxOfe9T9bYKRXV6UAD+dHFpwdFOU0UxioQKosKCGgIwSNKAw== + dependencies: + "@layerzerolabs/evm-sdks-core" "^2.3.44" + ethers "^5.7.2" + +"@layerzerolabs/lz-evm-v1-0.7@^2.3.39": + version "2.3.44" + resolved "https://registry.npmjs.org/@layerzerolabs/lz-evm-v1-0.7/-/lz-evm-v1-0.7-2.3.44.tgz" + integrity sha512-gxPUv5yk5TLy4Rp4KwFqiPHGpVOPMtnwUi+LvRysnGgkqopOJRCzzvWqEv6M2YMUAsof+Vmr3UYWxKcilvv97g== + +"@layerzerolabs/lz-v2-utilities@^2.3.39": + version "2.3.44" + resolved "https://registry.npmjs.org/@layerzerolabs/lz-v2-utilities/-/lz-v2-utilities-2.3.44.tgz" + integrity sha512-0p7tdJCf6BSmN38tAnO7WyOoC84NDTCQt1MqPBomXTyIux1RLpkS82jcxv92+E+1LNulhHIx5W62gaKKx27B2A== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/solidity" "^5.7.0" + bs58 "^5.0.0" + tiny-invariant "^1.3.1" + +"@layerzerolabs/lz-v2-utilities@^3.0.7": + version "3.0.19" + resolved "https://registry.npmjs.org/@layerzerolabs/lz-v2-utilities/-/lz-v2-utilities-3.0.19.tgz" + integrity sha512-V4b3rahsXylonyzTHUAAmtcQ6qCg8+3Oyqjrr30hUr6wzUqJ6Uo0jOR9/v3bWVNG9jlbQqPgVXahyoRL98mCsw== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/solidity" "^5.7.0" + bs58 "^5.0.0" + tiny-invariant "^1.3.1" + +"@layerzerolabs/oapp-evm@^0.0.4": + version "0.0.4" + resolved "https://registry.npmjs.org/@layerzerolabs/oapp-evm/-/oapp-evm-0.0.4.tgz" + integrity sha512-h0papPd9mQAPsWoQuzZk3dIcLWLrJ8tnDNPg7Hn8aa+v7HPY1lo6Zmyn3t7RmzfKnvrjnjKWDTbX2zgesu4hYg== + dependencies: + ethers "^5.7.2" + +"@layerzerolabs/oft-evm@^0.1.0": + version "0.1.0" + resolved "https://registry.npmjs.org/@layerzerolabs/oft-evm/-/oft-evm-0.1.0.tgz" + integrity sha512-8LiotgJjbQN+wexOtpUPh2vgYDgec2ac0ypKKbBIE2kt1DWAxvKxI8nGuE6RRjBnvvMS3qNGmJQFxzwcOKHq+g== + +"@layerzerolabs/prettier-config-next@^2.3.39": + version "2.3.44" + resolved "https://registry.npmjs.org/@layerzerolabs/prettier-config-next/-/prettier-config-next-2.3.44.tgz" + integrity sha512-mIsxKLaelXHXXXvMEAE6Jc8IVydra0PesHquHYwvxFKwDhMhzfrnoRLLzbgCX/Zi1q0GGET/oMAKJTs6OWFPxQ== + dependencies: + prettier "^3.2.4" + prettier-plugin-packagejson "^2.4.7" + prettier-plugin-solidity "^1.2.0" + +"@layerzerolabs/protocol-devtools-evm@~1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@layerzerolabs/protocol-devtools-evm/-/protocol-devtools-evm-1.2.1.tgz" + integrity sha512-VyjpO4LJ+eiszxImXWst6lfJQNm0dv7XAf8m7vI6ZJk8Tg48QswBYoNZwlDDLBvMWv3vz+uf5HHn1AspVModyA== + dependencies: + p-memoize "~4.0.4" + +"@layerzerolabs/protocol-devtools@~0.4.3": + version "0.4.3" + resolved "https://registry.npmjs.org/@layerzerolabs/protocol-devtools/-/protocol-devtools-0.4.3.tgz" + integrity sha512-72qMcXw99wpe3v6qyh6ynFW66U6rnYuAzKXKz6R7q5JdYI/sAbnVNxuANq7ON0hffs3d24ea6qX4f6T+Lo6zJQ== + +"@layerzerolabs/solhint-config@^2.3.39": + version "2.3.44" + resolved "https://registry.npmjs.org/@layerzerolabs/solhint-config/-/solhint-config-2.3.44.tgz" + integrity sha512-1FnAwiV6FNH2KAcVWd36u7xthcs4+HI6BvU8BLp8boxEppYylxm1KFCcWSyHij9Ct5bUScKTPI6jwks/FzTU3A== + dependencies: + solhint "^4.0.0" + +"@layerzerolabs/test-devtools-evm-hardhat@~0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@layerzerolabs/test-devtools-evm-hardhat/-/test-devtools-evm-hardhat-0.3.0.tgz" + integrity sha512-776SF+Rp6+8PPMjl5WYglgfas6IyqZ2g7dU73seQC9VaPfbM+6XORtOCLVUxl6Hrp43edAI0dZuIm6xWhVFiYQ== + +"@layerzerolabs/toolbox-hardhat@~0.4.0": + version "0.4.0" + resolved "https://registry.npmjs.org/@layerzerolabs/toolbox-hardhat/-/toolbox-hardhat-0.4.0.tgz" + integrity sha512-WTc22nlEX4HwBUSvsVA/RzkZKp4wkY0f9k8m/NKXY7BrikdpilkWXJ+jgE1hG7tPY55bKd6CNHm41P5bTqIh4w== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/address" "~5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@layerzerolabs/devtools" "~0.3.25" + "@layerzerolabs/devtools-evm" "~0.4.2" + "@layerzerolabs/devtools-evm-hardhat" "~1.2.0" + "@layerzerolabs/io-devtools" "~0.1.12" + "@layerzerolabs/lz-definitions" "^2.3.39" + "@layerzerolabs/lz-evm-sdk-v1" "^2.3.39" + "@layerzerolabs/lz-evm-sdk-v2" "^2.3.39" + "@layerzerolabs/lz-v2-utilities" "^2.3.39" + "@layerzerolabs/protocol-devtools" "~0.4.3" + "@layerzerolabs/protocol-devtools-evm" "~1.2.1" + "@layerzerolabs/test-devtools-evm-hardhat" "~0.3.0" + "@layerzerolabs/ua-devtools" "~1.0.5" + "@layerzerolabs/ua-devtools-evm" "~3.0.1" + "@layerzerolabs/ua-devtools-evm-hardhat" "~4.0.0" + fp-ts "^2.16.2" + ink "^3.2.0" + ink-gradient "^2.0.0" + ink-table "^3.1.0" + react "^17.0.2" + yoga-layout-prebuilt "^1.10.0" + zod "^3.22.4" + +"@layerzerolabs/ua-devtools-evm-hardhat@~4.0.0": + version "4.0.2" + resolved "https://registry.npmjs.org/@layerzerolabs/ua-devtools-evm-hardhat/-/ua-devtools-evm-hardhat-4.0.2.tgz" + integrity sha512-1ePEYl5j27Rw5M799PXTjDkzXdV9zHOjHP8Adb/pKVq4u4yVhLFuUbOUEprTkrRBvOfK/HfIPZT0t7L32tthQQ== + dependencies: + p-memoize "~4.0.4" + typescript "^5.4.4" + +"@layerzerolabs/ua-devtools-evm@~3.0.1": + version "3.0.1" + resolved "https://registry.npmjs.org/@layerzerolabs/ua-devtools-evm/-/ua-devtools-evm-3.0.1.tgz" + integrity sha512-r/Voc1vmB9OEXc18sA/7prQdmZOqO7eR2/8CeiH7T3yCSA2vjjgByn2wxbmYy828gIw8wcx7GEky5F4gpvRnow== + dependencies: + p-memoize "~4.0.4" + +"@layerzerolabs/ua-devtools@~1.0.5": + version "1.0.6" + resolved "https://registry.npmjs.org/@layerzerolabs/ua-devtools/-/ua-devtools-1.0.6.tgz" + integrity sha512-PP6Alf5VoQA+tiQJybe0VZ6Ol/HzoPE8tIFp6BE/PyEallLwkO3KEaYKv1vfA24wFaOuEdzfurIrP3AmIrrY8Q== + +"@mdn/browser-compat-data@^5.2.34", "@mdn/browser-compat-data@^5.3.13": + version "5.6.19" + resolved "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.6.19.tgz" + integrity sha512-nov43xmgYccY9ePMQfqPD29ASOKbOhn3iOJxA5reOfC3wLbEM5an8Sn6A3Th1TuD3XfXc0hjrFQYbJ3qhyPhhQ== + +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@noble/curves@~1.4.0": + version "1.4.2" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== + dependencies: + "@noble/hashes" "1.4.0" + +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/curves@1.4.2": + version "1.4.2" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== + dependencies: + "@noble/hashes" "1.4.0" + +"@noble/hashes@^1.4.0": + version "1.6.1" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz" + integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== + +"@noble/hashes@~1.2.0", "@noble/hashes@1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@~1.4.0", "@noble/hashes@1.4.0": + version "1.4.0" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/secp256k1@~1.7.0", "@noble/secp256k1@1.7.1": + version "1.7.1" + resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nolyfill/is-core-module@1.0.39": + version "1.0.39" + resolved "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz" + integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== + +"@nomicfoundation/edr-darwin-arm64@0.6.5": + version "0.6.5" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.5.tgz" + integrity sha512-A9zCCbbNxBpLgjS1kEJSpqxIvGGAX4cYbpDYCU2f3jVqOwaZ/NU761y1SvuCRVpOwhoCXqByN9b7HPpHi0L4hw== + +"@nomicfoundation/edr-darwin-x64@0.6.5": + version "0.6.5" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.5.tgz" + integrity sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w== + +"@nomicfoundation/edr-linux-arm64-gnu@0.6.5": + version "0.6.5" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.5.tgz" + integrity sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A== + +"@nomicfoundation/edr-linux-arm64-musl@0.6.5": + version "0.6.5" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.5.tgz" + integrity sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ== + +"@nomicfoundation/edr-linux-x64-gnu@0.6.5": + version "0.6.5" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.5.tgz" + integrity sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg== + +"@nomicfoundation/edr-linux-x64-musl@0.6.5": + version "0.6.5" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.5.tgz" + integrity sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A== + +"@nomicfoundation/edr-win32-x64-msvc@0.6.5": + version "0.6.5" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.5.tgz" + integrity sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A== + +"@nomicfoundation/edr@^0.6.4": + version "0.6.5" + resolved "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.6.5.tgz" + integrity sha512-tAqMslLP+/2b2sZP4qe9AuGxG3OkQ5gGgHE4isUuq6dUVjwCRPFhAOhpdFl+OjY5P3yEv3hmq9HjUGRa2VNjng== + dependencies: + "@nomicfoundation/edr-darwin-arm64" "0.6.5" + "@nomicfoundation/edr-darwin-x64" "0.6.5" + "@nomicfoundation/edr-linux-arm64-gnu" "0.6.5" + "@nomicfoundation/edr-linux-arm64-musl" "0.6.5" + "@nomicfoundation/edr-linux-x64-gnu" "0.6.5" + "@nomicfoundation/edr-linux-x64-musl" "0.6.5" + "@nomicfoundation/edr-win32-x64-msvc" "0.6.5" + +"@nomicfoundation/ethereumjs-common@4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz" + integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.4" + +"@nomicfoundation/ethereumjs-rlp@5.0.4": + version "5.0.4" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz" + integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== + +"@nomicfoundation/ethereumjs-tx@5.0.4": + version "5.0.4" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz" + integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@9.0.4": + version "9.0.4" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz" + integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/hardhat-chai-matchers@^2.0.0": + version "2.0.8" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.8.tgz" + integrity sha512-Z5PiCXH4xhNLASROlSUOADfhfpfhYO6D7Hn9xp8PddmHey0jq704cr6kfU8TRrQ4PUZbpfsZadPj+pCfZdjPIg== + dependencies: + "@types/chai-as-promised" "^7.1.3" + chai-as-promised "^7.1.1" + deep-eql "^4.0.1" + ordinal "^1.0.3" + +"@nomicfoundation/hardhat-ethers@^3.0.0": + version "3.0.8" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz" + integrity sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA== + dependencies: + debug "^4.1.1" + lodash.isequal "^4.5.0" + +"@nomicfoundation/hardhat-ignition-ethers@^0.15.0": + version "0.15.8" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.8.tgz" + integrity sha512-5Ev8cXBKgqqOsFXxWe8iijsRabWGd/Vclx3SC903KeKVePdssVsZcYTtRNRcIwRcPJ0RIKJPIZz7MNDo64l3+w== + +"@nomicfoundation/hardhat-ignition@^0.15.0": + version "0.15.8" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.8.tgz" + integrity sha512-TN8TFQokcd7VyqGfbXO+KS8Q4K/gmsOFlv8dPnt/N596AncgV2Igxh5C3O+KVez11PDHNqoj1JzcDzzNVHrIRw== + dependencies: + "@nomicfoundation/ignition-core" "^0.15.8" + "@nomicfoundation/ignition-ui" "^0.15.8" + chalk "^4.0.0" + debug "^4.3.2" + fs-extra "^10.0.0" + json5 "^2.2.3" + prompts "^2.4.2" + +"@nomicfoundation/hardhat-network-helpers@^1.0.0": + version "1.0.12" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.12.tgz" + integrity sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA== + dependencies: + ethereumjs-util "^7.1.4" + +"@nomicfoundation/hardhat-toolbox@^5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-5.0.0.tgz" + integrity sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ== + +"@nomicfoundation/hardhat-verify@^2.0.11": + version "2.0.12" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.12.tgz" + integrity sha512-Lg3Nu7DCXASQRVI/YysjuAX2z8jwOCbS0w5tz2HalWGSTZThqA0v9N0v0psHbKNqzPJa8bNOeapIVSziyJTnAg== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + debug "^4.1.1" + lodash.clonedeep "^4.5.0" + picocolors "^1.1.0" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" + +"@nomicfoundation/ignition-core@^0.15.8": + version "0.15.8" + resolved "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.8.tgz" + integrity sha512-U+CmTjKU9uwvh7qIabqboy/K/sDoClDgpsFRHoFvAj87DPDkXYb/mZBSkXPTU1wxTxrW6GTFE4lG3e7LAyF+kw== + dependencies: + "@ethersproject/address" "5.6.1" + "@nomicfoundation/solidity-analyzer" "^0.1.1" + cbor "^9.0.0" + debug "^4.3.2" + ethers "^6.7.0" + fs-extra "^10.0.0" + immer "10.0.2" + lodash "4.17.21" + ndjson "2.0.0" + +"@nomicfoundation/ignition-ui@^0.15.8": + version "0.15.8" + resolved "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.8.tgz" + integrity sha512-VUD5MsWrrv7E2P0AJO01pV8w8m66Du0uwBKXM0oUV5DRIzqm6eYHt9eCDb1KBINDpiFxOQiuyWQMdeKxgPp3qw== + +"@nomicfoundation/slang@^0.18.3": + version "0.18.3" + resolved "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.18.3.tgz" + integrity sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ== + dependencies: + "@bytecodealliance/preview2-shim" "0.17.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz" + integrity sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz" + integrity sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz" + integrity sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz" + integrity sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz" + integrity sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz" + integrity sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz" + integrity sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA== + +"@nomicfoundation/solidity-analyzer@^0.1.0", "@nomicfoundation/solidity-analyzer@^0.1.1": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz" + integrity sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.2" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.2" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.2" + +"@nomiclabs/hardhat-etherscan@^3.1.8": + version "3.1.8" + resolved "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.8.tgz" + integrity sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + chalk "^2.4.2" + debug "^4.1.1" + fs-extra "^7.0.1" + lodash "^4.17.11" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" + +"@offchainlabs/upgrade-executor@1.1.0-beta.0": + version "1.1.0-beta.0" + resolved "https://registry.npmjs.org/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz" + integrity sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw== + dependencies: + "@openzeppelin/contracts" "4.7.3" + "@openzeppelin/contracts-upgradeable" "4.7.3" + +"@openzeppelin/contracts-upgradeable@^5.1.0": + version "5.1.0" + resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.1.0.tgz" + integrity sha512-AIElwP5Ck+cslNE+Hkemf5SxjJoF4wBvvjxc27Rp+9jaPs/CLIaUBMYe1FNzhdiN0cYuwGRmYaRHmmntuiju4Q== + +"@openzeppelin/contracts-upgradeable@4.5.2": + version "4.5.2" + resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz" + integrity sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA== + +"@openzeppelin/contracts-upgradeable@4.7.3": + version "4.7.3" + resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz" + integrity sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A== + +"@openzeppelin/contracts@^5.1.0": + version "5.1.0" + resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.1.0.tgz" + integrity sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA== + +"@openzeppelin/contracts@4.5.0": + version "4.5.0" + resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.5.0.tgz" + integrity sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA== + +"@openzeppelin/contracts@4.7.3": + version "4.7.3" + resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz" + integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== + +"@openzeppelin/defender-sdk-base-client@^1.14.4", "@openzeppelin/defender-sdk-base-client@^1.15.2": + version "1.15.2" + resolved "https://registry.npmjs.org/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.15.2.tgz" + integrity sha512-N3ZTeH8TXyklL7yNPMLUv0dxQwT78DTkOEDhzMS2/QE2FxbXrclSseoeeXxl6UYI61RBtZKn+okbSsbwiB5QWQ== + dependencies: + amazon-cognito-identity-js "^6.3.6" + async-retry "^1.3.3" + +"@openzeppelin/defender-sdk-deploy-client@^1.14.4": + version "1.15.2" + resolved "https://registry.npmjs.org/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.15.2.tgz" + integrity sha512-zspzMqh+OC8arXAkgBqTUDVO+NfCkt54UrsmQHbA3UAjr5TiDXKycBKU5ORb01hE+2gAmoPwEpDW9uS2VLg33A== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^1.15.2" + axios "^1.7.2" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-network-client@^1.14.4": + version "1.15.2" + resolved "https://registry.npmjs.org/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-1.15.2.tgz" + integrity sha512-9r9pegc1aR7xzP9fmj1zvkk0OXMRJE10JabxxiJzAQQgmNXDeTGI6W5bFgrNJfxzcImNGqddJ3K4weKdLyL21A== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^1.15.2" + axios "^1.7.2" + lodash "^4.17.21" + +"@openzeppelin/hardhat-upgrades@^3.5.0": + version "3.6.0" + resolved "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.6.0.tgz" + integrity sha512-RuVuCciCfFOqCyKSJ2D4Zffp3hxhvXTn16JzTlD9cx3A7V/2d3JA75tpRHD7RVPic+dcSFIf+BZRWOHuhc2ayg== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^1.14.4" + "@openzeppelin/defender-sdk-deploy-client" "^1.14.4" + "@openzeppelin/defender-sdk-network-client" "^1.14.4" + "@openzeppelin/upgrades-core" "^1.41.0" + chalk "^4.1.0" + debug "^4.1.1" + ethereumjs-util "^7.1.5" + proper-lockfile "^4.1.1" + undici "^6.11.1" + +"@openzeppelin/upgrades-core@^1.41.0": + version "1.41.0" + resolved "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.41.0.tgz" + integrity sha512-+oryinqZnxkiZvg7bWqWX4Ki/CNwVUZEqC6Elpi5PQoahpL3/6Sq9xjIozD5AiI2O61h8JHQ+A//5NtczyavJw== + dependencies: + "@nomicfoundation/slang" "^0.18.3" + cbor "^9.0.0" + chalk "^4.1.0" + compare-versions "^6.0.0" + debug "^4.1.1" + ethereumjs-util "^7.0.3" + minimatch "^9.0.5" + minimist "^1.2.7" + proper-lockfile "^4.1.1" + solidity-ast "^0.4.51" + +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + +"@pnpm/config.env-replace@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz" + integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== + +"@pnpm/network.ca-file@^1.0.1": + version "1.0.2" + resolved "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== + dependencies: + graceful-fs "4.2.10" + +"@pnpm/npm-conf@^2.1.0": + version "2.3.1" + resolved "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz" + integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== + dependencies: + "@pnpm/config.env-replace" "^1.1.0" + "@pnpm/network.ca-file" "^1.0.1" + config-chain "^1.1.11" + +"@resolver-engine/core@^0.2.1": + version "0.2.1" + resolved "https://registry.npmjs.org/@resolver-engine/core/-/core-0.2.1.tgz" + integrity sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A== + dependencies: + debug "^3.1.0" + request "^2.85.0" + +"@resolver-engine/fs@^0.2.1": + version "0.2.1" + resolved "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.2.1.tgz" + integrity sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg== + dependencies: + "@resolver-engine/core" "^0.2.1" + debug "^3.1.0" + +"@resolver-engine/imports-fs@^0.2.2": + version "0.2.2" + resolved "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.2.2.tgz" + integrity sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ== + dependencies: + "@resolver-engine/fs" "^0.2.1" + "@resolver-engine/imports" "^0.2.2" + debug "^3.1.0" + +"@resolver-engine/imports@^0.2.2": + version "0.2.2" + resolved "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.2.2.tgz" + integrity sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg== + dependencies: + "@resolver-engine/core" "^0.2.1" + debug "^3.1.0" + hosted-git-info "^2.6.0" + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + +"@safe-global/api-kit@^1.3.0": + version "1.3.1" + resolved "https://registry.npmjs.org/@safe-global/api-kit/-/api-kit-1.3.1.tgz" + integrity sha512-JKvCNs8p+42+N8pV2MIqoXlBLckTe5CKboVT7t9mTluuA66i5W8+Kr+B5j9D//EIU5vO7iSOOIYnJuA2ck4XRQ== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@safe-global/safe-core-sdk-types" "^2.3.0" + node-fetch "^2.6.6" + +"@safe-global/protocol-kit@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@safe-global/protocol-kit/-/protocol-kit-1.3.0.tgz" + integrity sha512-zBhwHpaUggywmnR1Xm5RV22DpyjmVWYP3pnOl4rcf9LAc1k7IVmw6WIt2YVhHRaWGxVYMd4RitJX8Dx2+8eLZQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/solidity" "^5.7.0" + "@safe-global/safe-deployments" "^1.26.0" + ethereumjs-util "^7.1.5" + semver "^7.5.4" + web3 "^1.8.1" + web3-core "^1.8.1" + web3-utils "^1.8.1" + zksync-web3 "^0.14.3" + +"@safe-global/safe-core-sdk-types@^2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@safe-global/safe-core-sdk-types/-/safe-core-sdk-types-2.3.0.tgz" + integrity sha512-dU0KkDV1KJNf11ajbUjWiSi4ygdyWfhk1M50lTJWUdCn1/2Bsb/hICM8LoEk6DCoFumxaoCet02SmYakXsW2CA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@safe-global/safe-deployments" "^1.26.0" + web3-core "^1.8.1" + web3-utils "^1.8.1" + +"@safe-global/safe-deployments@^1.26.0": + version "1.37.18" + resolved "https://registry.npmjs.org/@safe-global/safe-deployments/-/safe-deployments-1.37.18.tgz" + integrity sha512-flX/TtgsbKp5qLJSSy/v7bcdtTsml6F9Vyf/JnG1Zfeto5aDeNYlvzljHAd8atnbOiggrZ8z5jyvdlh6njsXfw== + dependencies: + semver "^7.6.2" + +"@scure/base@~1.1.0", "@scure/base@~1.1.6": + version "1.1.9" + resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== + +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.4.0": + version "1.4.0" + resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz" + integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== + dependencies: + "@noble/curves" "~1.4.0" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz" + integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== + dependencies: + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sindresorhus/is@^4.6.0": + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sindresorhus/is@^5.2.0": + version "5.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz" + integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== + +"@smithy/types@^3.7.1": + version "3.7.1" + resolved "https://registry.npmjs.org/@smithy/types/-/types-3.7.1.tgz" + integrity sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA== + dependencies: + tslib "^2.6.2" + +"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1": + version "0.14.5" + resolved "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz" + integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@solidity-parser/parser@^0.18.0": + version "0.18.0" + resolved "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz" + integrity sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA== + +"@solidity-parser/parser@^0.19.0": + version "0.19.0" + resolved "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.19.0.tgz" + integrity sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + dependencies: + defer-to-connect "^2.0.1" + +"@truffle/hdwallet-provider@^1.0.0": + version "1.7.0" + resolved "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-1.7.0.tgz" + integrity sha512-nT7BPJJ2jPCLJc5uZdVtRnRMny5he5d3kO9Hi80ZSqe5xlnK905grBptM/+CwOfbeqHKQirI1btwm6r3wIBM8A== + dependencies: + "@ethereumjs/common" "^2.4.0" + "@ethereumjs/tx" "^3.3.0" + "@trufflesuite/web3-provider-engine" "15.0.14" + eth-sig-util "^3.0.1" + ethereum-cryptography "^0.1.3" + ethereum-protocol "^1.0.1" + ethereumjs-util "^6.1.0" + ethereumjs-wallet "^1.0.1" + +"@trufflesuite/eth-json-rpc-filters@^4.1.2-1": + version "4.1.2-1" + resolved "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.2-1.tgz" + integrity sha512-/MChvC5dw2ck9NU1cZmdovCz2VKbOeIyR4tcxDvA5sT+NaL0rA2/R5U0yI7zsbo1zD+pgqav77rQHTzpUdDNJQ== + dependencies: + "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-0" + await-semaphore "^0.1.3" + eth-query "^2.1.2" + json-rpc-engine "^5.1.3" + lodash.flatmap "^4.5.0" + safe-event-emitter "^1.0.1" + +"@trufflesuite/eth-json-rpc-infura@^4.0.3-0": + version "4.0.3-0" + resolved "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-infura/-/eth-json-rpc-infura-4.0.3-0.tgz" + integrity sha512-xaUanOmo0YLqRsL0SfXpFienhdw5bpQ1WEXxMTRi57az4lwpZBv4tFUDvcerdwJrxX9wQqNmgUgd1BrR01dumw== + dependencies: + "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-1" + cross-fetch "^2.1.1" + eth-json-rpc-errors "^1.0.1" + json-rpc-engine "^5.1.3" + +"@trufflesuite/eth-json-rpc-middleware@^4.4.2-0", "@trufflesuite/eth-json-rpc-middleware@^4.4.2-1": + version "4.4.2-1" + resolved "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.2-1.tgz" + integrity sha512-iEy9H8ja7/8aYES5HfrepGBKU9n/Y4OabBJEklVd/zIBlhCCBAWBqkIZgXt11nBXO/rYAeKwYuE3puH3ByYnLA== + dependencies: + "@trufflesuite/eth-sig-util" "^1.4.2" + btoa "^1.2.1" + clone "^2.1.1" + eth-json-rpc-errors "^1.0.1" + eth-query "^2.1.2" + ethereumjs-block "^1.6.0" + ethereumjs-tx "^1.3.7" + ethereumjs-util "^5.1.2" + ethereumjs-vm "^2.6.0" + fetch-ponyfill "^4.0.0" + json-rpc-engine "^5.1.3" + json-stable-stringify "^1.0.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + +"@trufflesuite/eth-sig-util@^1.4.2": + version "1.4.2" + resolved "https://registry.npmjs.org/@trufflesuite/eth-sig-util/-/eth-sig-util-1.4.2.tgz" + integrity sha512-+GyfN6b0LNW77hbQlH3ufZ/1eCON7mMrGym6tdYf7xiNw9Vv3jBO72bmmos1EId2NgBvPMhmYYm6DSLQFTmzrA== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^5.1.1" + +"@trufflesuite/web3-provider-engine@15.0.14": + version "15.0.14" + resolved "https://registry.npmjs.org/@trufflesuite/web3-provider-engine/-/web3-provider-engine-15.0.14.tgz" + integrity sha512-6/LoWvNMxYf0oaYzJldK2a9AdnkAdIeJhHW4nuUBAeO29eK9xezEaEYQ0ph1QRTaICxGxvn+1Azp4u8bQ8NEZw== + dependencies: + "@ethereumjs/tx" "^3.3.0" + "@trufflesuite/eth-json-rpc-filters" "^4.1.2-1" + "@trufflesuite/eth-json-rpc-infura" "^4.0.3-0" + "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-1" + "@trufflesuite/eth-sig-util" "^1.4.2" + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^4.4.2" + eth-json-rpc-errors "^2.0.2" + ethereumjs-block "^1.2.2" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" + +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@typechain/ethers-v6@^0.5.1": + version "0.5.1" + resolved "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz" + integrity sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" + +"@typechain/hardhat@^9.1.0": + version "9.1.0" + resolved "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz" + integrity sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA== + dependencies: + fs-extra "^9.1.0" + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": + version "5.1.6" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz" + integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== + dependencies: + "@types/node" "*" + +"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": + version "6.0.3" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/chai-as-promised@^7.1.3": + version "7.1.8" + resolved "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz" + integrity sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw== + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.2.0": + version "4.3.20" + resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz" + integrity sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ== + +"@types/concat-stream@^1.6.0": + version "1.6.1" + resolved "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + dependencies: + "@types/node" "*" + +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/http-cache-semantics@*", "@types/http-cache-semantics@^4.0.2": + version "4.0.4" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/minimatch@*": + version "5.1.2" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/mocha@>=9.1.0": + version "10.0.10" + resolved "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz" + integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== + +"@types/node@*", "@types/node@>=18.0.0": + version "22.10.1" + resolved "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz" + integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== + dependencies: + undici-types "~6.20.0" + +"@types/node@^10.0.3": + version "10.17.60" + resolved "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^12.12.6": + version "12.20.55" + resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/node@^8.0.0": + version "8.10.66" + resolved "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" + +"@types/pbkdf2@^3.0.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.1": + version "2.7.3" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/qs@^6.2.31", "@types/qs@^6.9.7": + version "6.9.17" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz" + integrity sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ== + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@types/secp256k1@^4.0.1": + version "4.0.6" + resolved "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== + dependencies: + "@types/node" "*" + +"@types/tinycolor2@^1.4.0": + version "1.4.6" + resolved "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz" + integrity sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw== + +"@types/triple-beam@^1.3.2": + version "1.3.5" + resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz" + integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== + +"@types/yoga-layout@1.9.2": + version "1.9.2" + resolved "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz" + integrity sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw== + +"@typescript-eslint/eslint-plugin@^7.5.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/parser@^7.5.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== + dependencies: + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== + +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== + dependencies: + "@typescript-eslint/types" "7.18.0" + eslint-visitor-keys "^3.4.3" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +abbrev@1, abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" + integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== + +abortcontroller-polyfill@^1.7.5: + version "1.7.6" + resolved "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.6.tgz" + integrity sha512-Zypm+LjYdWAzvuypZvDN0smUJrhOurcuBWhhMRBExqVLRvdjp3Z9mASxKyq19K+meZMshwjjy5S0lkm388zE4Q== + +abstract-leveldown@~2.6.0: + version "2.6.3" + resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz" + integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@~2.7.1: + version "2.7.2" + resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz" + integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== + dependencies: + xtend "~4.0.0" + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.3.4" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" + +acorn@^8.11.0, acorn@^8.4.1, acorn@^8.9.0: + version "8.14.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + +agent-base@6: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.6: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.17.1" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +amazon-cognito-identity-js@^6.3.6: + version "6.3.12" + resolved "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz" + integrity sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg== + dependencies: + "@aws-crypto/sha256-js" "1.2.2" + buffer "4.9.2" + fast-base64-decode "^1.0.0" + isomorphic-unfetch "^3.0.0" + js-cookie "^2.2.1" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== + +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-colors@^4.1.1, ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +antlr4@^4.13.1-patch-1: + version "4.13.2" + resolved "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz" + integrity sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg== + +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + +array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +array.prototype.findlastindex@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@^1.0.0, assert-plus@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +ast-metadata-inferer@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz" + integrity sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA== + dependencies: + "@mdn/browser-compat-data" "^5.2.34" + +ast-parents@^0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz" + integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-eventemitter@^0.2.2: + version "0.2.4" + resolved "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-retry@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + +async@^1.4.2: + version "1.5.2" + resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + +async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0: + version "2.6.4" + resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^3.2.3: + version "3.2.6" + resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +async@1.x: + version "1.5.2" + resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +auto-bind@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz" + integrity sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +await-semaphore@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/await-semaphore/-/await-semaphore-0.1.3.tgz" + integrity sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +axios@^1.5.1, axios@^1.7.2, axios@^1.7.7: + version "1.7.8" + resolved "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz" + integrity sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.12" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz" + integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.3" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" + +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.3" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz" + integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.3" + +backoff@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz" + integrity sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA== + dependencies: + precond "0.2" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.10" + resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz" + integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== + dependencies: + safe-buffer "^5.0.1" + +base-x@^3.0.8: + version "3.0.10" + resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz" + integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== + dependencies: + safe-buffer "^5.0.1" + +base-x@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz" + integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== + +base-x@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/base-x/-/base-x-5.0.0.tgz" + integrity sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ== + +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +bignumber.js@^9.0.0: + version "9.1.2" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.11.0, bn.js@^4.11.8: + version "4.12.1" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz" + integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== + +bn.js@^4.11.6: + version "4.12.1" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz" + integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== + +bn.js@^4.11.9: + version "4.12.1" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz" + integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +body-parser@^1.16.0, body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-stdout@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserslist@^4.21.10, browserslist@^4.24.0, browserslist@^4.24.2: + version "4.24.2" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz" + integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== + dependencies: + caniuse-lite "^1.0.30001669" + electron-to-chromium "^1.5.41" + node-releases "^2.0.18" + update-browserslist-db "^1.1.1" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" + +bs58@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz" + integrity sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw== + dependencies: + base-x "^5.0.0" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz" + integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^5.0.5: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +bufferutil@^4.0.1: + version "4.0.8" + resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz" + integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== + dependencies: + node-gyp-build "^4.3.0" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-lookup@^6.0.4: + version "6.1.0" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz" + integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== + +cacheable-lookup@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz" + integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== + +cacheable-request@^10.2.8: + version "10.2.14" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz" + integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== + dependencies: + "@types/http-cache-semantics" "^4.0.2" + get-stream "^6.0.1" + http-cache-semantics "^4.1.1" + keyv "^4.5.3" + mimic-response "^4.0.0" + normalize-url "^8.0.0" + responselike "^3.0.0" + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + 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.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001524, caniuse-lite@^1.0.30001669: + version "1.0.30001684" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz" + integrity sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ== + +caseless@^0.12.0, caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +cbor@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz" + integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== + dependencies: + nofilter "^3.1.0" + +cbor@^9.0.0: + version "9.0.2" + resolved "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz" + integrity sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ== + dependencies: + nofilter "^3.1.0" + +chai-as-promised@^7.1.1: + version "7.1.2" + resolved "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz" + integrity sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw== + dependencies: + check-error "^1.0.2" + +chai@^4.2.0: + version "4.5.0" + resolved "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.1.0" + +chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.2, check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +checkpoint-store@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz" + integrity sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg== + dependencies: + functional-red-black-tree "^1.0.1" + +chokidar@^3.5.2: + version "3.6.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz" + integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== + dependencies: + readdirp "^4.0.1" + +chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.6" + resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz" + integrity sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.0, cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cli-table3@^0.6.0: + version "0.6.5" + resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^2.0.0, clone@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +code-excerpt@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/code-excerpt/-/code-excerpt-3.0.0.tgz" + integrity sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw== + dependencies: + convert-to-spaces "^1.0.1" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.1.3: + version "3.2.1" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colors@^1.1.2, colors@1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^8.1.0: + version "8.3.0" + resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +compare-versions@^6.0.0: + version "6.1.1" + resolved "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz" + integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.6.0, concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +console-table-printer@^2.9.0: + version "2.12.1" + resolved "https://registry.npmjs.org/console-table-printer/-/console-table-printer-2.12.1.tgz" + integrity sha512-wKGOQRRvdnd89pCeH96e2Fn4wkbenSP6LMHfjfyNLMbGuHEFbMqQNuxXqd0oXG9caIOQ1FTvc5Uijp9/4jujnQ== + dependencies: + simple-wcswidth "^1.0.1" + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-to-spaces@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz" + integrity sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== + +core-js-compat@^3.38.0: + version "3.39.0" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz" + integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== + dependencies: + browserslist "^4.24.2" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +cors@^2.8.1: + version "2.8.5" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@^8.0.0: + version "8.3.6" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-fetch@^2.1.0, cross-fetch@^2.1.1: + version "2.2.6" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz" + integrity sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA== + dependencies: + node-fetch "^2.6.7" + whatwg-fetch "^2.0.4" + +cross-fetch@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz" + integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== + dependencies: + node-fetch "^2.6.12" + +cross-spawn@^6.0.5: + version "6.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz" + integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2: + version "7.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +d@^1.0.1, d@^1.0.2, d@1: + version "1.0.2" + resolved "https://registry.npmjs.org/d/-/d-1.0.2.tgz" + integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== + dependencies: + es5-ext "^0.10.64" + type "^2.7.2" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +death@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/death/-/death-1.1.0.tgz" + integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== + +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@4: + version "4.3.7" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-eql@^4.0.1, deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== + dependencies: + type-detect "^4.0.0" + +deep-extend@^0.6.0, deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +deferred-leveldown@~1.2.1: + version "1.2.2" + resolved "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz" + integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== + dependencies: + abstract-leveldown "~2.6.0" + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-indent@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz" + integrity sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g== + +detect-newline@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz" + integrity sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + +difflib@^0.2.4: + version "0.2.4" + resolved "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz" + integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== + dependencies: + heap ">= 0.2.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +dotenv@^16.4.7: + version "16.4.7" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + +"ds-test@github:dapphub/ds-test": + version "1.0.0" + resolved "git+ssh://git@github.com/dapphub/ds-test.git#e282159d5170298eb2455a6c05280ab5a73a4ef0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.5.41: + version "1.5.67" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz" + integrity sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ== + +elliptic@^6.4.0, elliptic@^6.5.2, elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +elliptic@^6.5.7: + version "6.6.1" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + +encode-utf8@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.15.0: + version "5.17.1" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +enquirer@^2.3.0, enquirer@^2.3.6: + version "2.4.1" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +errno@~0.1.1: + version "0.1.8" + resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2, es-abstract@^1.23.5: + version "1.23.5" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz" + integrity sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.3" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.63, es5-ext@^0.10.64, es5-ext@~0.10.14: + version "0.10.64" + resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz" + integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + esniff "^2.0.1" + next-tick "^1.1.0" + +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.4" + resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz" + integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== + dependencies: + d "^1.0.2" + ext "^1.7.0" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz" + integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.6.1: + version "3.6.3" + resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz" + integrity sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA== + dependencies: + "@nolyfill/is-core-module" "1.0.39" + debug "^4.3.5" + enhanced-resolve "^5.15.0" + eslint-module-utils "^2.8.1" + fast-glob "^3.3.2" + get-tsconfig "^4.7.5" + is-bun-module "^1.0.2" + is-glob "^4.0.3" + +eslint-module-utils@^2.12.0, eslint-module-utils@^2.8.1: + version "2.12.0" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== + dependencies: + debug "^3.2.7" + +eslint-plugin-autofix@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/eslint-plugin-autofix/-/eslint-plugin-autofix-2.2.0.tgz" + integrity sha512-lu8+0r+utyTroROqXIL+a8sUpICi6za22hIzlpb0+x0tQGRnOjhOKU7v8mC/NS/faDoVsw6xW3vUpc+Mcz5NWA== + dependencies: + eslint-rule-composer "^0.3.0" + espree "^9.0.0" + esutils "^2.0.2" + string-similarity "^4.0.3" + +eslint-plugin-compat@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz" + integrity sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w== + dependencies: + "@mdn/browser-compat-data" "^5.3.13" + ast-metadata-inferer "^0.8.0" + browserslist "^4.21.10" + caniuse-lite "^1.0.30001524" + find-up "^5.0.0" + lodash.memoize "^4.1.2" + semver "^7.5.4" + +eslint-plugin-import@^2.29.0: + version "2.31.0" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.0" + hasown "^2.0.2" + is-core-module "^2.15.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" + semver "^6.3.1" + string.prototype.trimend "^1.0.8" + tsconfig-paths "^3.15.0" + +eslint-plugin-prettier@^5.0.1: + version "5.2.1" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz" + integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.9.1" + +eslint-plugin-unused-imports@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.2.0.tgz" + integrity sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ== + dependencies: + eslint-rule-composer "^0.3.0" + +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.55.0: + version "8.57.1" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + +espree@^9.0.0, espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^2.7.1, esprima@2.7.x: + version "2.7.3" + resolved "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2: + version "1.6.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz" + integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eth-block-tracker@^4.4.2: + version "4.4.3" + resolved "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz" + integrity sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw== + dependencies: + "@babel/plugin-transform-runtime" "^7.5.5" + "@babel/runtime" "^7.5.5" + eth-query "^2.1.0" + json-rpc-random-id "^1.0.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz" + integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-gas-reporter@^0.2.25: + version "0.2.27" + resolved "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz" + integrity sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw== + dependencies: + "@solidity-parser/parser" "^0.14.0" + axios "^1.5.1" + cli-table3 "^0.5.0" + colors "1.4.0" + ethereum-cryptography "^1.0.3" + ethers "^5.7.2" + fs-readdir-recursive "^1.1.0" + lodash "^4.17.14" + markdown-table "^1.1.3" + mocha "^10.2.0" + req-cwd "^2.0.0" + sha1 "^1.1.1" + sync-request "^6.0.0" + +eth-json-rpc-errors@^1.0.1: + version "1.1.1" + resolved "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz" + integrity sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-json-rpc-errors@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz" + integrity sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-query@^2.1.0, eth-query@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz" + integrity sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== + dependencies: + json-rpc-random-id "^1.0.0" + xtend "^4.0.1" + +eth-rpc-errors@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz" + integrity sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-sig-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-3.0.1.tgz" + integrity sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^5.1.1" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.0" + +ethereum-bloom-filters@^1.0.6: + version "1.2.0" + resolved "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz" + integrity sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA== + dependencies: + "@noble/hashes" "^1.4.0" + +ethereum-common@^0.0.18: + version "0.0.18" + resolved "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz" + integrity sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ== + +ethereum-common@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz" + integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== + +ethereum-cryptography@^0.1.3, ethereum-cryptography@0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.2.0" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereum-cryptography@^2.0.0: + version "2.2.1" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz" + 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" + +ethereum-cryptography@^2.1.2: + version "2.2.1" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz" + 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" + +ethereum-protocol@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz" + integrity sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg== + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-account@^2.0.3: + version "2.0.5" + resolved "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz" + integrity sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA== + dependencies: + ethereumjs-util "^5.0.0" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-block@^1.2.2, ethereumjs-block@^1.6.0: + version "1.7.1" + resolved "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz" + integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg== + dependencies: + async "^2.0.1" + ethereum-common "0.2.0" + ethereumjs-tx "^1.2.2" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-block@~2.2.0: + version "2.2.2" + resolved "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz" + integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== + dependencies: + async "^2.0.1" + ethereumjs-common "^1.5.0" + ethereumjs-tx "^2.1.1" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-common@^1.1.0, ethereumjs-common@^1.5.0: + version "1.5.2" + resolved "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz" + integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== + +ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.7: + version "1.3.7" + resolved "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz" + integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== + dependencies: + ethereum-common "^0.0.18" + ethereumjs-util "^5.0.0" + +ethereumjs-tx@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz" + integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== + dependencies: + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^5.0.0: + version "5.2.1" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== + dependencies: + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "^0.1.3" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-util@^5.1.1: + version "5.2.1" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== + dependencies: + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "^0.1.3" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-util@^5.1.2: + version "5.2.1" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== + dependencies: + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "^0.1.3" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-util@^5.1.5: + version "5.2.1" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== + dependencies: + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "^0.1.3" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-util@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^6.1.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0: + version "2.6.0" + resolved "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz" + integrity sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw== + dependencies: + async "^2.1.2" + async-eventemitter "^0.2.2" + ethereumjs-account "^2.0.3" + ethereumjs-block "~2.2.0" + ethereumjs-common "^1.1.0" + ethereumjs-util "^6.0.0" + fake-merkle-patricia-tree "^1.0.1" + functional-red-black-tree "^1.0.1" + merkle-patricia-tree "^2.3.2" + rustbn.js "~0.2.0" + safe-buffer "^5.1.1" + +ethereumjs-wallet@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz" + integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== + dependencies: + aes-js "^3.1.2" + bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" + ethereumjs-util "^7.1.2" + randombytes "^2.1.0" + scrypt-js "^3.0.1" + utf8 "^3.0.0" + uuid "^8.3.2" + +ethers@^5.6.1: + version "5.7.2" + resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@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/contracts" "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/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethers@^5.7.0: + version "5.7.2" + resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@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/contracts" "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/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethers@^5.7.2: + version "5.7.2" + resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@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/contracts" "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/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethers@^6.4.0, ethers@^6.7.0: + version "6.13.4" + resolved "https://registry.npmjs.org/ethers/-/ethers-6.13.4.tgz" + integrity sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "22.7.5" + aes-js "4.0.0-beta.5" + tslib "2.7.0" + ws "8.17.1" + +ethers@~5.7.0: + version "5.7.2" + resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@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/contracts" "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/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@^0.1.3, ethjs-util@^0.1.6, ethjs-util@0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +events@^3.0.0: + version "3.3.0" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exponential-backoff@~3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + +express@^4.14.0: + version "4.21.1" + resolved "https://registry.npmjs.org/express/-/express-4.21.1.tgz" + integrity sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.3" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.7.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.3.1" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.3" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.10" + proxy-addr "~2.0.7" + qs "6.13.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.19.0" + serve-static "1.16.2" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@^1.2.0, extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +fake-merkle-patricia-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz" + integrity sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA== + dependencies: + checkpoint-store "^1.1.0" + +fast-base64-decode@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz" + integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2, fast-diff@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.0.3, fast-glob@^3.2.9, fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-safe-stringify@^2.0.6: + version "2.1.1" + resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fast-uri@^3.0.1: + version "3.0.3" + resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz" + integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fdir@^6.4.2: + version "6.4.2" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz" + integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ== + +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + +fetch-ponyfill@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz" + integrity sha512-knK9sGskIg2T7OnYLdZ2hZXn0CtDrAIBxYQLpmEf0BqfdWnwmM1weccUl5+4EdA44tzNSFAuxITPbXtPehUB3g== + dependencies: + node-fetch "~1.7.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== + dependencies: + debug "2.6.9" + encodeurl "~2.0.0" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.2.9: + version "3.3.2" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + dependencies: + imul "^1.0.0" + +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + +follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +forge-std@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/forge-std/-/forge-std-1.1.2.tgz" + integrity sha512-Wfb0iAS9PcfjMKtGpWQw9mXzJxrWD62kJCUqqLcyuI0+VRtJ3j20XembjF3kS20qELYdXft1vD/SPFVWVKMFOw== + +form-data-encoder@^2.1.2: + version "2.1.4" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz" + integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== + +form-data-encoder@1.7.1: + version "1.7.1" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz" + integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== + +form-data@^2.2.0: + version "2.5.2" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz" + integrity sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + safe-buffer "^5.2.1" + +form-data@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fp-ts@^2.16.2: + version "2.16.9" + resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.9.tgz" + integrity sha512-+I2+FnVB+tVaxcYyQkHUq7ZdKScaBlX53A41mxQtpIccsfyv8PzdzP7fzp2AY832T4aoK6UZ5WRX/ebGd8uZuQ== + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +get-stdin@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz" + integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +get-tsconfig@^4.7.5: + version "4.8.1" + resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz" + integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== + dependencies: + resolve-pkg-maps "^1.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +ghost-testrpc@^0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz" + integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== + dependencies: + chalk "^2.4.2" + node-emoji "^1.10.0" + +git-hooks-list@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.1.0.tgz" + integrity sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.3, glob@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/global/-/global-4.4.0.tgz" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^11.8.5: + version "11.8.6" + resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +got@^12.1.0: + version "12.6.1" + resolved "https://registry.npmjs.org/got/-/got-12.6.1.tgz" + integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== + dependencies: + "@sindresorhus/is" "^5.2.0" + "@szmarczak/http-timer" "^5.0.1" + cacheable-lookup "^7.0.0" + cacheable-request "^10.2.8" + decompress-response "^6.0.0" + form-data-encoder "^2.1.2" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^3.0.0" + +got@12.1.0: + version "12.1.0" + resolved "https://registry.npmjs.org/got/-/got-12.1.0.tgz" + integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== + dependencies: + "@sindresorhus/is" "^4.6.0" + "@szmarczak/http-timer" "^5.0.1" + "@types/cacheable-request" "^6.0.2" + "@types/responselike" "^1.0.0" + cacheable-lookup "^6.0.4" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + form-data-encoder "1.7.1" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +gradient-string@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/gradient-string/-/gradient-string-1.2.0.tgz" + integrity sha512-Lxog7IDMMWNjwo4O0KbdBvSewk4vW6kQe5XaLuuPCyCE65AGQ1P8YqKJa5dq8TYf/Ge31F+KjWzPR5mAJvjlAg== + dependencies: + chalk "^2.4.1" + tinygradient "^0.4.1" + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +handlebars@^4.0.1: + version "4.7.8" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hardhat-contract-sizer@^2.10.0: + version "2.10.0" + resolved "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz" + integrity sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA== + dependencies: + chalk "^4.0.0" + cli-table3 "^0.6.0" + strip-ansi "^6.0.0" + +hardhat-deploy@^0.12.4: + version "0.12.4" + resolved "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.12.4.tgz" + integrity sha512-bYO8DIyeGxZWlhnMoCBon9HNZb6ji0jQn7ngP1t5UmGhC8rQYhji7B73qETMOFhzt5ECZPr+U52duj3nubsqdQ== + dependencies: + "@ethersproject/abi" "^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/contracts" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/solidity" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wallet" "^5.7.0" + "@types/qs" "^6.9.7" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + ethers "^5.7.0" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + zksync-ethers "^5.0.0" + +hardhat-gas-reporter@^1.0.8: + version "1.0.10" + resolved "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz" + integrity sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA== + dependencies: + array-uniq "1.0.3" + eth-gas-reporter "^0.2.25" + sha1 "^1.1.1" + +hardhat-storage-layout@^0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/hardhat-storage-layout/-/hardhat-storage-layout-0.1.7.tgz" + integrity sha512-q723g2iQnJpRdMC6Y8fbh/stG6MLHKNxa5jq/ohjtD5znOlOzQ6ojYuInY8V4o4WcPyG3ty4hzHYunLf66/1+A== + dependencies: + console-table-printer "^2.9.0" + +hardhat-tracer@^2.6.0: + version "2.8.3" + resolved "https://registry.npmjs.org/hardhat-tracer/-/hardhat-tracer-2.8.3.tgz" + integrity sha512-bZrz8KtqQUbBcCAYcXnQh3bIkA7JCb2rC7tmq5XlTcDDFPW425HA58CtfHLHsoArrOQdogb0tPTLwh3ONmDj6w== + dependencies: + chalk "^4.1.2" + debug "^4.3.4" + ethers "^5.6.1" + +hardhat@^2.22.13: + version "2.22.16" + resolved "https://registry.npmjs.org/hardhat/-/hardhat-2.22.16.tgz" + integrity sha512-d52yQZ09u0roL6GlgJSvtknsBtIuj9JrJ/U8VMzr/wue+gO5v2tQayvOX6llerlR57Zw2EOTQjLAt6RpHvjwHA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/edr" "^0.6.4" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + "@nomicfoundation/solidity-analyzer" "^0.1.0" + "@sentry/node" "^5.18.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + boxen "^5.1.2" + chokidar "^4.0.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^5.0.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + json-stream-stringify "^3.1.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + picocolors "^1.1.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.8.26" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tinyglobby "^0.2.6" + tsort "0.0.1" + undici "^5.14.0" + uuid "^8.3.2" + ws "^7.4.6" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7, hash.js@1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +"heap@>= 0.2.0": + version "0.2.7" + resolved "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +homedir@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/homedir/-/homedir-0.6.0.tgz" + integrity sha512-KZFBHenkVuyyG4uaqRSXqWJr3HTxcaPguM7rU1BlH/mtbDlzaXNSXTa9AhV+fXEjrNemHu9vtLRIaM8/8OW0xA== + +hosted-git-info@^2.6.0: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz" + integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== + +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +http2-wrapper@^2.1.10: + version "2.2.1" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.13, ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +immer@10.0.2: + version "10.0.2" + resolved "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz" + integrity sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA== + +immutable@^4.0.0-rc.12: + version "4.3.7" + resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz" + integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@2, inherits@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ink-gradient@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ink-gradient/-/ink-gradient-2.0.0.tgz" + integrity sha512-d2BK/EzzBRoDL54NWkS3JGE4J8xtzwRVWxDAIkQ/eQ60XIzrFMtT5JlUqgV05Qlt32Jvk50qW51YqxGJggTuqA== + dependencies: + gradient-string "^1.2.0" + prop-types "^15.7.2" + strip-ansi "^6.0.0" + +ink-table@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/ink-table/-/ink-table-3.1.0.tgz" + integrity sha512-qxVb4DIaEaJryvF9uZGydnmP9Hkmas3DCKVpEcBYC0E4eJd3qNgNe+PZKuzgCERFe9LfAS1TNWxCr9+AU4v3YA== + dependencies: + object-hash "^2.0.3" + +ink@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/ink/-/ink-3.2.0.tgz" + integrity sha512-firNp1q3xxTzoItj/eOOSZQnYSlyrWks5llCTVX37nJ59K3eXbQ8PtzCguqo8YI19EELo5QxaKnJd4VxzhU8tg== + dependencies: + ansi-escapes "^4.2.1" + auto-bind "4.0.0" + chalk "^4.1.0" + cli-boxes "^2.2.0" + cli-cursor "^3.1.0" + cli-truncate "^2.1.0" + code-excerpt "^3.0.0" + indent-string "^4.0.0" + is-ci "^2.0.0" + lodash "^4.17.20" + patch-console "^1.0.0" + react-devtools-core "^4.19.1" + react-reconciler "^0.26.2" + scheduler "^0.20.2" + signal-exit "^3.0.2" + slice-ansi "^3.0.0" + stack-utils "^2.0.2" + string-width "^4.2.2" + type-fest "^0.12.0" + widest-line "^3.1.0" + wrap-ansi "^6.2.0" + ws "^7.5.5" + yoga-layout-prebuilt "^1.9.6" + +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-bun-module@^1.0.2: + version "1.3.0" + resolved "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz" + integrity sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA== + dependencies: + semver "^7.6.3" + +is-callable@^1.1.3, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.13.0, is-core-module@^2.15.1: + version "2.15.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz" + integrity sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA== + dependencies: + call-bind "^1.0.7" + +is-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz" + integrity sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-generator-function@^1.0.10, is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.3, is-symbol@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.13, is-typed-array@^1.1.3: + version "1.1.13" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isomorphic-unfetch@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz" + integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== + dependencies: + node-fetch "^2.6.1" + unfetch "^4.2.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +js-cookie@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== + +js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" + integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== + +js-sha3@^0.8.0, js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0, js-yaml@~4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@3.x: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsesc@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-rpc-engine@^5.1.3: + version "5.4.0" + resolved "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz" + integrity sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g== + dependencies: + eth-rpc-errors "^3.0.0" + safe-event-emitter "^1.0.1" + +json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz" + integrity sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stable-stringify@^1.0.1: + version "1.1.1" + resolved "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz" + integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== + dependencies: + call-bind "^1.0.5" + isarray "^2.0.5" + jsonify "^0.0.1" + object-keys "^1.1.1" + +json-stream-stringify@^3.1.4: + version "3.1.6" + resolved "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz" + integrity sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog== + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + +jsonschema@^1.2.4: + version "1.4.1" + resolved "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz" + integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +keccak@^3.0.0, keccak@^3.0.2: + version "3.0.4" + resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + +latest-version@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz" + integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== + dependencies: + package-json "^8.1.0" + +level-codec@~7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz" + integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== + +level-errors@^1.0.3, level-errors@~1.0.3: + version "1.0.5" + resolved "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz" + integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== + dependencies: + errno "~0.1.1" + +level-iterator-stream@~1.3.0: + version "1.3.1" + resolved "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz" + integrity sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw== + dependencies: + inherits "^2.0.1" + level-errors "^1.0.3" + readable-stream "^1.0.33" + xtend "^4.0.0" + +level-ws@0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz" + integrity sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw== + dependencies: + readable-stream "~1.0.15" + xtend "~2.1.1" + +levelup@^1.2.1: + version "1.3.9" + resolved "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz" + integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== + dependencies: + deferred-leveldown "~1.2.1" + level-codec "~7.0.0" + level-errors "~1.0.3" + level-iterator-stream "~1.3.0" + prr "~1.0.1" + semver "~5.4.1" + xtend "~4.0.0" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.flatmap@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz" + integrity sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +logform@^2.6.0, logform@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz" + integrity sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ== + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +ltgt@~2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz" + integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +map-age-cleaner@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +markdown-table@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +match-all@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" + integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memdown@^1.0.0: + version "1.4.1" + resolved "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz" + integrity sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w== + dependencies: + abstract-leveldown "~2.7.1" + functional-red-black-tree "^1.0.1" + immediate "^3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.1.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== + +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz" + integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== + dependencies: + async "^1.4.2" + ethereumjs-util "^5.0.0" + level-ws "0.0.0" + levelup "^1.2.1" + memdown "^1.0.0" + readable-stream "^2.0.0" + rlp "^2.0.0" + semaphore ">=1.0.1" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +micro-memoize@~4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.2.tgz" + integrity sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g== + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.8" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz" + integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +mimic-response@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz" + integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@^3.0.4: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.5: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^5.1.6: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4, minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +"minimatch@2 || 3": + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz" + integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== + dependencies: + mkdirp "*" + +mkdirp@*, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@0.5.x: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0, mocha@^10.2.0: + version "10.8.2" + resolved "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz" + integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== + dependencies: + ansi-colors "^4.1.3" + browser-stdout "^1.3.1" + chokidar "^3.5.3" + debug "^4.3.5" + diff "^5.2.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^8.1.0" + he "^1.2.0" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^5.1.6" + ms "^2.1.3" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^6.5.1" + yargs "^16.2.0" + yargs-parser "^20.2.9" + yargs-unparser "^2.0.0" + +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + +ms@^2.1.1, ms@^2.1.3, ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz" + integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +ndjson@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz" + integrity sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ== + dependencies: + json-stringify-safe "^5.0.1" + minimist "^1.2.5" + readable-stream "^3.6.0" + split2 "^3.0.0" + through2 "^4.0.0" + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.6, node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@~1.7.1: + version "1.7.3" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.8.4" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + +nofilter@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz" + integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== + +nopt@3.x: + version "3.0.6" + resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +normalize-url@^8.0.0: + version "8.0.1" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz" + integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^2.0.3: + version "2.2.0" + resolved "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz" + integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== + +object-inspect@^1.13.1, object-inspect@^1.13.3: + version "1.13.3" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" + integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== + +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +obliterator@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz" + integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== + dependencies: + http-https "^1.0.0" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0, once@1.x: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^7.4.2: + version "7.4.2" + resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +ordinal@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz" + integrity sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ== + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.2: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-memoize@~4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/p-memoize/-/p-memoize-4.0.4.tgz" + integrity sha512-ijdh0DP4Mk6J4FXlOM6vPPoCjPytcEseW8p/k5SDTSSfGV3E9bpt9Yzfifvzp6iohIieoLTkXRb32OWV0fB2Lw== + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^3.0.0" + p-settle "^4.1.1" + +p-reflect@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz" + integrity sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg== + +p-settle@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/p-settle/-/p-settle-4.1.1.tgz" + integrity sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ== + dependencies: + p-limit "^2.2.2" + p-reflect "^2.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^8.1.0: + version "8.1.1" + resolved "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz" + integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA== + dependencies: + got "^12.1.0" + registry-auth-token "^5.0.1" + registry-url "^6.0.0" + semver "^7.3.7" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +patch-console@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/patch-console/-/patch-console-1.0.0.tgz" + integrity sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA== + +patch-package@^6.4.7: + version "6.5.1" + resolved "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz" + integrity sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^4.1.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^2.0.0" + fs-extra "^9.0.0" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.6" + open "^7.4.2" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + yaml "^1.10.2" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.10: + version "0.1.10" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz" + integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0, picocolors@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +precond@0.2: + version "0.2.3" + resolved "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz" + integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier-plugin-packagejson@^2.4.7: + version "2.5.6" + resolved "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.6.tgz" + integrity sha512-TY7KiLtyt6Tlf53BEbXUWkN0+TRdHKgIMmtXtDCyHH6yWnZ50Lwq6Vb6lyjapZrhDTXooC4EtlY5iLe1sCgi5w== + dependencies: + sort-package-json "2.12.0" + synckit "0.9.2" + +prettier-plugin-solidity@^1.2.0: + version "1.4.1" + resolved "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.1.tgz" + integrity sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg== + dependencies: + "@solidity-parser/parser" "^0.18.0" + semver "^7.5.4" + +prettier@^2.3.1: + version "2.8.8" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +prettier@^2.8.3: + version "2.8.8" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +prettier@^3.2.4, prettier@3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +promise-to-callback@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz" + integrity sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA== + dependencies: + is-fn "^1.0.0" + set-immediate-shim "^1.0.1" + +promise@^8.0.0: + version "8.3.0" + resolved "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proper-lockfile@^4.1.1: + version "4.1.2" + resolved "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz" + integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== + dependencies: + graceful-fs "^4.2.4" + retry "^0.12.0" + signal-exit "^3.0.2" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +psl@^1.1.28: + version "1.14.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.14.0.tgz" + integrity sha512-Syk1bnf6fRZ9wQs03AtKJHcM12cKbOLo9L8JtCCdYj5/DTsHmTyXM4BK5ouWeG2P6kZ4nmFvuNTdtaqfobCOCg== + dependencies: + punycode "^2.3.1" + +pump@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" + integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== + +qs@^6.4.0, qs@^6.9.4: + version "6.13.1" + resolved "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz" + integrity sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg== + dependencies: + side-channel "^1.0.6" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +qs@6.13.0: + version "6.13.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@^2.4.1, raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@1.2.8: + version "1.2.8" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-devtools-core@^4.19.1: + version "4.28.5" + resolved "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz" + integrity sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA== + dependencies: + shell-quote "^1.6.1" + ws "^7" + +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-reconciler@^0.26.2: + version "0.26.2" + resolved "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.26.2.tgz" + integrity sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react@^17.0.2: + version "17.0.2" + resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +readable-stream@^1.0.33: + version "1.1.14" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.0, readable-stream@^2.2.2, readable-stream@^2.2.9: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.6.2: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.0.15: + version "1.0.34" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@3: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + +reflect.getprototypeof@^1.0.6: + version "1.0.7" + resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz" + integrity sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + which-builtin-type "^1.1.4" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regexp.prototype.flags@^1.5.3: + version "1.5.3" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.2" + +registry-auth-token@^5.0.1: + version "5.0.3" + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.3.tgz" + integrity sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA== + dependencies: + "@pnpm/npm-conf" "^2.1.0" + +registry-url@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz" + integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== + dependencies: + rc "1.2.8" + +req-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz" + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== + dependencies: + req-from "^2.0.0" + +req-from@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz" + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== + dependencies: + resolve-from "^3.0.0" + +request@^2.79.0, request@^2.85.0: + version "2.88.2" + resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz" + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +responselike@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz" + integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== + dependencies: + lowercase-keys "^3.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +retry@0.13.1: + version "0.13.1" + resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-event-emitter@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz" + integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg== + dependencies: + events "^3.0.0" + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +safe-stable-stringify@^2.3.1: + version "2.5.0" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== + +safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sc-istanbul@^0.4.5: + version "0.4.6" + resolved "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz" + integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +scrypt-js@^3.0.0, scrypt-js@^3.0.1, scrypt-js@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.1: + version "4.0.4" + resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz" + integrity sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw== + dependencies: + elliptic "^6.5.7" + node-addon-api "^5.0.0" + node-gyp-build "^4.2.0" + +semaphore@^1.0.3, semaphore@>=1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz" + integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== + +semver@^5.5.0, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.4: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +semver@^7.3.7: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +semver@^7.5.2: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +semver@^7.5.4: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +semver@^7.6.0: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +semver@^7.6.2: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +semver@^7.6.3: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +semver@~5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz" + integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== + +send@0.19.0: + version "0.19.0" + resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" + integrity sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ== + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz" + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.6.1: + version "1.8.2" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz" + integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== + +shelljs@^0.8.3: + version "0.8.5" + resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.2" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz" + integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +simple-wcswidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz" + integrity sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +solady@0.0.182: + version "0.0.182" + resolved "https://registry.npmjs.org/solady/-/solady-0.0.182.tgz" + integrity sha512-FW6xo1akJoYpkXMzu58/56FcNU3HYYNamEbnFO3iSibXk0nSHo0DV2Gu/zI3FPg3So5CCX6IYli1TT1IWATnvg== + +solc@0.8.26: + version "0.8.26" + resolved "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz" + integrity sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g== + dependencies: + command-exists "^1.2.8" + commander "^8.1.0" + follow-redirects "^1.12.1" + js-sha3 "0.8.0" + memorystream "^0.3.1" + semver "^5.5.0" + tmp "0.0.33" + +solhint@^4.0.0: + version "4.5.4" + resolved "https://registry.npmjs.org/solhint/-/solhint-4.5.4.tgz" + integrity sha512-Cu1XiJXub2q1eCr9kkJ9VPv1sGcmj3V7Zb76B0CoezDOB9bu3DxKIFFH7ggCl9fWpEPD6xBmRLfZrYijkVmujQ== + dependencies: + "@solidity-parser/parser" "^0.18.0" + ajv "^6.12.6" + antlr4 "^4.13.1-patch-1" + ast-parents "^0.0.1" + chalk "^4.1.2" + commander "^10.0.0" + cosmiconfig "^8.0.0" + fast-diff "^1.2.0" + glob "^8.0.3" + ignore "^5.2.4" + js-yaml "^4.1.0" + latest-version "^7.0.0" + lodash "^4.17.21" + pluralize "^8.0.0" + semver "^7.5.2" + strip-ansi "^6.0.1" + table "^6.8.1" + text-table "^0.2.0" + optionalDependencies: + prettier "^2.8.3" + +solidity-ast@^0.4.51: + version "0.4.59" + resolved "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.59.tgz" + integrity sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g== + +solidity-bytes-utils@^0.8.2: + version "0.8.2" + resolved "https://registry.npmjs.org/solidity-bytes-utils/-/solidity-bytes-utils-0.8.2.tgz" + integrity sha512-cqXPYAV2auhpdKSTPuqji0CwpSceZDu95CzqSM/9tDJ2MoMaMsdHTpOIWtVw31BIqqGPNmIChCswzbw0tHaMTw== + dependencies: + ds-test "github:dapphub/ds-test" + forge-std "^1.1.2" + +solidity-coverage@^0.8.0: + version "0.8.14" + resolved "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.14.tgz" + integrity sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA== + dependencies: + "@ethersproject/abi" "^5.0.9" + "@solidity-parser/parser" "^0.19.0" + chalk "^2.4.2" + death "^1.1.0" + difflib "^0.2.4" + fs-extra "^8.1.0" + ghost-testrpc "^0.0.2" + global-modules "^2.0.0" + globby "^10.0.1" + jsonschema "^1.2.4" + lodash "^4.17.21" + mocha "^10.2.0" + node-emoji "^1.10.0" + pify "^4.0.1" + recursive-readdir "^2.2.2" + sc-istanbul "^0.4.5" + semver "^7.3.4" + shelljs "^0.8.3" + web3-utils "^1.3.6" + +sort-object-keys@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz" + integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg== + +sort-package-json@2.12.0: + version "2.12.0" + resolved "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.12.0.tgz" + integrity sha512-/HrPQAeeLaa+vbAH/znjuhwUluuiM/zL5XX9kop8UpDgjtyWKt43hGDk2vd/TBdDpzIyzIHVUgmYofzYrAQjew== + dependencies: + detect-indent "^7.0.1" + detect-newline "^4.0.0" + get-stdin "^9.0.0" + git-hooks-list "^3.0.0" + is-plain-obj "^4.1.0" + semver "^7.6.0" + sort-object-keys "^1.1.3" + tinyglobby "^0.2.9" + +source-map-support@^0.5.13: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz" + integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== + dependencies: + amdefine ">=0.0.4" + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.7.0: + version "1.18.0" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + +stack-utils@^2.0.2: + version "2.0.6" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== + +string_decoder@^1.1.1, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + +string-similarity@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz" + integrity sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ== + +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +swarm-js@^0.1.40: + version "0.1.42" + resolved "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz" + integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^11.8.5" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + +sync-request@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + +synckit@^0.9.1, synckit@0.9.2: + version "0.9.2" + resolved "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz" + integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + +table@^6.8.0, table@^6.8.1, table@~6.8.2: + version "6.8.2" + resolved "https://registry.npmjs.org/table/-/table-6.8.2.tgz" + integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar@^4.0.2: + version "4.4.19" + resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +tiny-invariant@^1.3.1: + version "1.3.3" + resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +tinycolor2@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz" + integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== + +tinyglobby@^0.2.6, tinyglobby@^0.2.9: + version "0.2.10" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz" + integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== + dependencies: + fdir "^6.4.2" + picomatch "^4.0.2" + +tinygradient@^0.4.1: + version "0.4.3" + resolved "https://registry.npmjs.org/tinygradient/-/tinygradient-0.4.3.tgz" + integrity sha512-tBPYQSs6eWukzzAITBSmqcOwZCKACvRa/XjPPh1mj4mnx4G3Drm51HxyCTU/TKnY8kG4hmTe5QlOh9O82aNtJQ== + dependencies: + "@types/tinycolor2" "^1.4.0" + tinycolor2 "^1.0.0" + +tmp@^0.0.33, tmp@0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + +truffle-flattener@^1.2.9: + version "1.6.0" + resolved "https://registry.npmjs.org/truffle-flattener/-/truffle-flattener-1.6.0.tgz" + integrity sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q== + dependencies: + "@resolver-engine/imports-fs" "^0.2.2" + "@solidity-parser/parser" "^0.14.1" + find-up "^2.1.0" + mkdirp "^1.0.4" + tsort "0.0.1" + +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + +ts-command-line-args@^2.2.0: + version "2.5.1" + resolved "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +ts-node@>=8.0.0: + version "10.9.2" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.11.1, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.3.1: + version "2.8.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tslib@^2.6.2: + version "2.8.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl-util@^0.15.0, tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^0.14.3: + version "0.14.5" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== + +type-fest@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz" + integrity sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^2.7.2: + version "2.7.3" + resolved "https://registry.npmjs.org/type/-/type-2.7.3.tgz" + integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== + +typechain@^8.3.0: + version "8.3.2" + resolved "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz" + integrity sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q== + dependencies: + "@types/prettier" "^2.1.1" + debug "^4.3.1" + fs-extra "^7.0.0" + glob "7.1.7" + js-sha3 "^0.8.0" + lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.3.1" + ts-command-line-args "^2.2.0" + ts-essentials "^7.0.1" + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz" + integrity sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + reflect.getprototypeof "^1.0.6" + +typed-array-length@^1.0.6: + version "1.0.7" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@^5.4.4, typescript@>=4.5.0: + version "5.7.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz" + integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== + +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + +uglify-js@^3.1.4: + version "3.19.3" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + +undici@^5.14.0: + version "5.28.4" + resolved "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== + dependencies: + "@fastify/busboy" "^2.0.0" + +undici@^6.11.1: + version "6.21.0" + resolved "https://registry.npmjs.org/undici/-/undici-6.21.0.tgz" + integrity sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw== + +unfetch@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@~1.0.0, unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz" + integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== + +utf-8-validate@^5.0.2: + version "5.0.10" + resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== + dependencies: + node-gyp-build "^4.3.0" + +utf8@^3.0.0, utf8@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.5: + version "0.12.5" + resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +web3-bzz@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.4.tgz" + integrity sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw== + dependencies: + "@types/node" "^12.12.6" + got "12.1.0" + swarm-js "^0.1.40" + +web3-core-helpers@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz" + integrity sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g== + dependencies: + web3-eth-iban "1.10.4" + web3-utils "1.10.4" + +web3-core-method@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.4.tgz" + integrity sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA== + dependencies: + "@ethersproject/transactions" "^5.6.2" + web3-core-helpers "1.10.4" + web3-core-promievent "1.10.4" + web3-core-subscriptions "1.10.4" + web3-utils "1.10.4" + +web3-core-promievent@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz" + integrity sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.4.tgz" + integrity sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg== + dependencies: + util "^0.12.5" + web3-core-helpers "1.10.4" + web3-providers-http "1.10.4" + web3-providers-ipc "1.10.4" + web3-providers-ws "1.10.4" + +web3-core-subscriptions@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.4.tgz" + integrity sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.10.4" + +web3-core@^1.8.1, web3-core@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-core/-/web3-core-1.10.4.tgz" + integrity sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww== + dependencies: + "@types/bn.js" "^5.1.1" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.10.4" + web3-core-method "1.10.4" + web3-core-requestmanager "1.10.4" + web3-utils "1.10.4" + +web3-eth-abi@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.4.tgz" + integrity sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ== + dependencies: + "@ethersproject/abi" "^5.6.3" + web3-utils "1.10.4" + +web3-eth-accounts@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.4.tgz" + integrity sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg== + dependencies: + "@ethereumjs/common" "2.6.5" + "@ethereumjs/tx" "3.5.2" + "@ethereumjs/util" "^8.1.0" + eth-lib "0.2.8" + scrypt-js "^3.0.1" + uuid "^9.0.0" + web3-core "1.10.4" + web3-core-helpers "1.10.4" + web3-core-method "1.10.4" + web3-utils "1.10.4" + +web3-eth-contract@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.4.tgz" + integrity sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A== + dependencies: + "@types/bn.js" "^5.1.1" + web3-core "1.10.4" + web3-core-helpers "1.10.4" + web3-core-method "1.10.4" + web3-core-promievent "1.10.4" + web3-core-subscriptions "1.10.4" + web3-eth-abi "1.10.4" + web3-utils "1.10.4" + +web3-eth-ens@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.4.tgz" + integrity sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.10.4" + web3-core-helpers "1.10.4" + web3-core-promievent "1.10.4" + web3-eth-abi "1.10.4" + web3-eth-contract "1.10.4" + web3-utils "1.10.4" + +web3-eth-iban@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz" + integrity sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw== + dependencies: + bn.js "^5.2.1" + web3-utils "1.10.4" + +web3-eth-personal@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.4.tgz" + integrity sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.10.4" + web3-core-helpers "1.10.4" + web3-core-method "1.10.4" + web3-net "1.10.4" + web3-utils "1.10.4" + +web3-eth@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.4.tgz" + integrity sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA== + dependencies: + web3-core "1.10.4" + web3-core-helpers "1.10.4" + web3-core-method "1.10.4" + web3-core-subscriptions "1.10.4" + web3-eth-abi "1.10.4" + web3-eth-accounts "1.10.4" + web3-eth-contract "1.10.4" + web3-eth-ens "1.10.4" + web3-eth-iban "1.10.4" + web3-eth-personal "1.10.4" + web3-net "1.10.4" + web3-utils "1.10.4" + +web3-net@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-net/-/web3-net-1.10.4.tgz" + integrity sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow== + dependencies: + web3-core "1.10.4" + web3-core-method "1.10.4" + web3-utils "1.10.4" + +web3-providers-http@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.4.tgz" + integrity sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ== + dependencies: + abortcontroller-polyfill "^1.7.5" + cross-fetch "^4.0.0" + es6-promise "^4.2.8" + web3-core-helpers "1.10.4" + +web3-providers-ipc@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.4.tgz" + integrity sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.10.4" + +web3-providers-ws@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.4.tgz" + integrity sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.10.4" + websocket "^1.0.32" + +web3-shh@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.4.tgz" + integrity sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw== + dependencies: + web3-core "1.10.4" + web3-core-method "1.10.4" + web3-core-subscriptions "1.10.4" + web3-net "1.10.4" + +web3-utils@^1.3.6, web3-utils@^1.8.1, web3-utils@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +web3@^1.8.1: + version "1.10.4" + resolved "https://registry.npmjs.org/web3/-/web3-1.10.4.tgz" + integrity sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA== + dependencies: + web3-bzz "1.10.4" + web3-core "1.10.4" + web3-eth "1.10.4" + web3-eth-personal "1.10.4" + web3-net "1.10.4" + web3-shh "1.10.4" + web3-utils "1.10.4" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +websocket@^1.0.32: + version "1.0.35" + resolved "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz" + integrity sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.63" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-fetch@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz" + integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-builtin-type@^1.1.4: + version "1.2.0" + resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz" + integrity sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA== + dependencies: + call-bind "^1.0.7" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.2" + which-typed-array "^1.1.15" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2: + version "1.1.16" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz" + integrity sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +which@^1.1.1: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +winston-transport@^4.9.0: + version "4.9.0" + resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz" + integrity sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A== + dependencies: + logform "^2.7.0" + readable-stream "^3.6.2" + triple-beam "^1.3.0" + +winston@^3.11.0: + version "3.17.0" + resolved "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz" + integrity sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw== + dependencies: + "@colors/colors" "^1.6.0" + "@dabh/diagnostics" "^2.0.2" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.7.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.9.0" + +word-wrap@^1.2.5, word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^5.1.1: + version "5.2.4" + resolved "https://registry.npmjs.org/ws/-/ws-5.2.4.tgz" + integrity sha512-fFCejsuC8f9kOSu9FYaOw8CdO68O3h5v0lg4p74o8JqWpwTf9tniOD+nOB78aWoVSS6WptVUmDrp/KPsMVBWFQ== + dependencies: + async-limiter "~1.0.0" + +ws@^7, ws@^7.4.6, ws@7.4.6: + version "7.4.6" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@^7.5.5: + version "7.5.10" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +ws@8.17.1: + version "8.17.1" + resolved "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" + integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== + dependencies: + object-keys "~0.4.0" + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^20.2.2, yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yoga-layout-prebuilt@^1.10.0, yoga-layout-prebuilt@^1.9.6: + version "1.10.0" + resolved "https://registry.npmjs.org/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.10.0.tgz" + integrity sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g== + dependencies: + "@types/yoga-layout" "1.9.2" + +zksync-ethers@^5.0.0: + version "5.10.0" + resolved "https://registry.npmjs.org/zksync-ethers/-/zksync-ethers-5.10.0.tgz" + integrity sha512-OAjTGAHF9wbdkRGkj7XZuF/a1Sk/FVbwH4pmLjAKlR7mJ7sQtQhBhrPU2dCc67xLaNvEESPfwil19ES5wooYFg== + dependencies: + ethers "~5.7.0" + +zksync-web3@^0.14.3: + version "0.14.4" + resolved "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.4.tgz" + integrity sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg== + +zod@^3.22.4: + version "3.23.8" + resolved "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz" + integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== From 22ea91a93f64cc0ed2f35b5c4404b1d7ffafb740 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Mon, 10 Feb 2025 14:50:59 +0300 Subject: [PATCH 03/41] deployer scripts --- projects/omnichain-deployer/README.md | 9 + projects/omnichain-deployer/hardhat.config.ts | 44 + projects/omnichain-deployer/package.json | 51 + projects/omnichain-deployer/scripts/stage1.js | 120 + projects/omnichain-deployer/scripts/stage2.js | 154 + projects/omnichain-deployer/scripts/stage3.js | 34 + .../omnichain-deployer/state.example.json | 27 + projects/omnichain-deployer/state.json | 24 + projects/omnichain-deployer/tsconfig.json | 11 + projects/omnichain-deployer/yarn.lock | 5130 +++++++++++++++++ 10 files changed, 5604 insertions(+) create mode 100644 projects/omnichain-deployer/README.md create mode 100644 projects/omnichain-deployer/hardhat.config.ts create mode 100644 projects/omnichain-deployer/package.json create mode 100644 projects/omnichain-deployer/scripts/stage1.js create mode 100644 projects/omnichain-deployer/scripts/stage2.js create mode 100644 projects/omnichain-deployer/scripts/stage3.js create mode 100644 projects/omnichain-deployer/state.example.json create mode 100644 projects/omnichain-deployer/state.json create mode 100644 projects/omnichain-deployer/tsconfig.json create mode 100644 projects/omnichain-deployer/yarn.lock diff --git a/projects/omnichain-deployer/README.md b/projects/omnichain-deployer/README.md new file mode 100644 index 00000000..8e773fad --- /dev/null +++ b/projects/omnichain-deployer/README.md @@ -0,0 +1,9 @@ +Deployment scripts + +How to use: +1. Fill addresses in state.json with the stuff that's already deployed (see state.example.json) +2. Run scripts/stage1.js with L1 network +3. Run scripts/stage2.js with L2 +4. Run scripts/stage3.js with L1 + +Deployed addresses will be saved in state.json. diff --git a/projects/omnichain-deployer/hardhat.config.ts b/projects/omnichain-deployer/hardhat.config.ts new file mode 100644 index 00000000..a928e9f8 --- /dev/null +++ b/projects/omnichain-deployer/hardhat.config.ts @@ -0,0 +1,44 @@ +import { HardhatUserConfig } from "hardhat/config"; +import { CONFIG } from "../../hh.config"; +import "@nomicfoundation/hardhat-toolbox"; +import "@layerzerolabs/test-devtools-evm-hardhat"; +import "hardhat-gas-reporter"; +import "hardhat-deploy"; +import "@openzeppelin/hardhat-upgrades"; +import fse from "fs-extra"; +import path from "path"; + +const EXTERNAL_PROJECTS = [ "../vaults", "../bridge-lz"]; +const TARGET_DIR = "./contracts"; + +const copyContracts = () => { + EXTERNAL_PROJECTS.forEach((project) => { + const srcDir = path.resolve(project + "/contracts"); + const dstDir = path.join(TARGET_DIR, path.basename(project)); + console.log("src dir:", srcDir); + console.log("dst dir:", dstDir); + + //Clear old contracts + fse.removeSync(dstDir); + fse.ensureDirSync(dstDir); + + //Cope + fse.copySync(srcDir, dstDir, { overwrite: true }); + }); +}; +copyContracts(); + +const config: HardhatUserConfig = { + ...(CONFIG as HardhatUserConfig), + solidity: { + version: "0.8.27", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, +}; + +export default config; diff --git a/projects/omnichain-deployer/package.json b/projects/omnichain-deployer/package.json new file mode 100644 index 00000000..a75cf3bc --- /dev/null +++ b/projects/omnichain-deployer/package.json @@ -0,0 +1,51 @@ +{ + "name": "omnivault-integration-tests-l1", + "version": "1.0.0", + "description": "", + "directories": { + "test": "test" + }, + "scripts": { + "format": "prettier --write test/*.ts test/*.js" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "@layerzerolabs/lz-evm-protocol-v2": "^2.3.39", + "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.39", + "@layerzerolabs/lz-v2-utilities": "^2.3.39", + "@layerzerolabs/oapp-evm": "^0.0.4", + "@layerzerolabs/oft-evm": "^0.0.11", + "@layerzerolabs/test-devtools-evm-hardhat": "~0.3.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.2", + "@nomicfoundation/hardhat-ethers": "^3.0.5", + "@nomicfoundation/hardhat-network-helpers": "^1.0.9", + "@nomicfoundation/hardhat-toolbox": "^4.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.5", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@openzeppelin/contracts": "^5.0.0", + "@openzeppelin/contracts-upgradeable": "^5.0.0", + "@openzeppelin/hardhat-upgrades": "^3.0.0", + "prettier": "3.3.2", + "@typechain/ethers-v6": "^0.5.1", + "@typechain/hardhat": "^9.1.0", + "@types/chai": "^4.3.11", + "@types/fs-extra": "^11.0.4", + "@types/mocha": "^10.0.6", + "@types/node": "^20.10.1", + "chai": "^4.2.0", + "dotenv": "^16.3.1", + "ethereumjs-util": "^7.1.5", + "ethers": "^6.9.0", + "fs-extra": "^11.2.0", + "hardhat": "^2.19.1", + "hardhat-deploy": "^0.11.45", + "hardhat-gas-reporter": "^1.0.9", + "hardhat-tracer": "^2.7.0", + "solidity-bytes-utils": "^0.8.2", + "solidity-coverage": "^0.8.13", + "ts-node": "^10.9.1", + "typechain": "^8.3.2", + "typescript": "^5.2.2" + } +} diff --git a/projects/omnichain-deployer/scripts/stage1.js b/projects/omnichain-deployer/scripts/stage1.js new file mode 100644 index 00000000..7724ee6d --- /dev/null +++ b/projects/omnichain-deployer/scripts/stage1.js @@ -0,0 +1,120 @@ +const { ethers, upgrades } = require("hardhat"); +const fs = require('node:fs/promises'); + + + +const loadState = async () => { + const data = await fs.readFile('state.json', { encoding: 'utf8' }); + const obj = JSON.parse(data); + return obj; +} + +const saveState = async (state) => { + const data = JSON.stringify(state); + await fs.writeFile('state.json', data, { encoding: 'utf8' }); +} + +const deployVaultAndToken = async (operatorAddress, strategyAddress, inceptionLibAddress, ratioFeedAddress, underlyingL1) => { + // 1. Inception token + const iTokenFactory = await hre.ethers.getContractFactory("InceptionToken"); + const iToken = await upgrades.deployProxy(iTokenFactory, ["InsfrxETH", "InsfrxETH"], { kind: "transparent" }); + await iToken.waitForDeployment(); + const iTokenAddress = await iToken.getAddress(); + console.log(`InceptionToken address: ${iTokenAddress}`); + //return iTokenAddress; + // 2. Inception vault (mock) + const InceptionVaultFactory = await hre.ethers.getContractFactory("InceptionVaultMock", { + libraries: { + InceptionLibrary: inceptionLibAddress, // "0x3022ad4552b5fb285F36C71Bdd1545c33a4937ca", + }, + }); + const iVault = await upgrades.deployProxy( + InceptionVaultFactory, + ["InceptionSfrxEthVault", operatorAddress, underlyingL1, iTokenAddress, strategyAddress], + { unsafeAllowLinkedLibraries: true, kind: "transparent" }, + ); + await iVault.waitForDeployment(); + const iVaultAddress = await iVault.getAddress(); + console.log(`InceptionVault address: ${iVaultAddress}`); + // 3. set the vault + tx = await iToken.setVault(iVaultAddress); + await tx.wait(); + // 6. set RatioFeed + tx = await iVault.setRatioFeed(ratioFeedAddress);//("0x90D5a4860e087462F8eE15B52D9b1914BdC977B5"); + await tx.wait(); + + const feed = await ethers.getContractAt("IInceptionRatioFeed", ratioFeedAddress); //"0x90D5a4860e087462F8eE15B52D9b1914BdC977B5"); + //await feed.updateRatioBatch([iTokenAddress], ["1000000000000000000"]); // currently reverts with L1 ratiofeed due to access stuff + + return [iTokenAddress, iVaultAddress]; +}; + +const deployERC20Rebalancer = async ( + defaultChainId, + inceptionToken, + underlyingAsset, + lockbox, + inceptionVault, + defaultAdapter, + operator, +) => { + const ERC20RebalancerFactory = await hre.ethers.getContractFactory("ERC20Rebalancer"); + const rebalancer = await upgrades.deployProxy( + ERC20RebalancerFactory, + [defaultChainId, inceptionToken, underlyingAsset, lockbox, inceptionVault, defaultAdapter, operator], + { kind: "transparent" }, + ); + await rebalancer.waitForDeployment(); + console.log(`Rebalancer deployed, setup...`); + const rebalancerAddr = await rebalancer.getAddress(); + console.log(`ERC20Rebalancer address: ${rebalancerAddr}`); + await rebalancer.setInfoMaxDelay(36000n); + // set rebalancer as target receiver in L1 adapter + const l1addapter = await ethers.getContractAt("LZCrossChainAdapterL1", defaultAdapter); + // TODO fix (permissions on L1 adapter?) + // await l1addapter.setTargetReceiver(rebalancerAddr); + + return rebalancerAddr; +}; + +const setRebalancerForItoken = async (reb, it) => { + const itoken = ethers.getContractAt("InceptionToken", it); + // TODO fix (permissions on L1 adapter?) + //await itoken.setRebalancer(reb); +} + +const main = async () => { + const [deployer] = await ethers.getSigners(); + // Stage 1: this deploys and configures L1 contracts that don't depend on knowing L2 addresses + let obj = await loadState(); + + if ((!obj.iTokenAddressL1 || !obj.iVaultAddressL1) && (!obj.strategyAddress || !obj.inceptionLibAddress || !obj.ratioFeedAddressL1 || !obj.underlyingAssetL1)) { + console.log("Missing required config info for IV-L1 deployment"); + return; + } + + if (!obj.rebalancer && (!obj.chainIdL1 || !obj.underlyingAssetL1 || !obj.lockbox || !obj.crossChainL1)) { + console.log("Missing required config info for rebalancer deployment"); + return; + } + + console.log(obj); + if (!obj.iTokenAddressL1 || !obj.iVaultAddressL1) { + console.log(`Deploying IOVL1...`); + [obj.iTokenAddressL1, obj.iVaultAddressL1] = await deployVaultAndToken(await deployer.getAddress(), obj.strategyAddress, obj.inceptionLibAddress, obj.ratioFeedAddressL1, obj.underlyingAssetL1); + } + await saveState(obj); + + if (!obj.rebalancer) { + console.log(`Deploying rebalancer...`); + obj.rebalancer = await deployERC20Rebalancer(obj.chainIdL1, obj.iTokenAddressL1, obj.underlyingAssetL1, obj.lockbox, obj.iVaultAddressL1, obj.crossChainL1, await deployer.getAddress()); + await setRebalancerForItoken(obj.rebalancer, obj.iTokenAddressL1); + } + await saveState(obj); +} + +main().then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); \ No newline at end of file diff --git a/projects/omnichain-deployer/scripts/stage2.js b/projects/omnichain-deployer/scripts/stage2.js new file mode 100644 index 00000000..7999a593 --- /dev/null +++ b/projects/omnichain-deployer/scripts/stage2.js @@ -0,0 +1,154 @@ +const { ethers, upgrades } = require("hardhat"); +const fs = require('node:fs/promises'); + + + +const loadState = async () => { + const data = await fs.readFile('state.json', { encoding: 'utf8' }); + const obj = JSON.parse(data); + return obj; +} + +const saveState = async (state) => { + const data = JSON.stringify(state); + await fs.writeFile('state.json', data, { encoding: 'utf8' }); +} + +const deployL2token = async (name, symbol) => { + // 1. Deploy InceptionToken (InETH) + const inETHFactory = await ethers.getContractFactory("InceptionToken"); + const inETH = await upgrades.deployProxy(inETHFactory, [name, symbol], { kind: "transparent" }); + await inETH.waitForDeployment(); + const inETHAddress = await inETH.getAddress(); + console.log(`InceptionToken deployed at: ${inETHAddress}`); + return inETHAddress; +} + +const deployL2vault = async (incToken, underlying, adapter, ratiofeed, vaultName, operatorAddress) => { + + const InceptionOmniVaultFactory = await ethers.getContractFactory("ERC20OmniVault_E2"); + console.log("Deploying Transparent Proxy..."); + + const args = [ + vaultName, + operatorAddress, + incToken, + underlying, + adapter, + ]; + const inceptionOmniVault = await upgrades.deployProxy( + InceptionOmniVaultFactory, + args, + /* { + initializer: "initialize", + }, */ + ); + + console.log("Waiting for deployment..."); + await inceptionOmniVault.waitForDeployment(); + + const deployedAddress = await inceptionOmniVault.getAddress(); + console.log("InceptionOmniVault deployed to (proxy):", deployedAddress); + + const implementationAddress = await upgrades.erc1967.getImplementationAddress(deployedAddress); + console.log("InceptionOmniVault implementation deployed at:", implementationAddress); + + const adminAddress = await upgrades.erc1967.getAdminAddress(deployedAddress); + console.log("Proxy Admin Address:", adminAddress); +// console.log(`Target receiver set successfully on LZCrossChainAdapterL2: ${deployedAddress}`); + + await inceptionOmniVault.setRatioFeed(ratiofeed); + + // uncomment if needed + //TODO fix + // const feed = ethers.getContractAt("InceptionRatioFeed", ratiofeed); //"0x90D5a4860e087462F8eE15B52D9b1914BdC977B5"); + // await feed.updateRatioBatch([incToken], ["1000000000000000000"]); + + // todo: is it safe with live token but no vault? + //await inETH.setVault(deployedAddress); + //console.log(`Token vault address set: ${deployedAddress}`); + + + return deployedAddress; +} + +const setVaultInIncToken = async (vault, tokenAddr) => { + const token = await ethers.getContractAt("InceptionToken", tokenAddr); + const vCon = await ethers.getContractAt("ERC20OmniVault_E2", vault) + await token.setVault(await vCon.getAddress()); +} + +const setTargetReceiver = async (adapter, tr) => { + const a = await ethers.getContractAt("FraxFerryLZCrossChainAdapterL2", adapter); + await a.setTargetReceiver(tr); +} + +const deployL2adapter = async (deployer, chainidL1, eidL1, LZEndpointL2, ferryL2, assetL2, rebalancerL1, adapterL1) => { + + const args_x = [assetL2, ferryL2/*, rebalancerL1*/, LZEndpointL2, deployer, chainidL1, [eidL1], [chainidL1]]; + console.log("Deploying L2 adapter..."); + const contractFactory = await ethers.getContractFactory("FraxFerryLZCrossChainAdapterL2"); + const contract = await upgrades.deployProxy(contractFactory, args_x, { + kind: "transparent", + }); + await contract.waitForDeployment(); + console.log( + `Proxy deployed at:`, + await contract.getAddress(), + ); + + await contract.setDestination(rebalancerL1); + + const proxyAdminAddress = await upgrades.erc1967.getAdminAddress( + await contract.getAddress(), + ); + console.log("ProxyAdmin deployed at:", proxyAdminAddress); + + const implementationAddress = await upgrades.erc1967.getImplementationAddress( + await contract.getAddress(), + ); + console.log("Implementation deployed at:", implementationAddress); + + //await contract.setTargetReceiver(vaultL2); + await contract.setPeer(eidL1,"0x000000000000000000000000" + adapterL1.substring(2)); + + return contract.getAddress(); + +} + + +const main = async () => { + const [deployer] = await ethers.getSigners(); + // Stage 2: deploy L2 with L1 addresses already being known + let obj = await loadState(); + + if(!obj.iTokenAddressL2) { + console.log("Deploying L2 iToken..."); + obj.iTokenAddressL2 = await deployL2token(obj.tokenName, obj.tokenSymbol); + } + await saveState(obj); + + if (!obj.crossChainL2) { + console.log("Deploying L2 adapter..."); + obj.crossChainL2 = await deployL2adapter(await deployer.getAddress(), obj.chainIdL1, obj.eidL1, obj.lzEndpointL2, obj.ferryL2, obj.underlyingAssetL2, obj.rebalancer, obj.crossChainL1); + } + await saveState(obj); + + if (!obj.iVaultAddressL2) { + console.log("Deploying L2 IOV..."); + obj.iVaultAddressL2 = await deployL2vault(obj.iTokenAddressL2, obj.underlyingAssetL2, obj.crossChainL2, obj.ratioFeedAddressL2, obj.vaultNameL2, await deployer.getAddress()); + console.log("Config 1..."); + await setVaultInIncToken(obj.iVaultAddressL2, obj.iTokenAddressL2); + console.log("Config 2..."); + await setTargetReceiver(obj.crossChainL2, obj.iVaultAddressL2) + } + await saveState(obj); + + +} + +main().then(() => process.exit(0)) +.catch(error => { + console.error(error); + process.exit(1); +}); \ No newline at end of file diff --git a/projects/omnichain-deployer/scripts/stage3.js b/projects/omnichain-deployer/scripts/stage3.js new file mode 100644 index 00000000..3d2771b4 --- /dev/null +++ b/projects/omnichain-deployer/scripts/stage3.js @@ -0,0 +1,34 @@ +const { ethers, upgrades } = require("hardhat"); +const fs = require('node:fs/promises'); + + + +const loadState = async () => { + const data = await fs.readFile('state.json', { encoding: 'utf8' }); + const obj = JSON.parse(data); + return obj; +} + +const saveState = async (state) => { + const data = JSON.stringify(state); + await fs.writeFile('state.json', data, { encoding: 'utf8' }); +} +const setLZpeer = async (adapterL1, adapterL2, eidL2) => { + let contract = await ethers.getContractAt("LZCrossChainAdapterL1", adapterL1); + await contract.setPeer(eidL2,"0x000000000000000000000000" + adapterL2.substring(2)); +} + +const main = async () => { + // Stage 3: this configures L1 adapter with now known L2 addresses. + // Run as L1 adapter owner. + let obj = await loadState(); + await setLZpeer(obj.crossChainL1, obj.crossChainL2, obj.eidL2); + await saveState(obj); + +} + +main().then(() => process.exit(0)) +.catch(error => { + console.error(error); + process.exit(1); +}); \ No newline at end of file diff --git a/projects/omnichain-deployer/state.example.json b/projects/omnichain-deployer/state.example.json new file mode 100644 index 00000000..51e163bf --- /dev/null +++ b/projects/omnichain-deployer/state.example.json @@ -0,0 +1,27 @@ +{ + "chainIdL1": "17000", + "chainIdL2": "2522", + "eidL1": "40217", + "eidL2": "40255", + "ferryL2": "0x54102317E9AeAcbb1Eac32214d099D60d260E9a3", + "lzEndpointL2": "0x6EDCE65403992e310A62460808c4b910D972f10f", + "ratioFeedAddressL2": "0xD4D49e67710d3d466417b566b6c0a3Dd4e94e87a", + "inceptionLibAddress": "0x3022ad4552b5fb285F36C71Bdd1545c33a4937ca", + "strategyAddress": "", + "ratioFeedAddressL1": "0x90D5a4860e087462F8eE15B52D9b1914BdC977B5", + "underlyingAssetL1": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", + "underlyingAssetL2": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", + + "iTokenAddressL1": "", + "iVaultAddressL1": "", + "lockbox": "0x865Ff05496eA73b0fA49fbBB97F2812776362c87", + "crossChainL1": "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E", + "rebalancer": "", + + "iTokenAddressL2": "", + "iVaultAddressL2": "", + "crossChainL2": "", + "tokenName": "test", + "tokenSymbol": "TST", + "vaultNameL2": "IOVL2" +} \ No newline at end of file diff --git a/projects/omnichain-deployer/state.json b/projects/omnichain-deployer/state.json new file mode 100644 index 00000000..498e842a --- /dev/null +++ b/projects/omnichain-deployer/state.json @@ -0,0 +1,24 @@ +{ + "chainIdL1": "1", + "chainIdL2": "2522", + "eidL1": "40255", + "ferryL2": "0x54102317E9AeAcbb1Eac32214d099D60d260E9a3", + "lzEndpointL2": "0x6EDCE65403992e310A62460808c4b910D972f10f", + "ratioFeedAddressL2": "0xD4D49e67710d3d466417b566b6c0a3Dd4e94e87a", + "inceptionLibAddress": "0x3022ad4552b5fb285F36C71Bdd1545c33a4937ca", + "strategyAddress": "0x865Ff05496eA73b0fA49fbBB97F2812776362c87", + "ratioFeedAddressL1": "0x90D5a4860e087462F8eE15B52D9b1914BdC977B5", + "underlyingAssetL1": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", + "underlyingAssetL2": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", + "iTokenAddressL1": "0x08A90aF9A6eBBe11c322AD9930CC58E122231B5A", + "iVaultAddressL1": "0xFe44FF05D7C06E792D6eF4762B2441e82Bc602a5", + "lockbox": "0x865Ff05496eA73b0fA49fbBB97F2812776362c87", + "crossChainL1": "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E", + "rebalancer": "0x47330D2fe6F75899597C14d615003Ef561B01B14", + "iTokenAddressL2": "0xEe170eFF1BCeA1f7a46F46634fa40d590AAa5200", + "iVaultAddressL2": "0x121f7e412A536D673DaB310F1448ce0e3843068a", + "crossChainL2": "0x022D2B8173c7BCad83420d0953362335afB89355", + "tokenName": "test", + "tokenSymbol": "TST", + "vaultNameL2": "IOVL2" +} \ No newline at end of file diff --git a/projects/omnichain-deployer/tsconfig.json b/projects/omnichain-deployer/tsconfig.json new file mode 100644 index 00000000..9c89e811 --- /dev/null +++ b/projects/omnichain-deployer/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true + } + } + \ No newline at end of file diff --git a/projects/omnichain-deployer/yarn.lock b/projects/omnichain-deployer/yarn.lock new file mode 100644 index 00000000..05715322 --- /dev/null +++ b/projects/omnichain-deployer/yarn.lock @@ -0,0 +1,5130 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + +"@aws-crypto/crc32@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" + integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" + integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== + dependencies: + "@aws-crypto/sha256-js" "^5.2.0" + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-js@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" + integrity sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g== + dependencies: + "@aws-crypto/util" "^1.2.2" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" + integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/supports-web-crypto@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" + integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== + dependencies: + tslib "^2.6.2" + +"@aws-crypto/util@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.2.tgz#b28f7897730eb6538b21c18bd4de22d0ea09003c" + integrity sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg== + dependencies: + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/util@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" + integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-lambda@^3.563.0": + version "3.738.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-lambda/-/client-lambda-3.738.0.tgz#85cc97291ab147d70e4f8fe5e4923237aad7dd1d" + integrity sha512-arkwnxoMl1m83cMPNJ8HXyQgBBgHRQBaRyg1K/BjLB5QTXzFTnRQo9P+CJvb8J80wL+SkWgpl+07o33/qXP+WA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.734.0" + "@aws-sdk/credential-provider-node" "3.738.0" + "@aws-sdk/middleware-host-header" "3.734.0" + "@aws-sdk/middleware-logger" "3.734.0" + "@aws-sdk/middleware-recursion-detection" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.734.0" + "@aws-sdk/region-config-resolver" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.734.0" + "@aws-sdk/util-user-agent-browser" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.734.0" + "@smithy/config-resolver" "^4.0.1" + "@smithy/core" "^3.1.1" + "@smithy/eventstream-serde-browser" "^4.0.1" + "@smithy/eventstream-serde-config-resolver" "^4.0.1" + "@smithy/eventstream-serde-node" "^4.0.1" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/hash-node" "^4.0.1" + "@smithy/invalid-dependency" "^4.0.1" + "@smithy/middleware-content-length" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.2" + "@smithy/middleware-retry" "^4.0.3" + "@smithy/middleware-serde" "^4.0.1" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.2" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.3" + "@smithy/util-defaults-mode-node" "^4.0.3" + "@smithy/util-endpoints" "^3.0.1" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + "@smithy/util-stream" "^4.0.2" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.2" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.734.0.tgz#789c98267f07aaa7155b404d0bfd4059c4b4deb9" + integrity sha512-oerepp0mut9VlgTwnG5Ds/lb0C0b2/rQ+hL/rF6q+HGKPfGsCuPvFx1GtwGKCXd49ase88/jVgrhcA9OQbz3kg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.734.0" + "@aws-sdk/middleware-host-header" "3.734.0" + "@aws-sdk/middleware-logger" "3.734.0" + "@aws-sdk/middleware-recursion-detection" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.734.0" + "@aws-sdk/region-config-resolver" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.734.0" + "@aws-sdk/util-user-agent-browser" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.734.0" + "@smithy/config-resolver" "^4.0.1" + "@smithy/core" "^3.1.1" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/hash-node" "^4.0.1" + "@smithy/invalid-dependency" "^4.0.1" + "@smithy/middleware-content-length" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.2" + "@smithy/middleware-retry" "^4.0.3" + "@smithy/middleware-serde" "^4.0.1" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.2" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.3" + "@smithy/util-defaults-mode-node" "^4.0.3" + "@smithy/util-endpoints" "^3.0.1" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.734.0.tgz#fa2289750efd75f4fb8c45719a4a4ea7e7755160" + integrity sha512-SxnDqf3vobdm50OLyAKfqZetv6zzwnSqwIwd3jrbopxxHKqNIM/I0xcYjD6Tn+mPig+u7iRKb9q3QnEooFTlmg== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/core" "^3.1.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/signature-v4" "^5.0.1" + "@smithy/smithy-client" "^4.1.2" + "@smithy/types" "^4.1.0" + "@smithy/util-middleware" "^4.0.1" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.734.0.tgz#6c0b1734764a7fb1616455836b1c3dacd99e50a3" + integrity sha512-gtRkzYTGafnm1FPpiNO8VBmJrYMoxhDlGPYDVcijzx3DlF8dhWnowuSBCxLSi+MJMx5hvwrX2A+e/q0QAeHqmw== + dependencies: + "@aws-sdk/core" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.734.0.tgz#21c5fbb380d1dd503491897b346e1e0b1d06ae41" + integrity sha512-JFSL6xhONsq+hKM8xroIPhM5/FOhiQ1cov0lZxhzZWj6Ai3UAjucy3zyIFDr9MgP1KfCYNdvyaUq9/o+HWvEDg== + dependencies: + "@aws-sdk/core" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/property-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.2" + "@smithy/types" "^4.1.0" + "@smithy/util-stream" "^4.0.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.734.0.tgz#5769ae28cd255d4fc946799c0273b4af6f2f12bb" + integrity sha512-HEyaM/hWI7dNmb4NhdlcDLcgJvrilk8G4DQX6qz0i4pBZGC2l4iffuqP8K6ZQjUfz5/6894PzeFuhTORAMd+cg== + dependencies: + "@aws-sdk/core" "3.734.0" + "@aws-sdk/credential-provider-env" "3.734.0" + "@aws-sdk/credential-provider-http" "3.734.0" + "@aws-sdk/credential-provider-process" "3.734.0" + "@aws-sdk/credential-provider-sso" "3.734.0" + "@aws-sdk/credential-provider-web-identity" "3.734.0" + "@aws-sdk/nested-clients" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@smithy/credential-provider-imds" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.738.0": + version "3.738.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.738.0.tgz#0a470fc4d2e791c26da57261b8b14f07de43cd74" + integrity sha512-3MuREsazwBxghKb2sQQHvie+uuK4dX4/ckFYiSoffzJQd0YHxaGxf8cr4NOSCQCUesWu8D3Y0SzlnHGboVSkpA== + dependencies: + "@aws-sdk/credential-provider-env" "3.734.0" + "@aws-sdk/credential-provider-http" "3.734.0" + "@aws-sdk/credential-provider-ini" "3.734.0" + "@aws-sdk/credential-provider-process" "3.734.0" + "@aws-sdk/credential-provider-sso" "3.734.0" + "@aws-sdk/credential-provider-web-identity" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@smithy/credential-provider-imds" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.734.0.tgz#eb1de678a9c3d2d7b382e74a670fa283327f9c45" + integrity sha512-zvjsUo+bkYn2vjT+EtLWu3eD6me+uun+Hws1IyWej/fKFAqiBPwyeyCgU7qjkiPQSXqk1U9+/HG9IQ6Iiz+eBw== + dependencies: + "@aws-sdk/core" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.734.0.tgz#68a9d678319e9743d65cf59e2d29c0c440d8975c" + integrity sha512-cCwwcgUBJOsV/ddyh1OGb4gKYWEaTeTsqaAK19hiNINfYV/DO9r4RMlnWAo84sSBfJuj9shUNsxzyoe6K7R92Q== + dependencies: + "@aws-sdk/client-sso" "3.734.0" + "@aws-sdk/core" "3.734.0" + "@aws-sdk/token-providers" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.734.0.tgz#666b61cc9f498a3aaecd8e38c9ae34aef37e2e64" + integrity sha512-t4OSOerc+ppK541/Iyn1AS40+2vT/qE+MFMotFkhCgCJbApeRF2ozEdnDN6tGmnl4ybcUuxnp9JWLjwDVlR/4g== + dependencies: + "@aws-sdk/core" "3.734.0" + "@aws-sdk/nested-clients" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.734.0.tgz#a9a02c055352f5c435cc925a4e1e79b7ba41b1b5" + integrity sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.734.0.tgz#d31e141ae7a78667e372953a3b86905bc6124664" + integrity sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.734.0.tgz#4fa1deb9887455afbb39130f7d9bc89ccee17168" + integrity sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.734.0.tgz#12d400ccb98593f2b02e4fb08239cb9835d41d3a" + integrity sha512-MFVzLWRkfFz02GqGPjqSOteLe5kPfElUrXZft1eElnqulqs6RJfVSpOV7mO90gu293tNAeggMWAVSGRPKIYVMg== + dependencies: + "@aws-sdk/core" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.734.0" + "@smithy/core" "^3.1.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/nested-clients@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.734.0.tgz#10a116d141522341c446b11783551ef863aabd27" + integrity sha512-iph2XUy8UzIfdJFWo1r0Zng9uWj3253yvW9gljhtu+y/LNmNvSnJxQk1f3D2BC5WmcoPZqTS3UsycT3mLPSzWA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.734.0" + "@aws-sdk/middleware-host-header" "3.734.0" + "@aws-sdk/middleware-logger" "3.734.0" + "@aws-sdk/middleware-recursion-detection" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.734.0" + "@aws-sdk/region-config-resolver" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.734.0" + "@aws-sdk/util-user-agent-browser" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.734.0" + "@smithy/config-resolver" "^4.0.1" + "@smithy/core" "^3.1.1" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/hash-node" "^4.0.1" + "@smithy/invalid-dependency" "^4.0.1" + "@smithy/middleware-content-length" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.2" + "@smithy/middleware-retry" "^4.0.3" + "@smithy/middleware-serde" "^4.0.1" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.2" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.3" + "@smithy/util-defaults-mode-node" "^4.0.3" + "@smithy/util-endpoints" "^3.0.1" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.734.0.tgz#45ffbc56a3e94cc5c9e0cd596b0fda60f100f70b" + integrity sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.734.0.tgz#8880e94f21457fe5dd7074ecc52fdd43180cbb2c" + integrity sha512-2U6yWKrjWjZO8Y5SHQxkFvMVWHQWbS0ufqfAIBROqmIZNubOL7jXCiVdEFekz6MZ9LF2tvYGnOW4jX8OKDGfIw== + dependencies: + "@aws-sdk/nested-clients" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.734.0", "@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.222.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.734.0.tgz#af5e620b0e761918282aa1c8e53cac6091d169a2" + integrity sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.734.0.tgz#43bac42a21a45477a386ccf398028e7f793bc217" + integrity sha512-w2+/E88NUbqql6uCVAsmMxDQKu7vsKV0KqhlQb0lL+RCq4zy07yXYptVNs13qrnuTfyX7uPXkXrlugvK9R1Ucg== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/types" "^4.1.0" + "@smithy/util-endpoints" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.723.0.tgz#174551bfdd2eb36d3c16e7023fd7e7ee96ad0fa9" + integrity sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.734.0.tgz#bbf3348b14bd7783f60346e1ce86978999450fe7" + integrity sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/types" "^4.1.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.734.0.tgz#d5c6ee192cea9d53a871178a2669b8b4dea39a68" + integrity sha512-c6Iinh+RVQKs6jYUFQ64htOU2HUXFQ3TVx+8Tu3EDF19+9vzWi9UukhIMH9rqyyEXIAkk9XL7avt8y2Uyw2dGA== + dependencies: + "@aws-sdk/middleware-user-agent" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@bytecodealliance/preview2-shim@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz#9bc1cadbb9f86c446c6f579d3431c08a06a6672e" + integrity sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + 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" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + 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" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + 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" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + 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" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + 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" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + 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" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + 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" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + 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.0" + "@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.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + 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" + +"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + 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" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + 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" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + 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" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + 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" + +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@layerzerolabs/lz-evm-messagelib-v2@^2.3.39": + version "2.3.44" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-messagelib-v2/-/lz-evm-messagelib-v2-2.3.44.tgz#3684bf9de5cf19e417626970ca09528496d70fc1" + integrity sha512-2HZMjV0KZH0e3W2KL/H8HvE3I7QMJw1no46IQ5LpGSvxIm5Ri45tnQAynbmEbRyKXrRSP3Brkvkc2U7VrfZ/Cg== + +"@layerzerolabs/lz-evm-protocol-v2@^2.3.39": + version "2.3.44" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-protocol-v2/-/lz-evm-protocol-v2-2.3.44.tgz#63c967dcb6aeaa4275fa51c6976b27133f9c16ff" + integrity sha512-oNtwl4HGCogFVOr45T3FfrkB0/CRW2eGAEScBw/FY/6mlncnS4dqlvrCJ3SFlK17cu1w9q0ztD3NzS9sUrb7vw== + +"@layerzerolabs/lz-v2-utilities@^2.3.39": + version "2.3.44" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-v2-utilities/-/lz-v2-utilities-2.3.44.tgz#d1937c68060147e3856ea7368cba72c7cff88ad8" + integrity sha512-0p7tdJCf6BSmN38tAnO7WyOoC84NDTCQt1MqPBomXTyIux1RLpkS82jcxv92+E+1LNulhHIx5W62gaKKx27B2A== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/solidity" "^5.7.0" + bs58 "^5.0.0" + tiny-invariant "^1.3.1" + +"@layerzerolabs/oapp-evm@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@layerzerolabs/oapp-evm/-/oapp-evm-0.0.4.tgz#af86216842c7da5a270eeff04a6b16320f113f7b" + integrity sha512-h0papPd9mQAPsWoQuzZk3dIcLWLrJ8tnDNPg7Hn8aa+v7HPY1lo6Zmyn3t7RmzfKnvrjnjKWDTbX2zgesu4hYg== + dependencies: + ethers "^5.7.2" + +"@layerzerolabs/oft-evm@^0.0.11": + version "0.0.11" + resolved "https://registry.yarnpkg.com/@layerzerolabs/oft-evm/-/oft-evm-0.0.11.tgz#4ff3d396da450e2e88274af5b304a2ce1854106e" + integrity sha512-lkhEiwMrcC0CtMcHkTTnaJwOsE/tE4MiO1nbU3QcWrTOGQj0BGiH05c50+lvZeFHlObp/QpIDXELnJgd2rz29w== + +"@layerzerolabs/test-devtools-evm-hardhat@~0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@layerzerolabs/test-devtools-evm-hardhat/-/test-devtools-evm-hardhat-0.3.0.tgz#f9666dca38145b198b3d83be5a5f179fb722822d" + integrity sha512-776SF+Rp6+8PPMjl5WYglgfas6IyqZ2g7dU73seQC9VaPfbM+6XORtOCLVUxl6Hrp43edAI0dZuIm6xWhVFiYQ== + +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/curves@1.4.2", "@noble/curves@~1.4.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== + dependencies: + "@noble/hashes" "1.4.0" + +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + +"@noble/hashes@^1.4.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" + integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== + +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nomicfoundation/edr-darwin-arm64@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.7.0.tgz#2be3338a61508ed1d24326c82b9aa9224a844dd7" + integrity sha512-vAH20oh4GaSB/iQFTRcoO8jLc0CLd9XuLY9I7vtcqZWAiM4U1J4Y8cu67PWmtxbvUQOqXR7S6FtAr8/AlWm14g== + +"@nomicfoundation/edr-darwin-x64@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.7.0.tgz#d2f782fc43bcae1c9aca3130aca6aa2a964e8559" + integrity sha512-WHDdIrPvLlgXQr2eKypBM5xOZAwdxhDAEQIvEMQL8tEEm2qYW2bliUlssBPrs8E3bdivFbe1HizImslMAfU3+g== + +"@nomicfoundation/edr-linux-arm64-gnu@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.7.0.tgz#48b156744989acc8e6b0b754158a26e10ad865ed" + integrity sha512-WXpJB54ukz1no7gxCPXVEw9pgl/9UZ/WO3l1ctyv/T7vOygjqA4SUd6kppTs6MNXAuTiisPtvJ/fmvHiMBLrsw== + +"@nomicfoundation/edr-linux-arm64-musl@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.7.0.tgz#60351352ec26704fed8a232430bf3793d17c29cd" + integrity sha512-1iZYOcEgc+zJI7JQrlAFziuy9sBz1WgnIx3HIIu0J7lBRZ/AXeHHgATb+4InqxtEx9O3W8A0s7f11SyFqJL4Aw== + +"@nomicfoundation/edr-linux-x64-gnu@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.7.0.tgz#a7b056bfd46ccfde4d55c9601da5a410c2fce40f" + integrity sha512-wSjC94WcR5MM8sg9w3OsAmT6+bbmChJw6uJKoXR3qscps/jdhjzJWzfgT0XGRq3XMUfimyafW2RWOyfX3ouhrQ== + +"@nomicfoundation/edr-linux-x64-musl@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.7.0.tgz#0fe9f5ace05072e845f71c8fbd28e57798dd6ab5" + integrity sha512-Us22+AZ7wkG1mZwxqE4S4ZcuwkEA5VrUiBOJSvKHGOgy6vFvB/Euh5Lkp4GovwjrtiXuvyGO2UmtkzymZKDxZw== + +"@nomicfoundation/edr-win32-x64-msvc@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.7.0.tgz#f1b9a0a643db8dffcf5edb827c18e1cef25c4367" + integrity sha512-HAry0heTsWkzReVtjHwoIq3BgFCvXpVhJ5qPmTnegZGsr/KxqvMmHyDMifzKao4bycU8yrpTSyOiAJt27RWjzQ== + +"@nomicfoundation/edr@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.7.0.tgz#175cb8a81eac585dc76ad41585c908542acb9383" + integrity sha512-+Zyu7TE47TGNcPhOfWLPA/zISs32WDMXrhSWdWYyPHDVn/Uux5TVuOeScKb0BR/R8EJ+leR8COUF/EGxvDOVKg== + dependencies: + "@nomicfoundation/edr-darwin-arm64" "0.7.0" + "@nomicfoundation/edr-darwin-x64" "0.7.0" + "@nomicfoundation/edr-linux-arm64-gnu" "0.7.0" + "@nomicfoundation/edr-linux-arm64-musl" "0.7.0" + "@nomicfoundation/edr-linux-x64-gnu" "0.7.0" + "@nomicfoundation/edr-linux-x64-musl" "0.7.0" + "@nomicfoundation/edr-win32-x64-msvc" "0.7.0" + +"@nomicfoundation/ethereumjs-common@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb" + integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.4" + +"@nomicfoundation/ethereumjs-rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" + integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== + +"@nomicfoundation/ethereumjs-tx@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" + integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38" + integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/hardhat-chai-matchers@^2.0.2": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.8.tgz#9c7cfc4ad0f0a5e9cf16aba8ab668c02f6e273aa" + integrity sha512-Z5PiCXH4xhNLASROlSUOADfhfpfhYO6D7Hn9xp8PddmHey0jq704cr6kfU8TRrQ4PUZbpfsZadPj+pCfZdjPIg== + dependencies: + "@types/chai-as-promised" "^7.1.3" + chai-as-promised "^7.1.1" + deep-eql "^4.0.1" + ordinal "^1.0.3" + +"@nomicfoundation/hardhat-ethers@^3.0.5": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz#af078f566373abeb77e11cbe69fe3dd47f8bfc27" + integrity sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA== + dependencies: + debug "^4.1.1" + lodash.isequal "^4.5.0" + +"@nomicfoundation/hardhat-network-helpers@^1.0.9": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.12.tgz#2c0abec0c50b75f9d0d71776e49e3b5ef746d289" + integrity sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA== + dependencies: + ethereumjs-util "^7.1.4" + +"@nomicfoundation/hardhat-toolbox@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-4.0.0.tgz#eb1f619218dd1414fa161dfec92d3e5e53a2f407" + integrity sha512-jhcWHp0aHaL0aDYj8IJl80v4SZXWMS1A2XxXa1CA6pBiFfJKuZinCkO6wb+POAt0LIfXB3gA3AgdcOccrcwBwA== + +"@nomicfoundation/hardhat-verify@^2.0.5": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.12.tgz#480819a245a2db0b127e473c62079f7b4f16daa8" + integrity sha512-Lg3Nu7DCXASQRVI/YysjuAX2z8jwOCbS0w5tz2HalWGSTZThqA0v9N0v0psHbKNqzPJa8bNOeapIVSziyJTnAg== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + debug "^4.1.1" + lodash.clonedeep "^4.5.0" + picocolors "^1.1.0" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" + +"@nomicfoundation/slang@^0.18.3": + version "0.18.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang/-/slang-0.18.3.tgz#976b6c3820081cebf050afbea434038aac9313cc" + integrity sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ== + dependencies: + "@bytecodealliance/preview2-shim" "0.17.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz#3a9c3b20d51360b20affb8f753e756d553d49557" + integrity sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz#74dcfabeb4ca373d95bd0d13692f44fcef133c28" + integrity sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz#4af5849a89e5a8f511acc04f28eb5d4460ba2b6a" + integrity sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz#54036808a9a327b2ff84446c130a6687ee702a8e" + integrity sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz#466cda0d6e43691986c944b909fc6dbb8cfc594e" + integrity sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz#2b35826987a6e94444140ac92310baa088ee7f94" + integrity sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz#e6363d13b8709ca66f330562337dbc01ce8bbbd9" + integrity sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz#8bcea7d300157bf3a770a851d9f5c5e2db34ac55" + integrity sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.2" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.2" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.2" + +"@nomiclabs/hardhat-ethers@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" + integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== + +"@openzeppelin/contracts-upgradeable@^5.0.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.2.0.tgz#caf9a6eaf4f16d7f90f9b45a6db4e7b125f4b13b" + integrity sha512-mZIu9oa4tQTlGiOJHk6D3LdJlqFqF6oNOSn6S6UVJtzfs9UsY9/dhMEbAVTwElxUtJnjpf6yA062+oBp+eOyPg== + +"@openzeppelin/contracts@^5.0.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.2.0.tgz#bd020694218202b811b0ea3eec07277814c658da" + integrity sha512-bxjNie5z89W1Ea0NZLZluFh8PrFNn9DH8DQlujEok2yjsOlraUPKID5p1Wk3qdNbf6XkQ1Os2RvfiHrrXLHWKA== + +"@openzeppelin/defender-sdk-base-client@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-2.1.0.tgz#f4f969fb327068c1024ba61b10a24f88cffdeece" + integrity sha512-YxrOgjESsbmxArLoe8kRA6lKwz/Qm/OtaZBfquzAg+w0jgOG9ogFuXA3NI6w2sVw1w/PzI1dWKe30u62p5vLXw== + dependencies: + "@aws-sdk/client-lambda" "^3.563.0" + amazon-cognito-identity-js "^6.3.6" + async-retry "^1.3.3" + +"@openzeppelin/defender-sdk-deploy-client@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-2.1.0.tgz#02cfa27041c50f79694103c5ba80f0631375f481" + integrity sha512-tg1EIqFVQ59UNbEV7a5XHVvsGM1dL0tVrwXMB4EzlDnDRS70l6jjeCgl6d0SUQqK8Cob1AzjdLn9+Ax+oFcceQ== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.1.0" + axios "^1.7.4" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-network-client@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-2.1.0.tgz#6486fff52f3531604e325e4887839e020c127755" + integrity sha512-ebtSmihHMlcjFTtXyB/IFr+CjCcjdW0nV+ijG24SNnRvOaHn2BNORs6CwhdEZc8ok9YHWnKouGKdfzmxX+mp/A== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.1.0" + axios "^1.7.4" + lodash "^4.17.21" + +"@openzeppelin/hardhat-upgrades@^3.0.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.9.0.tgz#3317292f5e338012d0263bfd0f8458466c3fb0a8" + integrity sha512-7YYBSxRnO/X+tsQkVgtz3/YbwZuQPjbjQ3m0A/8+vgQzdPfulR93NaFKgZfMonnrriXb5O/ULjIDPI+8nuqtyQ== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^2.1.0" + "@openzeppelin/defender-sdk-deploy-client" "^2.1.0" + "@openzeppelin/defender-sdk-network-client" "^2.1.0" + "@openzeppelin/upgrades-core" "^1.41.0" + chalk "^4.1.0" + debug "^4.1.1" + ethereumjs-util "^7.1.5" + proper-lockfile "^4.1.1" + undici "^6.11.1" + +"@openzeppelin/upgrades-core@^1.41.0": + version "1.42.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.42.1.tgz#a2784e8d9c09f4a79b7e5cbb11933062ad709835" + integrity sha512-8qnz2XfQrco8R8u9NjV+KiSLrVn7DnWFd+3BuhTUjhVy0bzCSu2SMKCVpZLtXbxf4f2dpz8jYPQYRa6s23PhLA== + dependencies: + "@nomicfoundation/slang" "^0.18.3" + cbor "^10.0.0" + chalk "^4.1.0" + compare-versions "^6.0.0" + debug "^4.1.1" + ethereumjs-util "^7.0.3" + minimatch "^9.0.5" + minimist "^1.2.7" + proper-lockfile "^4.1.1" + solidity-ast "^0.4.51" + +"@scure/base@~1.1.0", "@scure/base@~1.1.6": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== + +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" + integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== + dependencies: + "@noble/curves" "~1.4.0" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" + integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== + dependencies: + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@smithy/abort-controller@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.0.1.tgz#7c5e73690c4105ad264c2896bd1ea822450c3819" + integrity sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/config-resolver@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.0.1.tgz#3d6c78bbc51adf99c9819bb3f0ea197fe03ad363" + integrity sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + tslib "^2.6.2" + +"@smithy/core@^3.1.1", "@smithy/core@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.1.2.tgz#f5b4c89bf054b717781d71c66b4fb594e06cbb62" + integrity sha512-htwQXkbdF13uwwDevz9BEzL5ABK+1sJpVQXywwGSH973AVOvisHNfpcB8A8761G6XgHoS2kHPqc9DqHJ2gp+/Q== + dependencies: + "@smithy/middleware-serde" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-stream" "^4.0.2" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz#807110739982acd1588a4847b61e6edf196d004e" + integrity sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.0.1.tgz#8e0beae84013eb3b497dd189470a44bac4411bae" + integrity sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^4.1.0" + "@smithy/util-hex-encoding" "^4.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.1.tgz#cdbbb18b9371da363eff312d78a10f6bad82df28" + integrity sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA== + dependencies: + "@smithy/eventstream-serde-universal" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.1.tgz#3662587f507ad7fac5bd4505c4ed6ed0ac49a010" + integrity sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.1.tgz#3799c33e0148d2b923a66577d1dbc590865742ce" + integrity sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q== + dependencies: + "@smithy/eventstream-serde-universal" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.1.tgz#ddb2ab9f62b8ab60f50acd5f7c8b3ac9d27468e2" + integrity sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA== + dependencies: + "@smithy/eventstream-codec" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz#8463393442ca6a1644204849e42c386066f0df79" + integrity sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA== + dependencies: + "@smithy/protocol-http" "^5.0.1" + "@smithy/querystring-builder" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-base64" "^4.0.0" + tslib "^2.6.2" + +"@smithy/hash-node@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.0.1.tgz#ce78fc11b848a4f47c2e1e7a07fb6b982d2f130c" + integrity sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w== + dependencies: + "@smithy/types" "^4.1.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.0.1.tgz#704d1acb6fac105558c17d53f6d55da6b0d6b6fc" + integrity sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/is-array-buffer@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" + integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== + dependencies: + tslib "^2.6.2" + +"@smithy/is-array-buffer@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz#55a939029321fec462bcc574890075cd63e94206" + integrity sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw== + dependencies: + tslib "^2.6.2" + +"@smithy/middleware-content-length@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.0.1.tgz#378bc94ae623f45e412fb4f164b5bb90b9de2ba3" + integrity sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ== + dependencies: + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^4.0.2", "@smithy/middleware-endpoint@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.3.tgz#74b64fb2473ae35649a8d22d41708bc5d8d99df2" + integrity sha512-YdbmWhQF5kIxZjWqPIgboVfi8i5XgiYMM7GGKFMTvBei4XjNQfNv8sukT50ITvgnWKKKpOtp0C0h7qixLgb77Q== + dependencies: + "@smithy/core" "^3.1.2" + "@smithy/middleware-serde" "^4.0.2" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-middleware" "^4.0.1" + tslib "^2.6.2" + +"@smithy/middleware-retry@^4.0.3": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.0.4.tgz#95e55a1b163ff06264f20b4dbbcbd915c8028f60" + integrity sha512-wmxyUBGHaYUqul0wZiset4M39SMtDBOtUr2KpDuftKNN74Do9Y36Go6Eqzj9tL0mIPpr31ulB5UUtxcsCeGXsQ== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/service-error-classification" "^4.0.1" + "@smithy/smithy-client" "^4.1.3" + "@smithy/types" "^4.1.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^4.0.1", "@smithy/middleware-serde@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.0.2.tgz#f792d72f6ad8fa6b172e3f19c6fe1932a856a56d" + integrity sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz#c157653f9df07f7c26e32f49994d368e4e071d22" + integrity sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz#4e84fe665c0774d5f4ebb75144994fc6ebedf86e" + integrity sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ== + dependencies: + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.0.2.tgz#48d47a046cf900ab86bfbe7f5fd078b52c82fab6" + integrity sha512-X66H9aah9hisLLSnGuzRYba6vckuFtGE+a5DcHLliI/YlqKrGoxhisD5XbX44KyoeRzoNlGr94eTsMVHFAzPOw== + dependencies: + "@smithy/abort-controller" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/querystring-builder" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/property-provider@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.0.1.tgz#8d35d5997af2a17cf15c5e921201ef6c5e3fc870" + integrity sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.0.1.tgz#37c248117b29c057a9adfad4eb1d822a67079ff1" + integrity sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz#37e1e05d0d33c6f694088abc3e04eafb65cb6976" + integrity sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg== + dependencies: + "@smithy/types" "^4.1.0" + "@smithy/util-uri-escape" "^4.0.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz#312dc62b146f8bb8a67558d82d4722bb9211af42" + integrity sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz#84e78579af46c7b79c900b6d6cc822c9465f3259" + integrity sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA== + dependencies: + "@smithy/types" "^4.1.0" + +"@smithy/shared-ini-file-loader@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz#d35c21c29454ca4e58914a4afdde68d3b2def1ee" + integrity sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.0.1.tgz#f93401b176150286ba246681031b0503ec359270" + integrity sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA== + dependencies: + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-uri-escape" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^4.1.2", "@smithy/smithy-client@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.1.3.tgz#2c8f9aff3377e7655cebe84239da6be277ba8554" + integrity sha512-A2Hz85pu8BJJaYFdX8yb1yocqigyqBzn+OVaVgm+Kwi/DkN8vhN2kbDVEfADo6jXf5hPKquMLGA3UINA64UZ7A== + dependencies: + "@smithy/core" "^3.1.2" + "@smithy/middleware-endpoint" "^4.0.3" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-stream" "^4.0.2" + tslib "^2.6.2" + +"@smithy/types@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.1.0.tgz#19de0b6087bccdd4182a334eb5d3d2629699370f" + integrity sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.0.1.tgz#b47743f785f5b8d81324878cbb1b5f834bf8d85a" + integrity sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g== + dependencies: + "@smithy/querystring-parser" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/util-base64@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.0.0.tgz#8345f1b837e5f636e5f8470c4d1706ae0c6d0358" + integrity sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg== + dependencies: + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz#965d19109a4b1e5fe7a43f813522cce718036ded" + integrity sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz#3db245f6844a9b1e218e30c93305bfe2ffa473b3" + integrity sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg== + dependencies: + tslib "^2.6.2" + +"@smithy/util-buffer-from@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" + integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-buffer-from@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz#b23b7deb4f3923e84ef50c8b2c5863d0dbf6c0b9" + integrity sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug== + dependencies: + "@smithy/is-array-buffer" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-config-provider@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz#e0c7c8124c7fba0b696f78f0bd0ccb060997d45e" + integrity sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^4.0.3": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.4.tgz#6fa7ba64a80a77f27b9b5c6972918904578b8d5b" + integrity sha512-Ej1bV5sbrIfH++KnWxjjzFNq9nyP3RIUq2c9Iqq7SmMO/idUR24sqvKH2LUQFTSPy/K7G4sB2m8n7YYlEAfZaw== + dependencies: + "@smithy/property-provider" "^4.0.1" + "@smithy/smithy-client" "^4.1.3" + "@smithy/types" "^4.1.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^4.0.3": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.4.tgz#5470fdc96672cee5199620b576d7025de3b17333" + integrity sha512-HE1I7gxa6yP7ZgXPCFfZSDmVmMtY7SHqzFF55gM/GPegzZKaQWZZ+nYn9C2Cc3JltCMyWe63VPR3tSFDEvuGjw== + dependencies: + "@smithy/config-resolver" "^4.0.1" + "@smithy/credential-provider-imds" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/smithy-client" "^4.1.3" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.0.1.tgz#44ccbf1721447966f69496c9003b87daa8f61975" + integrity sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz#dd449a6452cffb37c5b1807ec2525bb4be551e8d" + integrity sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.0.1.tgz#58d363dcd661219298c89fa176a28e98ccc4bf43" + integrity sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/util-retry@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.0.1.tgz#fb5f26492383dcb9a09cc4aee23a10f839cd0769" + integrity sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw== + dependencies: + "@smithy/service-error-classification" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/util-stream@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.0.2.tgz#63495d3f7fba9d78748d540921136dc4a8d4c067" + integrity sha512-0eZ4G5fRzIoewtHtwaYyl8g2C+osYOT4KClXgfdNEDAgkbe2TYPqcnw4GAWabqkZCax2ihRGPe9LZnsPdIUIHA== + dependencies: + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/types" "^4.1.0" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz#a96c160c76f3552458a44d8081fade519d214737" + integrity sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.0.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" + integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-utf8@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.0.0.tgz#09ca2d9965e5849e72e347c130f2a29d5c0c863c" + integrity sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow== + dependencies: + "@smithy/util-buffer-from" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-waiter@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.0.2.tgz#0a73a0fcd30ea7bbc3009cf98ad199f51b8eac51" + integrity sha512-piUTHyp2Axx3p/kc2CIJkYSv0BAaheBQmbACZgQSSfWUumWNW+R1lL+H9PDBxKJkvOeEX+hKYEFiwO8xagL8AQ== + dependencies: + "@smithy/abort-controller" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@solidity-parser/parser@^0.14.0": + version "0.14.5" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" + integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@solidity-parser/parser@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.19.0.tgz#37a8983b2725af9b14ff8c4a475fa0e98d773c3f" + integrity sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA== + +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@typechain/ethers-v6@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz#42fe214a19a8b687086c93189b301e2b878797ea" + integrity sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" + +"@typechain/hardhat@^9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-9.1.0.tgz#6985015f01dfb37ef2ca8a29c742d05890351ddc" + integrity sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA== + dependencies: + fs-extra "^9.1.0" + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.6.tgz#9ba818eec0c85e4d3c679518428afdf611d03203" + integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== + dependencies: + "@types/node" "*" + +"@types/chai-as-promised@^7.1.3": + version "7.1.8" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz#f2b3d82d53c59626b5d6bbc087667ccb4b677fe9" + integrity sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw== + dependencies: + "@types/chai" "*" + +"@types/chai@*": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.0.1.tgz#2c3705555cf11f5f59c836a84c44afcfe4e5689d" + integrity sha512-5T8ajsg3M/FOncpLYW7sdOcD6yf4+722sze/tc4KQV0P8Z2rAr3SAuHCIkYmYpt8VbcQlnz8SxlOlPQYefe4cA== + dependencies: + "@types/deep-eql" "*" + +"@types/chai@^4.3.11": + version "4.3.20" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.20.tgz#cb291577ed342ca92600430841a00329ba05cecc" + integrity sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ== + +"@types/concat-stream@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + dependencies: + "@types/node" "*" + +"@types/deep-eql@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" + integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== + +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + +"@types/fs-extra@^11.0.4": + version "11.0.4" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-11.0.4.tgz#e16a863bb8843fba8c5004362b5a73e17becca45" + integrity sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ== + dependencies: + "@types/jsonfile" "*" + "@types/node" "*" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/jsonfile@*": + version "6.1.4" + resolved "https://registry.yarnpkg.com/@types/jsonfile/-/jsonfile-6.1.4.tgz#614afec1a1164e7d670b4a7ad64df3e7beb7b702" + integrity sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ== + dependencies: + "@types/node" "*" + +"@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/minimatch@*": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/mocha@^10.0.6": + version "10.0.10" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0" + integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== + +"@types/node@*": + version "22.12.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.12.0.tgz#bf8af3b2af0837b5a62a368756ff2b705ae0048c" + integrity sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA== + dependencies: + undici-types "~6.20.0" + +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" + +"@types/node@^10.0.3": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^20.10.1": + version "20.17.16" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.16.tgz#b33b0edc1bf925b27349e494b871ca4451fabab4" + integrity sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw== + dependencies: + undici-types "~6.19.2" + +"@types/node@^8.0.0": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + +"@types/pbkdf2@^3.0.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.1": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/qs@^6.2.31", "@types/qs@^6.9.7": + version "6.9.18" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2" + integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== + +"@types/secp256k1@^4.0.1": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== + dependencies: + "@types/node" "*" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== + +acorn-walk@^8.1.1: + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" + +acorn@^8.11.0, acorn@^8.4.1: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^8.0.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +amazon-cognito-identity-js@^6.3.6: + version "6.3.12" + resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz#af73df033094ad4c679c19cf6122b90058021619" + integrity sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg== + dependencies: + "@aws-crypto/sha256-js" "1.2.2" + buffer "4.9.2" + fast-base64-decode "^1.0.0" + isomorphic-unfetch "^3.0.0" + js-cookie "^2.2.1" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== + +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-colors@^4.1.1, ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-retry@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + +async@1.x: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +axios@^1.5.1, axios@^1.7.4: + version "1.7.9" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.10" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.10.tgz#62de58653f8762b5d6f8d9fe30fa75f7b2585a75" + integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== + dependencies: + safe-buffer "^5.0.1" + +base-x@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" + integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== + +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.1.tgz#215741fe3c9dba2d7e12c001d0cfdbae43975ba7" + integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-stdout@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind-apply-helpers@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" + integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bound@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" + integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== + dependencies: + call-bind-apply-helpers "^1.0.1" + get-intrinsic "^1.2.6" + +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caseless@^0.12.0, caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +cbor@^10.0.0: + version "10.0.3" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-10.0.3.tgz#202d79cd696f408700af51b0c9771577048a860e" + integrity sha512-72Jnj81xMsqepqdcSdf2+fflz/UDsThOHy5hj2MW5F5xzHL8Oa0KQ6I6V9CwVUPxg5pf+W9xp6W2KilaRXWWtw== + dependencies: + nofilter "^3.0.2" + +cbor@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" + integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== + dependencies: + nofilter "^3.1.0" + +chai-as-promised@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.2.tgz#70cd73b74afd519754161386421fb71832c6d041" + integrity sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw== + dependencies: + check-error "^1.0.2" + +chai@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.1.0" + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.2, check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@^3.5.2, chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.6.tgz#8fe672437d01cd6c4561af5334e0cc50ff1955f7" + integrity sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@1.4.0, colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + +commander@^8.1.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +compare-versions@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" + integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.6.0, concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +death@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" + integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== + +debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +deep-eql@^4.0.1, deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== + dependencies: + type-detect "^4.0.0" + +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + +difflib@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== + dependencies: + heap ">= 0.2.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dotenv@^16.3.1: + version "16.4.7" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + +"ds-test@github:dapphub/ds-test": + version "1.0.0" + resolved "https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0" + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +elliptic@^6.5.2, elliptic@^6.5.7: + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encode-utf8@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +enquirer@^2.3.0, enquirer@^2.3.6: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@2.7.x, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eth-gas-reporter@^0.2.25: + version "0.2.27" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz#928de8548a674ed64c7ba0bf5795e63079150d4e" + integrity sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw== + dependencies: + "@solidity-parser/parser" "^0.14.0" + axios "^1.5.1" + cli-table3 "^0.5.0" + colors "1.4.0" + ethereum-cryptography "^1.0.3" + ethers "^5.7.2" + fs-readdir-recursive "^1.1.0" + lodash "^4.17.14" + markdown-table "^1.1.3" + mocha "^10.2.0" + req-cwd "^2.0.0" + sha1 "^1.1.1" + sync-request "^6.0.0" + +ethereum-bloom-filters@^1.0.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz#8294f074c1a6cbd32c39d2cc77ce86ff14797dab" + integrity sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA== + dependencies: + "@noble/hashes" "^1.4.0" + +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" + 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" + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethers@^5.6.1, ethers@^5.7.0, ethers@^5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@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/contracts" "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/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethers@^6.9.0: + version "6.13.5" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.5.tgz#8c1d6ac988ac08abc3c1d8fabbd4b8b602851ac4" + integrity sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "22.7.5" + aes-js "4.0.0-beta.5" + tslib "2.7.0" + ws "8.17.1" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +fast-base64-decode@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" + integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q== + +fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-uri@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== + +fast-xml-parser@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" + integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== + dependencies: + strnum "^1.0.5" + +fastq@^1.6.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.18.0.tgz#d631d7e25faffea81887fe5ea8c9010e1b36fee0" + integrity sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw== + dependencies: + reusify "^1.0.4" + +fdir@^6.4.2: + version "6.4.3" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72" + integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + dependencies: + imul "^1.0.0" + +follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +forge-std@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/forge-std/-/forge-std-1.1.2.tgz#f4a0eda103538d56f9c563f3cd1fa2fd01bd9378" + integrity sha512-Wfb0iAS9PcfjMKtGpWQw9mXzJxrWD62kJCUqqLcyuI0+VRtJ3j20XembjF3kS20qELYdXft1vD/SPFVWVKMFOw== + +form-data@^2.2.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.2.tgz#dc653743d1de2fcc340ceea38079daf6e9069fd2" + integrity sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + safe-buffer "^5.2.1" + +form-data@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^11.2.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.0, fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044" + integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + function-bind "^1.1.2" + get-proto "^1.0.0" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +get-proto@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +ghost-testrpc@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" + integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== + dependencies: + chalk "^2.4.2" + node-emoji "^1.10.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +handlebars@^4.0.1: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +hardhat-deploy@^0.11.45: + version "0.11.45" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.45.tgz#bed86118175a38a03bb58aba2ce1ed5e80a20bc8" + integrity sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w== + dependencies: + "@ethersproject/abi" "^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/contracts" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/solidity" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wallet" "^5.7.0" + "@types/qs" "^6.9.7" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + ethers "^5.7.0" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + zksync-web3 "^0.14.3" + +hardhat-gas-reporter@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz#ebe5bda5334b5def312747580cd923c2b09aef1b" + integrity sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA== + dependencies: + array-uniq "1.0.3" + eth-gas-reporter "^0.2.25" + sha1 "^1.1.1" + +hardhat-tracer@^2.7.0: + version "2.8.3" + resolved "https://registry.yarnpkg.com/hardhat-tracer/-/hardhat-tracer-2.8.3.tgz#2091c1e8f77cbc38bda155112f584a881e46784e" + integrity sha512-bZrz8KtqQUbBcCAYcXnQh3bIkA7JCb2rC7tmq5XlTcDDFPW425HA58CtfHLHsoArrOQdogb0tPTLwh3ONmDj6w== + dependencies: + chalk "^4.1.2" + debug "^4.3.4" + ethers "^5.6.1" + +hardhat@^2.19.1: + version "2.22.18" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.18.tgz#e299a26a67b521bbb225370eb47a032d4e097e3a" + integrity sha512-2+kUz39gvMo56s75cfLBhiFedkQf+gXdrwCcz4R/5wW0oBdwiyfj2q9BIkMoaA0WIGYYMU2I1Cc4ucTunhfjzw== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/edr" "^0.7.0" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + "@nomicfoundation/solidity-analyzer" "^0.1.0" + "@sentry/node" "^5.18.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + boxen "^5.1.2" + chokidar "^4.0.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^5.0.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + json-stream-stringify "^3.1.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + picocolors "^1.1.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.8.26" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tinyglobby "^0.2.6" + tsort "0.0.1" + undici "^5.14.0" + uuid "^8.3.2" + ws "^7.4.6" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +"heap@>= 0.2.0": + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.1.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +immutable@^4.0.0-rc.12: + version "4.3.7" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" + integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== + +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isomorphic-unfetch@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" + integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== + dependencies: + node-fetch "^2.6.1" + unfetch "^4.2.0" + +js-cookie@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-yaml@3.x: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stream-stringify@^3.1.4: + version "3.1.6" + resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz#ebe32193876fb99d4ec9f612389a8d8e2b5d54d4" + integrity sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.4: + version "1.5.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.5.0.tgz#f6aceb1ab9123563dd901d05f81f9d4883d3b7d8" + integrity sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw== + +keccak@^3.0.0, keccak@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +markdown-table@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +match-all@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" + integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1, minimatch@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@0.5.x: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0, mocha@^10.2.0: + version "10.8.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" + integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== + dependencies: + ansi-colors "^4.1.3" + browser-stdout "^1.3.1" + chokidar "^3.5.3" + debug "^4.3.5" + diff "^5.2.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^8.1.0" + he "^1.2.0" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^5.1.6" + ms "^2.1.3" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^6.5.1" + yargs "^16.2.0" + yargs-parser "^20.2.9" + yargs-unparser "^2.0.0" + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.2.0: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + +nofilter@^3.0.2, nofilter@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" + integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== + +nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== + +obliterator@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.5.tgz#031e0145354b0c18840336ae51d41e7d6d2c76aa" + integrity sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw== + +once@1.x, once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +ordinal@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d" + integrity sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ== + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picocolors@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prettier@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== + +prettier@^2.3.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + +proper-lockfile@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" + integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== + dependencies: + graceful-fs "^4.2.4" + retry "^0.12.0" + signal-exit "^3.0.2" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +qs@^6.4.0, qs@^6.9.4: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== + dependencies: + side-channel "^1.1.0" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +raw-body@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^2.2.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.1.tgz#bd115327129672dc47f87408f05df9bd9ca3ef55" + integrity sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + +req-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== + dependencies: + req-from "^2.0.0" + +req-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== + dependencies: + resolve-from "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.1.6: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sc-istanbul@^0.4.5: + version "0.4.6" + resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" + integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +scrypt-js@3.0.1, scrypt-js@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.4.tgz#58f0bfe1830fe777d9ca1ffc7574962a8189f8ab" + integrity sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw== + dependencies: + elliptic "^6.5.7" + node-addon-api "^5.0.0" + node-gyp-build "^4.2.0" + +semver@^5.5.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.4: + version "7.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.0.tgz#9c6fe61d0c6f9fa9e26575162ee5a9180361b09c" + integrity sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ== + +serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.0.1" + +shelljs@^0.8.3: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +solc@0.8.26: + version "0.8.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.26.tgz#afc78078953f6ab3e727c338a2fefcd80dd5b01a" + integrity sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g== + dependencies: + command-exists "^1.2.8" + commander "^8.1.0" + follow-redirects "^1.12.1" + js-sha3 "0.8.0" + memorystream "^0.3.1" + semver "^5.5.0" + tmp "0.0.33" + +solidity-ast@^0.4.51: + version "0.4.59" + resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.59.tgz#290a2815aef70a61092591ab3e991da080ae5931" + integrity sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g== + +solidity-bytes-utils@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/solidity-bytes-utils/-/solidity-bytes-utils-0.8.2.tgz#763d6a02fd093e93b3a97b742e97d540e66c29bd" + integrity sha512-cqXPYAV2auhpdKSTPuqji0CwpSceZDu95CzqSM/9tDJ2MoMaMsdHTpOIWtVw31BIqqGPNmIChCswzbw0tHaMTw== + dependencies: + ds-test "github:dapphub/ds-test" + forge-std "^1.1.2" + +solidity-coverage@^0.8.13: + version "0.8.14" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.14.tgz#db9bfcc10e3bc369fc074b35b267d665bcc6ae2e" + integrity sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA== + dependencies: + "@ethersproject/abi" "^5.0.9" + "@solidity-parser/parser" "^0.19.0" + chalk "^2.4.2" + death "^1.1.0" + difflib "^0.2.4" + fs-extra "^8.1.0" + ghost-testrpc "^0.0.2" + global-modules "^2.0.0" + globby "^10.0.1" + jsonschema "^1.2.4" + lodash "^4.17.21" + mocha "^10.2.0" + node-emoji "^1.10.0" + pify "^4.0.1" + recursive-readdir "^2.2.2" + sc-istanbul "^0.4.5" + semver "^7.3.4" + shelljs "^0.8.3" + web3-utils "^1.3.6" + +source-map-support@^0.5.13: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== + dependencies: + amdefine ">=0.0.4" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +sync-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + +table@^6.8.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" + integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + +tiny-invariant@^1.3.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +tinyglobby@^0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f" + integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== + dependencies: + fdir "^6.4.2" + picomatch "^4.0.2" + +tmp@0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-command-line-args@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +ts-node@^10.9.1: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +tslib@^1.11.1, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.3.1, tslib@^2.6.2: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +typechain@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.2.tgz#1090dd8d9c57b6ef2aed3640a516bdbf01b00d73" + integrity sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q== + dependencies: + "@types/prettier" "^2.1.1" + debug "^4.3.1" + fs-extra "^7.0.0" + glob "7.1.7" + js-sha3 "^0.8.0" + lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.3.1" + ts-command-line-args "^2.2.0" + ts-essentials "^7.0.1" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@^5.2.2: + version "5.7.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" + integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== + +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + +uglify-js@^3.1.4: + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + +undici@^5.14.0: + version "5.28.5" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.5.tgz#b2b94b6bf8f1d919bc5a6f31f2c01deb02e54d4b" + integrity sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA== + dependencies: + "@fastify/busboy" "^2.0.0" + +undici@^6.11.1: + version "6.21.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.1.tgz#336025a14162e6837e44ad7b819b35b6c6af0e05" + integrity sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ== + +unfetch@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +web3-utils@^1.3.6: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^1.1.1, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + +ws@^7.4.6: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yargs-parser@^20.2.2, yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zksync-web3@^0.14.3: + version "0.14.4" + resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.14.4.tgz#0b70a7e1a9d45cc57c0971736079185746d46b1f" + integrity sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg== From 128974646da4bde1c40c138f9f209e136012044c Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Mon, 10 Feb 2025 16:12:07 +0300 Subject: [PATCH 04/41] vaults and iToken (with old oZepp libs) --- .../assets-handler/InceptionAssetsHandler.sol | 2 +- .../InceptionERC20OmniAssetsHandler.sol | 59 + .../interfaces/ICrossChainAdapterL2.sol | 16 + .../interfaces/ICrossChainBridge.sol | 50 + .../interfaces/IERC20CrossChainBridge.sol | 9 + .../interfaces/IInceptionAssetHandler.sol | 11 + .../interfaces/IInceptionERC20OmniVault.sol | 137 + .../interfaces/IInceptionRatioFeed.sol | 43 + .../contracts/interfaces/IInceptionVault.sol | 96 + .../interfaces/IInceptionVaultErrors.sol | 54 + .../common/ICumulativeMerkleDrop.sol | 2 +- .../interfaces/common/IInceptionToken.sol | 1 + .../mellow-core/IMellowDefaultCollateral.sol | 2 +- .../mellow-core/IMellowDepositWrapper.sol | 2 +- .../mellow-core/IMellowHandler.sol | 2 +- .../mellow-core/IMellowPriceOracle.sol | 2 +- .../mellow-core/IMellowRatiosOracle.sol | 2 +- .../mellow-core/IMellowVault.sol | 2 +- .../mellow-core/IMellowVaultConfigurator.sol | 2 +- .../lib/InternalInceptionLibrary.sol | 93 + .../contracts/tokens/InceptionToken.sol | 17 +- .../EigenLayer/InceptionVaultStorage_EL.sol | 2 +- .../vaults/EigenLayer/InceptionVault_EL.sol | 2 +- .../ERC4626Facet/ERC4626Facet_EL_E1.sol | 2 +- .../ERC4626Facet/ERC4626Facet_EL_E2.sol | 2 +- .../EigenLayer/facets/EigenLayerFacet.sol | 2 +- .../EigenLayer/facets/EigenSetterFacet.sol | 2 +- .../facets/SwellEigenLayerFacet.sol | 2 +- .../vaults/InceptionERC20OmniVault.sol | 555 +++ .../vaults/vault_e2/ERC20OmniVault_E2.sol | 26 + projects/vaults/hardhat.config.ts | 2 +- projects/vaults/yarn.lock | 3542 ++++++++--------- 32 files changed, 2881 insertions(+), 1862 deletions(-) create mode 100644 projects/vaults/contracts/assets-handler/InceptionERC20OmniAssetsHandler.sol create mode 100644 projects/vaults/contracts/interfaces/ICrossChainAdapterL2.sol create mode 100644 projects/vaults/contracts/interfaces/ICrossChainBridge.sol create mode 100644 projects/vaults/contracts/interfaces/IERC20CrossChainBridge.sol create mode 100644 projects/vaults/contracts/interfaces/IInceptionAssetHandler.sol create mode 100644 projects/vaults/contracts/interfaces/IInceptionERC20OmniVault.sol create mode 100644 projects/vaults/contracts/interfaces/IInceptionRatioFeed.sol create mode 100644 projects/vaults/contracts/interfaces/IInceptionVault.sol create mode 100644 projects/vaults/contracts/interfaces/IInceptionVaultErrors.sol create mode 100644 projects/vaults/contracts/lib/InternalInceptionLibrary.sol create mode 100644 projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol create mode 100644 projects/vaults/contracts/vaults/vault_e2/ERC20OmniVault_E2.sol diff --git a/projects/vaults/contracts/assets-handler/InceptionAssetsHandler.sol b/projects/vaults/contracts/assets-handler/InceptionAssetsHandler.sol index 339f7c9e..01e42d13 100644 --- a/projects/vaults/contracts/assets-handler/InceptionAssetsHandler.sol +++ b/projects/vaults/contracts/assets-handler/InceptionAssetsHandler.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.27; import {Ownable2StepUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; diff --git a/projects/vaults/contracts/assets-handler/InceptionERC20OmniAssetsHandler.sol b/projects/vaults/contracts/assets-handler/InceptionERC20OmniAssetsHandler.sol new file mode 100644 index 00000000..89127f57 --- /dev/null +++ b/projects/vaults/contracts/assets-handler/InceptionERC20OmniAssetsHandler.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import {Ownable2StepUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; +import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; +import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; +import {SafeERC20, IERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +import {IInceptionERC20OmniVault} from "../interfaces/IInceptionERC20OmniVault.sol"; +import {IInceptionAssetHandler} from "../interfaces/IInceptionAssetHandler.sol"; + +/// @author The InceptionLRT team +/// @title The InceptionERC20OmniAssetsHandler contract +/// @dev Handles operations with the corresponding asset (erc20 base token) +abstract contract InceptionERC20OmniAssetsHandler is + PausableUpgradeable, + ReentrancyGuardUpgradeable, + Ownable2StepUpgradeable, + IInceptionERC20OmniVault, + IInceptionAssetHandler +{ + using SafeERC20 for IERC20; + + IERC20 internal _asset; + + uint256[50 - 1] private __reserver; + + function __InceptionERC20OmniAssetsHandler_init( + IERC20 assetAddress + ) internal onlyInitializing { + __Pausable_init(); + __ReentrancyGuard_init(); + + _asset = assetAddress; + } + + /// @dev returns the address of the underlying token used for the vault for accounting, depositing, flash-withdrawing. + function asset() public view returns (address) { + return address(_asset); + } + + /// @dev returns the balance of iVault in underlying ERC20 token + function totalAssets() public view override returns (uint256) { + return _asset.balanceOf(address(this)); + } + + function _transferAssetFrom(address staker, uint256 amount) internal { + _asset.safeTransferFrom(staker, address(this), amount); + } + + + function _approve(address spender, uint256 amount) internal { + if(!_asset.approve(spender, amount)) revert AssetApprovalFailed(); + } + + function _transferAssetTo(address receiver, uint256 amount) internal { + _asset.safeTransfer(receiver, amount); + } +} diff --git a/projects/vaults/contracts/interfaces/ICrossChainAdapterL2.sol b/projects/vaults/contracts/interfaces/ICrossChainAdapterL2.sol new file mode 100644 index 00000000..58b1d07c --- /dev/null +++ b/projects/vaults/contracts/interfaces/ICrossChainAdapterL2.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {ICrossChainBridge} from "./ICrossChainBridge.sol"; + +interface ICrossChainBridgeL2 is ICrossChainBridge { + function quote( + bytes calldata _payload, + bytes memory _options + ) external view returns (uint256); + + function sendDataL1( + bytes calldata _payload, + bytes memory _options + ) external payable returns (uint256); +} diff --git a/projects/vaults/contracts/interfaces/ICrossChainBridge.sol b/projects/vaults/contracts/interfaces/ICrossChainBridge.sol new file mode 100644 index 00000000..7981a94a --- /dev/null +++ b/projects/vaults/contracts/interfaces/ICrossChainBridge.sol @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +interface ICrossChainBridge { + event TargetReceiverChanged( + address prevTargetReceiver, + address newTargetReceiver + ); + event RecoverFundsInitiated(uint256 amount); + event ReceiveTriggered(address caller, uint256 amount); + event CrossChainEthDeposit(uint256 chainId, uint256 amount); + event ChainIdAdded(uint256 _chainId); + event CrossChainMessageReceived( + uint256 indexed chainId, + uint256 value, + bytes data + ); + event CrossChainMessageSent( + uint256 indexed chainId, + uint256 value, + bytes data, + uint256 fee + ); + + error TargetReceiverNotSet(); + error TransferToTargetReceiverFailed(); + error SettingZeroAddress(); + error NotTargetReceiver(address caller); + error ChainIdNotFound(uint256 chainId); + + function setTargetReceiver(address _newTargetReceiver) external; + + function recoverFunds() external; + + function quoteSendEth( + uint256 _chainId, + bytes memory _options + ) external view returns (uint256); + + function sendEthCrossChain( + uint256 _chainId, + bytes memory _options + ) external payable returns (uint256); + + function getValueFromOpts( + bytes calldata _options + ) external view returns (uint256); + + receive() external payable; +} diff --git a/projects/vaults/contracts/interfaces/IERC20CrossChainBridge.sol b/projects/vaults/contracts/interfaces/IERC20CrossChainBridge.sol new file mode 100644 index 00000000..2bc172e6 --- /dev/null +++ b/projects/vaults/contracts/interfaces/IERC20CrossChainBridge.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {ICrossChainBridgeL2} from "./ICrossChainAdapterL2.sol"; + +interface IERC20CrossChainBridge is ICrossChainBridgeL2 { + function sendTokens(uint256 amount) external returns (uint256); // return value = what was returned (dust, etc) + function quoteSendTokens(uint256 amount) external view returns (uint256); +} diff --git a/projects/vaults/contracts/interfaces/IInceptionAssetHandler.sol b/projects/vaults/contracts/interfaces/IInceptionAssetHandler.sol new file mode 100644 index 00000000..3a0584f1 --- /dev/null +++ b/projects/vaults/contracts/interfaces/IInceptionAssetHandler.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +interface IInceptionAssetHandler { + /*////////////////////////// + ////// GET functions ////// + ////////////////////////*/ + + /// @dev returns total balance of Vault in the asset + function totalAssets() external view returns (uint256); +} diff --git a/projects/vaults/contracts/interfaces/IInceptionERC20OmniVault.sol b/projects/vaults/contracts/interfaces/IInceptionERC20OmniVault.sol new file mode 100644 index 00000000..a1828438 --- /dev/null +++ b/projects/vaults/contracts/interfaces/IInceptionERC20OmniVault.sol @@ -0,0 +1,137 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +interface IInceptionERC20OmniVault { + /*/////////////////////////////////////////////////// + / ******************** Errors ******************** / + /////////////////////////////////////////////////*/ + + error TransferAssetFromFailed(); + + error TransferAssetFailed(); + + error AssetApprovalFailed(); + + error InsufficientCapacity(uint256 capacity); + + error MessageToL1Failed(uint256 tokenAmount, uint256 ethAmount); + error EthToL1Failed(uint256 ethAmount); + + error CrossChainAdapterNotSet(); + + error OnlyOwnerOrOperator(); + error ResultISharesZero(); + error RatioFeedNotSet(); + error FreeBalanceTooLow(uint256 freeBalance, uint256 msgValue); + + error NullParams(); + + error ParameterExceedsLimits(uint256 param); + error BonusHigherThanFWFee(uint256 param); + + error NotContract(); + + error DepositInconsistentResultedState(); + + error OperatorNotRegistered(); + + error RestakerNotRegistered(); + + error ImplementationNotSet(); + + error OnlyOperatorAllowed(); + + error AlreadyDelegated(); + + error DelegationManagerImmutable(); + + error IsNotAbleToRedeem(); + + error LowerMinAmount(uint256 minAmount); + + error ZeroFlashWithdrawFee(); + + /// TVL errors + + error ExceedsMaxPerDeposit(uint256 max, uint256 amount); + + error ExceedsMaxTotalDeposited(uint256 max, uint256 amount); + error FeesAboveMsgValue(uint256 msgValue); + + /*/////////////////////////////////////////////////// + / ******************** Events ******************** / + /////////////////////////////////////////////////*/ + + event Deposit( + address indexed sender, + address indexed receiver, + uint256 amount, + uint256 iShares + ); + + event FlashWithdraw( + address indexed sender, + address indexed receiver, + address indexed owner, + uint256 amount, + uint256 iShares, + uint256 fee + ); + + event OperatorChanged(address prevValue, address newValue); + + event DepositFeeChanged(uint256 prevValue, uint256 newValue); + + event MinAmountChanged(uint256 prevValue, uint256 newValue); + + event ProtocolFeeChanged(uint256 prevValue, uint256 newValue); + + event TreasuryUpdated( + address indexed prevTreasury, + address indexed newTreasury + ); + + event RestakerDeployed(address indexed restaker); + + event ImplementationUpgraded(address prevValue, address newValue); + + event RatioFeedChanged(address prevValue, address newValue); + + event NameChanged(string prevValue, string newValue); + + event ReferralCode(address indexed sender, bytes32 indexed code); + + event DepositBonus(uint256 amount); + + event CrossChainAdapterChanged( + address prevCrossChainAdapter, + address newCrossChainAdapter + ); + + event MessageToL1Sent( + uint256 indexed tokensAmount, + uint256 indexed ethAmount + ); + + event ERC20CrossChainSent(uint256 amount, uint256 indexed chainId); + + event DepositBonusParamsChanged( + uint256 newMaxBonusRate, + uint256 newOptimalBonusRate, + uint256 newDepositUtilizationKink + ); + + event WithdrawFeeParamsChanged( + uint256 newMaxFlashFeeRate, + uint256 newOptimalWithdrawalRate, + uint256 newWithdrawUtilizationKink + ); + + event AssetsInfoSentToL1(uint256 tokensAmount, uint256 ethAmount); + + event ERC20SentToL1(uint256 amount); + + event TargetCapacityChanged(uint256 prevValue, uint256 newValue); + + event UnusedFeesSentBackToOperator(uint256 unusedFees); +} diff --git a/projects/vaults/contracts/interfaces/IInceptionRatioFeed.sol b/projects/vaults/contracts/interfaces/IInceptionRatioFeed.sol new file mode 100644 index 00000000..d57a8dbc --- /dev/null +++ b/projects/vaults/contracts/interfaces/IInceptionRatioFeed.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +interface IInceptionRatioFeedErrors { + error OperatorUnauthorizedAccount(address account); + + error InconsistentInputData(); + + error NullParams(); + + error RatioThresholdNotSet(); + + error NewRatioThresholdInvalid(); + + error IncorrectDay(uint256 day); + + error IncorrectToken(address token); +} + +interface IInceptionRatioFeed { + event OperatorUpdated(address prevValue, address newValue); + + event RatioUpdated( + address indexed tokenAddress, + uint256 prevValue, + uint256 newValue + ); + + event RatioNotUpdated( + address indexed tokenAddress, + uint256 failedRatio, + string reason + ); + + event RatioThresholdChanged(uint256 prevValue, uint256 newValue); + + function updateRatioBatch( + address[] calldata addresses, + uint256[] calldata ratios + ) external; + + function getRatioFor(address) external view returns (uint256); +} diff --git a/projects/vaults/contracts/interfaces/IInceptionVault.sol b/projects/vaults/contracts/interfaces/IInceptionVault.sol new file mode 100644 index 00000000..5aa20640 --- /dev/null +++ b/projects/vaults/contracts/interfaces/IInceptionVault.sol @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "./common/IInceptionToken.sol"; + +interface IInceptionVault { + /*/////////////////// + ////// Events ////// + /////////////////*/ + + event Deposit( + address indexed sender, + address indexed receiver, + uint256 amount, + uint256 iShares + ); + + event Withdraw( + address indexed sender, + address indexed receiver, + address indexed owner, + uint256 amount, + uint256 iShares + ); + + event FlashWithdraw( + address indexed sender, + address indexed receiver, + address indexed owner, + uint256 amount, + uint256 iShares, + uint256 fee + ); + + event Redeem( + address indexed sender, + address indexed receiver, + uint256 amount + ); + + event RedeemedRequests(uint256[] withdrawals); + + event OperatorChanged(address prevValue, address newValue); + + event MinAmountChanged(uint256 prevValue, uint256 newValue); + + event ELOperatorAdded(address indexed newELOperator); + + event RestakerDeployed(address indexed restaker); + + event ImplementationUpgraded(address prevValue, address newValue); + + event RatioFeedChanged(address prevValue, address newValue); + + event NameChanged(string prevValue, string newValue); + + event TreasuryChanged(address prevValue, address newValue); + + event ReferralCode(bytes32 indexed code); + + event DepositBonus(uint256 amount); + + event DepositBonusParamsChanged( + uint256 newMaxBonusRate, + uint256 newOptimalBonusRate, + uint256 newDepositUtilizationKink + ); + + event WithdrawFeeParamsChanged( + uint256 newMaxFlashFeeRate, + uint256 newOptimalWithdrawalRate, + uint256 newWithdrawUtilizationKink + ); + + event ProtocolFeeChanged(uint256 prevValue, uint256 newValue); + + event TreasuryUpdated(address indexed prevTreasury, address indexed newTreasury); + event MessageToL1Sent( + uint256 indexed tokensAmount, + uint256 indexed ethAmount + ); + event EthToL1Sent(uint256 callValue); + + error OnlyOwnerOrOperator(); + error ResultISharesZero(); + error RatioFeedNotSet(); + error FreeBalanceIsZero(); + + error EthToL1Failed(uint256 amount); + error MessageToL1Failed(uint256 tokensAmount, uint256 ethAmount); + error CrossChainAdapterNotSet(); + + function inceptionToken() external view returns (IInceptionToken); + + function ratio() external view returns (uint256); +} diff --git a/projects/vaults/contracts/interfaces/IInceptionVaultErrors.sol b/projects/vaults/contracts/interfaces/IInceptionVaultErrors.sol new file mode 100644 index 00000000..07cb36a2 --- /dev/null +++ b/projects/vaults/contracts/interfaces/IInceptionVaultErrors.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +interface IInceptionVaultErrors { + error TransferAssetFailed(address assetAddress); + + error TransferAssetFromFailed(address assetAddress); + + error InsufficientCapacity(uint256 capacity); + + error InceptionOnPause(); + + error InconsistentData(); + + error ApproveError(); + + error NullParams(); + + error ParameterExceedsLimits(uint256 param); + + error NotContract(); + + error DepositInconsistentResultedState(); + + error OperatorNotRegistered(); + + error RestakerNotRegistered(); + + error ImplementationNotSet(); + + error OnlyOperatorAllowed(); + + error AlreadyDelegated(); + + error DelegationManagerImmutable(); + + error IsNotAbleToRedeem(); + + error LowerMinAmount(uint256 minAmount); + + error ZeroFlashWithdrawFee(); + + /// TVL errors + + error ExceedsMaxPerDeposit(uint256 max, uint256 amount); + + error ExceedsMaxTotalDeposited(uint256 max, uint256 amount); + + /// EigenLayer Operators + + error NotEigenLayerOperator(); + + error EigenLayerOperatorAlreadyExists(); +} diff --git a/projects/vaults/contracts/interfaces/common/ICumulativeMerkleDrop.sol b/projects/vaults/contracts/interfaces/common/ICumulativeMerkleDrop.sol index ad0d7cc3..e58bb330 100644 --- a/projects/vaults/contracts/interfaces/common/ICumulativeMerkleDrop.sol +++ b/projects/vaults/contracts/interfaces/common/ICumulativeMerkleDrop.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity 0.8.24; +pragma solidity 0.8.27; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/projects/vaults/contracts/interfaces/common/IInceptionToken.sol b/projects/vaults/contracts/interfaces/common/IInceptionToken.sol index e7ab55d2..7b962899 100644 --- a/projects/vaults/contracts/interfaces/common/IInceptionToken.sol +++ b/projects/vaults/contracts/interfaces/common/IInceptionToken.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.20; interface IInceptionToken { event VaultChanged(address prevValue, address newValue); + event RebalancerChanged(address prevValue, address newValue); event Paused(address account); event Unpaused(address account); diff --git a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowDefaultCollateral.sol b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowDefaultCollateral.sol index 7e7f3003..abf60e6c 100644 --- a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowDefaultCollateral.sol +++ b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowDefaultCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.27; interface IDefaultCollateral { /** diff --git a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowDepositWrapper.sol b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowDepositWrapper.sol index be7e0652..8da60314 100644 --- a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowDepositWrapper.sol +++ b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowDepositWrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.24; +pragma solidity 0.8.27; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowHandler.sol b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowHandler.sol index 84d2e0a1..383d5015 100644 --- a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowHandler.sol +++ b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowHandler.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.24; +pragma solidity 0.8.27; interface IMellowHandler { function getTotalDeposited() external view returns (uint256); diff --git a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowPriceOracle.sol b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowPriceOracle.sol index 268315dd..2f6e3aa8 100644 --- a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowPriceOracle.sol +++ b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowPriceOracle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.24; +pragma solidity 0.8.27; /** * @title IPriceOracle diff --git a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowRatiosOracle.sol b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowRatiosOracle.sol index 798d65dc..b03eb5c2 100644 --- a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowRatiosOracle.sol +++ b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowRatiosOracle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.24; +pragma solidity 0.8.27; /** * @title IRatiosOracle diff --git a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowVault.sol b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowVault.sol index 4ad766d3..4e480c5c 100644 --- a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowVault.sol +++ b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowVault.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BSL-1.1 -pragma solidity 0.8.24; +pragma solidity 0.8.27; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowVaultConfigurator.sol b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowVaultConfigurator.sol index 46ba1ba3..ae34b273 100644 --- a/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowVaultConfigurator.sol +++ b/projects/vaults/contracts/interfaces/symbiotic-vault/mellow-core/IMellowVaultConfigurator.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BSL-1.1 -pragma solidity 0.8.24; +pragma solidity 0.8.27; /** * @title IVaultConfigurator diff --git a/projects/vaults/contracts/lib/InternalInceptionLibrary.sol b/projects/vaults/contracts/lib/InternalInceptionLibrary.sol new file mode 100644 index 00000000..2d8dd121 --- /dev/null +++ b/projects/vaults/contracts/lib/InternalInceptionLibrary.sol @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +/** + * @author The InceptionLRT team + * @title The InternalInceptionLibrary library + * @dev It serves two primary functions: + 1. Flash vault-related logic for the calculations of deposit bonus and withdrawal fee + 2. Conversions between shares and assets + */ +library InternalInceptionLibrary { + uint256 constant MAX_PERCENT = 100 * 1e8; + + /************************************************************ + ************************ Flash Vault *********************** + ************************************************************/ + + function calculateDepositBonus( + uint256 amount, + uint256 capacity, + uint256 optimalCapacity, + uint256 optimalBonusRate, + uint256 maxDepositBonusRate, + uint256 targetCapacity + ) internal pure returns (uint256 bonus) { + // uint256 optimalCapacity = (targetCapacity * depositUtilizationKink) / + // MAX_PERCENT; + + if (amount > 0 && capacity < optimalCapacity) { + uint256 replenished = amount; + if (optimalCapacity < capacity + amount) + replenished = optimalCapacity - capacity; + + uint256 bonusSlope = ((maxDepositBonusRate - optimalBonusRate) * + 1e18) / ((optimalCapacity * 1e18) / targetCapacity); + uint256 bonusPercent = maxDepositBonusRate - + (bonusSlope * (capacity + replenished / 2)) / + targetCapacity; + + capacity += replenished; + bonus += (replenished * bonusPercent) / MAX_PERCENT; + amount -= replenished; + } + /// @dev the utilization rate is in the range [25: ] % + if (amount > 0 && capacity <= targetCapacity) { + uint256 replenished = targetCapacity > capacity + amount + ? amount + : targetCapacity - capacity; + bonus += (replenished * optimalBonusRate) / MAX_PERCENT; + } + } + + function calculateWithdrawalFee( + uint256 amount, + uint256 capacity, + uint256 optimalCapacity, + uint256 optimaFeeRate, + uint256 maxFlashWithdrawalFeeRate, + uint256 targetCapacity + ) internal pure returns (uint256 fee) { + /// @dev the utilization rate is greater 1, [ :100] % + if (amount > 0 && capacity > targetCapacity) { + uint256 replenished = amount; + if (capacity - amount < targetCapacity) + replenished = capacity - targetCapacity; + + amount -= replenished; + capacity -= replenished; + } + + /// @dev the utilization rate is in the range [100:25] % + if (amount > 0 && capacity > optimalCapacity) { + uint256 replenished = amount; + if (capacity - amount < optimalCapacity) + replenished = capacity - optimalCapacity; + + fee += (replenished * optimaFeeRate) / MAX_PERCENT; // 0.5% + amount -= replenished; + capacity -= replenished; + if (fee == 0) ++fee; + } + /// @dev the utilization rate is in the range [25:0] % + if (amount > 0) { + uint256 feeSlope = ((maxFlashWithdrawalFeeRate - optimaFeeRate) * + 1e18) / ((optimalCapacity * 1e18) / targetCapacity); + uint256 bonusPercent = maxFlashWithdrawalFeeRate - + (feeSlope * (capacity - amount / 2)) / + targetCapacity; + fee += (amount * bonusPercent) / MAX_PERCENT; + } + if (fee == 0) ++fee; + } +} diff --git a/projects/vaults/contracts/tokens/InceptionToken.sol b/projects/vaults/contracts/tokens/InceptionToken.sol index 95adae3d..9b1b9cf8 100644 --- a/projects/vaults/contracts/tokens/InceptionToken.sol +++ b/projects/vaults/contracts/tokens/InceptionToken.sol @@ -20,10 +20,12 @@ contract InceptionToken is bool private _paused; - modifier onlyVault() { + address public rebalancer; + + modifier onlyMinter() { require( - msg.sender == address(vault), - "InceptionToken: only vault allowed" + msg.sender == address(vault) || msg.sender == rebalancer, + "InceptionToken: only minter allowed" ); _; } @@ -60,11 +62,11 @@ contract InceptionToken is require(!paused(), "InceptionToken: token transfer while paused"); } - function burn(address account, uint256 amount) external override onlyVault { + function burn(address account, uint256 amount) external override onlyMinter { _burn(account, amount); } - function mint(address account, uint256 amount) external override onlyVault { + function mint(address account, uint256 amount) external override onlyMinter { _mint(account, amount); } @@ -77,6 +79,11 @@ contract InceptionToken is vault = newValue; } + function setRebalancer(address newRebalancer) external onlyOwner { + emit RebalancerChanged(rebalancer, newRebalancer); + rebalancer = newRebalancer; + } + /*/////////////////////////// //// Pausable functions //// //////////////////////////*/ diff --git a/projects/vaults/contracts/vaults/EigenLayer/InceptionVaultStorage_EL.sol b/projects/vaults/contracts/vaults/EigenLayer/InceptionVaultStorage_EL.sol index e8ed416f..b240802e 100644 --- a/projects/vaults/contracts/vaults/EigenLayer/InceptionVaultStorage_EL.sol +++ b/projects/vaults/contracts/vaults/EigenLayer/InceptionVaultStorage_EL.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.27; import {BeaconProxy, Address} from "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; diff --git a/projects/vaults/contracts/vaults/EigenLayer/InceptionVault_EL.sol b/projects/vaults/contracts/vaults/EigenLayer/InceptionVault_EL.sol index 045c8ca0..43549607 100644 --- a/projects/vaults/contracts/vaults/EigenLayer/InceptionVault_EL.sol +++ b/projects/vaults/contracts/vaults/EigenLayer/InceptionVault_EL.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.27; import "./InceptionVaultStorage_EL.sol"; diff --git a/projects/vaults/contracts/vaults/EigenLayer/facets/ERC4626Facet/ERC4626Facet_EL_E1.sol b/projects/vaults/contracts/vaults/EigenLayer/facets/ERC4626Facet/ERC4626Facet_EL_E1.sol index 4202eb1d..9ea4b4d1 100644 --- a/projects/vaults/contracts/vaults/EigenLayer/facets/ERC4626Facet/ERC4626Facet_EL_E1.sol +++ b/projects/vaults/contracts/vaults/EigenLayer/facets/ERC4626Facet/ERC4626Facet_EL_E1.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.27; import {ERC4626Facet_EL} from "./ERC4626Facet_EL.sol"; diff --git a/projects/vaults/contracts/vaults/EigenLayer/facets/ERC4626Facet/ERC4626Facet_EL_E2.sol b/projects/vaults/contracts/vaults/EigenLayer/facets/ERC4626Facet/ERC4626Facet_EL_E2.sol index 8a9c0be6..7ca6a79f 100644 --- a/projects/vaults/contracts/vaults/EigenLayer/facets/ERC4626Facet/ERC4626Facet_EL_E2.sol +++ b/projects/vaults/contracts/vaults/EigenLayer/facets/ERC4626Facet/ERC4626Facet_EL_E2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.27; import {ERC4626Facet_EL} from "./ERC4626Facet_EL.sol"; diff --git a/projects/vaults/contracts/vaults/EigenLayer/facets/EigenLayerFacet.sol b/projects/vaults/contracts/vaults/EigenLayer/facets/EigenLayerFacet.sol index a1894e2c..c349a4a4 100644 --- a/projects/vaults/contracts/vaults/EigenLayer/facets/EigenLayerFacet.sol +++ b/projects/vaults/contracts/vaults/EigenLayer/facets/EigenLayerFacet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.27; import {BeaconProxy} from "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol"; diff --git a/projects/vaults/contracts/vaults/EigenLayer/facets/EigenSetterFacet.sol b/projects/vaults/contracts/vaults/EigenLayer/facets/EigenSetterFacet.sol index 9757e91c..fc024df7 100644 --- a/projects/vaults/contracts/vaults/EigenLayer/facets/EigenSetterFacet.sol +++ b/projects/vaults/contracts/vaults/EigenLayer/facets/EigenSetterFacet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.27; import {Address} from "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol"; diff --git a/projects/vaults/contracts/vaults/EigenLayer/facets/SwellEigenLayerFacet.sol b/projects/vaults/contracts/vaults/EigenLayer/facets/SwellEigenLayerFacet.sol index 28c25189..9dec1023 100644 --- a/projects/vaults/contracts/vaults/EigenLayer/facets/SwellEigenLayerFacet.sol +++ b/projects/vaults/contracts/vaults/EigenLayer/facets/SwellEigenLayerFacet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.27; import {BeaconProxy} from "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol"; import {ICumulativeMerkleDrop} from "../../../interfaces/common/ICumulativeMerkleDrop.sol"; diff --git a/projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol b/projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol new file mode 100644 index 00000000..3052e0d1 --- /dev/null +++ b/projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol @@ -0,0 +1,555 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +import {InceptionERC20OmniAssetsHandler} from "../assets-handler/InceptionERC20OmniAssetsHandler.sol"; + +import {IInceptionVault} from "../interfaces/IInceptionVault.sol"; +import {IInceptionToken} from "../interfaces/common/IInceptionToken.sol"; +import {IInceptionRatioFeed} from "../interfaces/common/IInceptionRatioFeed.sol"; +import {IERC20CrossChainBridge} from "../interfaces/IERC20CrossChainBridge.sol"; + +import {InternalInceptionLibrary} from "../lib/InternalInceptionLibrary.sol"; +import {Convert} from "../lib/Convert.sol"; + +/** + * @title InceptionERC20OmniVault + * @author The InceptionLRT team + * @dev A vault that handles deposits, withdrawals, and cross-chain operations for the Inception protocol. + * @notice Allows users to deposit an asset(e.g. stETH), receive inception tokens, and handle asset transfers between L1 and L2. + */ +abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { + /// @dev Inception restaking token + IInceptionToken public inceptionToken; + + /// @dev Reduces rounding issues + uint256 public minAmount; + + /// @dev the unique InceptionVault name + string public name; + + address public operator; + + IInceptionRatioFeed public ratioFeed; + + IERC20CrossChainBridge public crossChainAdapterERC20; + + /** + * @dev Flash withdrawal params + */ + + uint256 public constant MAX_TARGET_PERCENT = 100 * 1e18; + uint256 public constant MAX_PERCENT = 100 * 1e8; + + uint256 public depositBonusAmount; + uint256 public targetCapacity; + + address public treasuryAddress; + uint64 public protocolFee; + + /// @dev deposit bonus + uint64 public maxBonusRate; + uint64 public optimalBonusRate; + uint64 public depositUtilizationKink; + + /// @dev flash withdrawal fee + uint64 public maxFlashFeeRate; + uint64 public optimalWithdrawalRate; + uint64 public withdrawUtilizationKink; + + /// @dev Modifier to restrict functions to owner or operator. + modifier onlyOwnerOrOperator() { + if (msg.sender != owner() && msg.sender != operator) + revert OnlyOwnerOrOperator(); + + _; + } + + function __InceptionERC20OmniVault_init( + string memory vaultName, + address _operator, + IInceptionToken _inceptionToken, + IERC20 _underlyingAsset, + IERC20CrossChainBridge _crossChainAdapter + ) internal { + __Ownable2Step_init(); + __InceptionERC20OmniAssetsHandler_init(_underlyingAsset); + + name = vaultName; + operator = _operator; + treasuryAddress = msg.sender; + inceptionToken = _inceptionToken; + crossChainAdapterERC20 = _crossChainAdapter; + + minAmount = 1e8; + + /// TODO !!! + targetCapacity = 1; + protocolFee = 50 * 1e8; + + /// @dev deposit bonus + depositUtilizationKink = 25 * 1e8; + maxBonusRate = 1.5 * 1e8; + optimalBonusRate = 0.25 * 1e8; + + /// @dev withdrawal fee + withdrawUtilizationKink = 25 * 1e8; + maxFlashFeeRate = 3 * 1e8; + optimalWithdrawalRate = 0.5 * 1e8; + } + + /*////////////////////////////// + ////// Deposit functions ////// + ////////////////////////////*/ + + /** + * @dev Ensures deposit parameters are valid. + * @param receiver Address receiving the deposit. + * @param amount Amount of assets to be deposited. + */ + function __beforeDeposit(address receiver, uint256 amount) internal view { + if (receiver == address(0)) revert NullParams(); + if (amount < minAmount) revert LowerMinAmount(minAmount); + } + + /** + * @dev Ensures the calculated iShares is valid post-deposit. + * @param iShares Number of shares issued after the deposit. + */ + function __afterDeposit(uint256 iShares) internal pure { + if (iShares == 0) revert DepositInconsistentResultedState(); + } + + /// @dev Transfers the msg.sender's assets to the vault. + /// @dev Mints Inception tokens in accordance with the current ratio. + /// @dev Issues the tokens to the specified receiver address. + function deposit(uint256 amount, address receiver) + external + nonReentrant + whenNotPaused + returns (uint256) + { + return _deposit(amount, msg.sender, receiver); + } + + /// @notice The deposit function but with a referral code + function depositWithReferral( + uint256 amount, + address receiver, + bytes32 code + ) external nonReentrant whenNotPaused returns (uint256) { + emit ReferralCode(msg.sender, code); + return _deposit(amount, msg.sender, receiver); + } + + function _deposit( + uint256 amount, + address sender, + address receiver + ) internal returns (uint256) { + uint256 currentRatio = ratio(); + // transfers assets from the sender and returns the received amount + // the actual received amount might slightly differ from the specified amount, + // approximately by -2 wei + + __beforeDeposit(receiver, amount); + uint256 depositedBefore = totalAssets(); + uint256 depositBonus; + if (depositBonusAmount > 0) { + depositBonus = calculateDepositBonus(amount); + if (depositBonus > depositBonusAmount) { + depositBonus = depositBonusAmount; + depositBonusAmount = 0; + } else { + depositBonusAmount -= depositBonus; + } + emit DepositBonus(depositBonus); + } + + // pull the amount from the sender + _transferAssetFrom(sender, amount); + amount = totalAssets() - depositedBefore; + + uint256 iShares = Convert.multiplyAndDivideFloor( + amount + depositBonus, + currentRatio, + 1e18 + ); + inceptionToken.mint(receiver, iShares); + __afterDeposit(iShares); + + emit Deposit(sender, receiver, amount, iShares); + + return iShares; + } + + /*///////////////////////////////////////////// + ///////// Flash Withdrawal functions ///////// + ///////////////////////////////////////////*/ + + /** + * @dev Ensures withdrawal parameters are valid. + * @param receiver Address receiving the withdrawal. + * @param iShares Number of shares to be withdrawn. + */ + function __beforeWithdraw(address receiver, uint256 iShares) internal pure { + if (iShares == 0) revert NullParams(); + if (receiver == address(0)) revert NullParams(); + } + + /// @dev Performs burning iToken from msg.sender + /// @dev Creates a withdrawal requests based on the current ratio + /// @param iShares is measured in Inception token(shares) + function flashWithdraw(uint256 iShares, address receiver) + external + whenNotPaused + nonReentrant + { + __beforeWithdraw(receiver, iShares); + + address claimer = msg.sender; + uint256 currentRatio = ratio(); + uint256 amount = Convert.multiplyAndDivideFloor( + iShares, + 1e18, + currentRatio + ); + uint256 capacity = getFlashCapacity(); + if (amount < minAmount) revert LowerMinAmount(minAmount); + if (amount > capacity) revert InsufficientCapacity(capacity); + + // burn Inception token in view of the current ratio + inceptionToken.burn(claimer, iShares); + + uint256 fee = calculateFlashWithdrawFee(amount); + if (fee == 0) revert ZeroFlashWithdrawFee(); + amount -= fee; + uint256 protocolWithdrawalFee = (fee * protocolFee) / MAX_PERCENT; + depositBonusAmount += (fee - protocolWithdrawalFee); + + /// @notice instant transfer fee to the treasuryAddress + _transferAssetTo(treasuryAddress, protocolWithdrawalFee); + /// @notice instant transfer amount to the receiver + _transferAssetTo(receiver, amount); + + emit FlashWithdraw(claimer, receiver, claimer, amount, iShares, fee); + } + + /*////////////////////////////// + ////// Cross-chain functions /// + //////////////////////////////*/ + + /** + * @notice Sends asset information (total Inception and underlying token balances) to Layer 1. + */ + function sendAssetsInfoToL1(bytes memory _options) + external + payable + onlyOwnerOrOperator + { + require( + address(crossChainAdapterERC20) != address(0), + CrossChainAdapterNotSet() + ); + + /// @dev fees are still paid in ETH + uint256 msgValue = msg.value; + uint256 tokensAmount = _inceptionTokenSupply(); + uint256 erc20Amount = getFlashCapacity(); + bytes memory payload = abi.encode( + block.timestamp, + tokensAmount, + erc20Amount + ); + + require( + msgValue >= quoteSendAssetsInfoToL1(_options), + FeesAboveMsgValue(msgValue) + ); + + uint256 fees = crossChainAdapterERC20.sendDataL1{value: msgValue}( + payload, + _options + ); + + uint256 unusedFees = msgValue - fees; + if (unusedFees > 0) { + (bool success, ) = msg.sender.call{value: unusedFees}(""); + if (success) emit UnusedFeesSentBackToOperator(unusedFees); + } + + emit MessageToL1Sent(tokensAmount, erc20Amount); + } + + /** + * @notice Calculates price to send data message to Layer 1. + */ + function quoteSendAssetsInfoToL1(bytes memory _options) + public + view + returns (uint256) + { + require( + address(crossChainAdapterERC20) != address(0), + CrossChainAdapterNotSet() + ); + uint256 tokensAmount = _inceptionTokenSupply(); + uint256 erc20Amount = getFlashCapacity(); + bytes memory payload = abi.encode( + block.timestamp, + tokensAmount, + erc20Amount + ); + + return crossChainAdapterERC20.quote(payload, _options); + } + + /** + * @notice Sends available ERC20 to another chain via cross-chain adapter. + * @dev msg.value is used to pay for the cross-chain fees + */ + function sendERC20ToL1(uint256 _chainId) + external + payable + onlyOwnerOrOperator + { + uint256 freeBalance = getFreeBalance(); + + require( + freeBalance >= quoteSendERC20CrossChain(freeBalance), + FeesAboveMsgValue(freeBalance) + ); + + _approve(address(crossChainAdapterERC20), freeBalance); + uint256 returnedDust = crossChainAdapterERC20.sendTokens(freeBalance); + emit ERC20CrossChainSent(freeBalance - returnedDust, _chainId); + } + + /** + * @notice Calculates fees to send ERC20 to other chain. The `SEND_VALUE` encoded in options is not included in the return + * @param _amount amount of token to be sent + */ + function quoteSendERC20CrossChain(uint256 _amount) + public + view + returns (uint256) + { + require( + address(crossChainAdapterERC20) != address(0), + CrossChainAdapterNotSet() + ); + return crossChainAdapterERC20.quoteSendTokens(_amount); // this is just the ferry fee + } + + /*////////////////////////////// + ////// Utility functions /////// + //////////////////////////////*/ + + /** + * @notice Calculates the bonus for a deposit based on the current utilization rate. + * @param amount Amount of the deposit. + * @return bonus Calculated bonus. + */ + function calculateDepositBonus(uint256 amount) + public + view + returns (uint256) + { + return + InternalInceptionLibrary.calculateDepositBonus( + amount, + getFlashCapacity(), + (targetCapacity * depositUtilizationKink) / MAX_PERCENT, + optimalBonusRate, + maxBonusRate, + targetCapacity + ); + } + + /// @dev Function to calculate flash withdrawal fee based on the utilization rate + function calculateFlashWithdrawFee(uint256 amount) + public + view + returns (uint256) + { + uint256 capacity = getFlashCapacity(); + if (amount > capacity) revert InsufficientCapacity(capacity); + + return + InternalInceptionLibrary.calculateWithdrawalFee( + amount, + capacity, + (targetCapacity * withdrawUtilizationKink) / MAX_PERCENT, + optimalWithdrawalRate, + maxFlashFeeRate, + targetCapacity + ); + } + + function getFreeBalance() public view returns (uint256) { + return + getFlashCapacity() < targetCapacity + ? 0 + : getFlashCapacity() - targetCapacity; + } + + function _inceptionTokenSupply() internal view returns (uint256) { + return IERC20(address(inceptionToken)).totalSupply(); + } + + function ratio() public view returns (uint256) { + return ratioFeed.getRatioFor(address(inceptionToken)); + } + + function getTotalDeposited() public view returns (uint256) { + return totalAssets() - depositBonusAmount; + } + + function getFlashCapacity() public view returns (uint256 total) { + return totalAssets() - depositBonusAmount; + } + + function _getTargetCapacity() internal view returns (uint256) { + return (targetCapacity * getTotalDeposited()) / MAX_TARGET_PERCENT; + } + + /*////////////////////////////// + ////// Convert functions ////// + ////////////////////////////*/ + + function convertToShares(uint256 assets) + public + view + returns (uint256 shares) + { + return Convert.multiplyAndDivideFloor(assets, ratio(), 1e18); + } + + function convertToAssets(uint256 iShares) + public + view + returns (uint256 assets) + { + return Convert.multiplyAndDivideFloor(iShares, 1e18, ratio()); + } + + /*////////////////////////// + ////// SET functions ////// + ////////////////////////*/ + + function setDepositBonusParams( + uint64 newMaxBonusRate, + uint64 newOptimalBonusRate, + uint64 newDepositUtilizationKink + ) external onlyOwner { + if (newMaxBonusRate > MAX_PERCENT) + revert ParameterExceedsLimits(newMaxBonusRate); + if (newOptimalBonusRate > MAX_PERCENT) + revert ParameterExceedsLimits(newOptimalBonusRate); + if (newDepositUtilizationKink > MAX_PERCENT) + revert ParameterExceedsLimits(newDepositUtilizationKink); + + if (newMaxBonusRate > maxFlashFeeRate) + revert BonusHigherThanFWFee(newMaxBonusRate); + if (newOptimalBonusRate > optimalWithdrawalRate) + revert BonusHigherThanFWFee(newOptimalBonusRate); + if (newDepositUtilizationKink > withdrawUtilizationKink) + revert BonusHigherThanFWFee(newDepositUtilizationKink); + + maxBonusRate = newMaxBonusRate; + optimalBonusRate = newOptimalBonusRate; + depositUtilizationKink = newDepositUtilizationKink; + + emit DepositBonusParamsChanged( + newMaxBonusRate, + newOptimalBonusRate, + newDepositUtilizationKink + ); + } + + function setFlashWithdrawFeeParams( + uint64 newMaxFlashFeeRate, + uint64 newOptimalWithdrawalRate, + uint64 newWithdrawUtilizationKink + ) external onlyOwner { + if (newMaxFlashFeeRate > MAX_PERCENT) + revert ParameterExceedsLimits(newMaxFlashFeeRate); + if (newOptimalWithdrawalRate > MAX_PERCENT) + revert ParameterExceedsLimits(newOptimalWithdrawalRate); + if (newWithdrawUtilizationKink > MAX_PERCENT) + revert ParameterExceedsLimits(newWithdrawUtilizationKink); + + if (newMaxFlashFeeRate < maxBonusRate) + revert BonusHigherThanFWFee(newMaxFlashFeeRate); + if (newOptimalWithdrawalRate < optimalBonusRate) + revert BonusHigherThanFWFee(newOptimalWithdrawalRate); + if (newWithdrawUtilizationKink < depositUtilizationKink) + revert BonusHigherThanFWFee(newWithdrawUtilizationKink); + + maxFlashFeeRate = newMaxFlashFeeRate; + optimalWithdrawalRate = newOptimalWithdrawalRate; + withdrawUtilizationKink = newWithdrawUtilizationKink; + + emit WithdrawFeeParamsChanged( + newMaxFlashFeeRate, + newOptimalWithdrawalRate, + newWithdrawUtilizationKink + ); + } + + function setProtocolFee(uint64 newProtocolFee) external onlyOwner { + if (newProtocolFee >= MAX_PERCENT) + revert ParameterExceedsLimits(newProtocolFee); + + emit ProtocolFeeChanged(protocolFee, newProtocolFee); + protocolFee = newProtocolFee; + } + + function setRatioFeed(IInceptionRatioFeed newRatioFeed) external onlyOwner { + if (address(newRatioFeed) == address(0)) revert NullParams(); + + emit RatioFeedChanged(address(ratioFeed), address(newRatioFeed)); + ratioFeed = newRatioFeed; + } + + function setMinAmount(uint256 newMinAmount) external onlyOwner { + emit MinAmountChanged(minAmount, newMinAmount); + minAmount = newMinAmount; + } + + function setTreasuryAddress(address _newTreasury) external onlyOwner { + if (_newTreasury == address(0)) revert NullParams(); + + emit TreasuryUpdated(treasuryAddress, _newTreasury); + treasuryAddress = _newTreasury; + } + + function setTargetFlashCapacity(uint256 newTargetCapacity) + external + onlyOwner + { + if (newTargetCapacity == 0) revert NullParams(); + emit TargetCapacityChanged(targetCapacity, newTargetCapacity); + targetCapacity = newTargetCapacity; + } + + function setName(string memory newVaultName) external onlyOwner { + if (bytes(newVaultName).length == 0) revert NullParams(); + + emit NameChanged(name, newVaultName); + name = newVaultName; + } + + /*/////////////////////////////// + ////// Pausable functions ////// + /////////////////////////////*/ + + function pause() external onlyOwner { + _pause(); + } + + function unpause() external onlyOwner { + _unpause(); + } +} diff --git a/projects/vaults/contracts/vaults/vault_e2/ERC20OmniVault_E2.sol b/projects/vaults/contracts/vaults/vault_e2/ERC20OmniVault_E2.sol new file mode 100644 index 00000000..bc278cde --- /dev/null +++ b/projects/vaults/contracts/vaults/vault_e2/ERC20OmniVault_E2.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +import {InceptionERC20OmniVault, IInceptionToken} from "../InceptionERC20OmniVault.sol"; +import {IERC20CrossChainBridge} from "../../interfaces/IERC20CrossChainBridge.sol"; + +/// @author The InceptionLRT team +/// @title The ERC20OmniVault_E2, specifically designed for the LST Omni Restaking +contract ERC20OmniVault_E2 is InceptionERC20OmniVault { + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() payable{ + _disableInitializers(); + } + + function initialize( + string memory vaultName, + address _operator, + address _inceptionToken, + address _underlyingAsset, + IERC20CrossChainBridge _crossChainAdapter + ) external initializer { + __InceptionERC20OmniVault_init(vaultName, _operator, IInceptionToken(_inceptionToken), IERC20(_underlyingAsset), _crossChainAdapter); + } +} diff --git a/projects/vaults/hardhat.config.ts b/projects/vaults/hardhat.config.ts index 17427687..03bc5aaa 100644 --- a/projects/vaults/hardhat.config.ts +++ b/projects/vaults/hardhat.config.ts @@ -13,7 +13,7 @@ import "./tasks/deposit-extra"; const config: HardhatUserConfig = { ...(CONFIG as HardhatUserConfig), solidity: { - version: "0.8.24", + version: "0.8.27", settings: { optimizer: { enabled: true, diff --git a/projects/vaults/yarn.lock b/projects/vaults/yarn.lock index f39d6cdb..e95f7624 100644 --- a/projects/vaults/yarn.lock +++ b/projects/vaults/yarn.lock @@ -24,6 +24,28 @@ dependencies: "@truffle/hdwallet-provider" "^1.0.0" +"@aws-crypto/crc32@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" + integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" + integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== + dependencies: + "@aws-crypto/sha256-js" "^5.2.0" + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + "@aws-crypto/sha256-js@1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" @@ -33,6 +55,22 @@ "@aws-sdk/types" "^3.1.0" tslib "^1.11.1" +"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" + integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/supports-web-crypto@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" + integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== + dependencies: + tslib "^2.6.2" + "@aws-crypto/util@^1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.2.tgz#b28f7897730eb6538b21c18bd4de22d0ea09003c" @@ -42,13 +80,383 @@ "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" -"@aws-sdk/types@^3.1.0": - version "3.413.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.413.0.tgz#55b935d1668913a0e48ab5ddb4d9b95ff8707c02" - integrity sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ== - dependencies: - "@smithy/types" "^2.3.1" - tslib "^2.5.0" +"@aws-crypto/util@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" + integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-lambda@^3.563.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-lambda/-/client-lambda-3.744.0.tgz#cf000d2324929a772aca0e063fc6aa9f10080c3e" + integrity sha512-XPWPuvRkrabJ9jMBeEurn2vXVo40umeoeV0+nAERtG6mt9dB8d3gobHROBG5iwWJV1oqBDn9E/ZN8WDahvM1BQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.744.0" + "@aws-sdk/credential-provider-node" "3.744.0" + "@aws-sdk/middleware-host-header" "3.734.0" + "@aws-sdk/middleware-logger" "3.734.0" + "@aws-sdk/middleware-recursion-detection" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.744.0" + "@aws-sdk/region-config-resolver" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.743.0" + "@aws-sdk/util-user-agent-browser" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.744.0" + "@smithy/config-resolver" "^4.0.1" + "@smithy/core" "^3.1.2" + "@smithy/eventstream-serde-browser" "^4.0.1" + "@smithy/eventstream-serde-config-resolver" "^4.0.1" + "@smithy/eventstream-serde-node" "^4.0.1" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/hash-node" "^4.0.1" + "@smithy/invalid-dependency" "^4.0.1" + "@smithy/middleware-content-length" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.3" + "@smithy/middleware-retry" "^4.0.4" + "@smithy/middleware-serde" "^4.0.2" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.3" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.4" + "@smithy/util-defaults-mode-node" "^4.0.4" + "@smithy/util-endpoints" "^3.0.1" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + "@smithy/util-stream" "^4.0.2" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.2" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.744.0.tgz#8de02749e9323c2800315ef3b08b32e74b9a8c66" + integrity sha512-mzJxPQ9mcnNY50pi7+pxB34/Dt7PUn0OgkashHdJPTnavoriLWvPcaQCG1NEVAtyzxNdowhpi4KjC+aN1EwAeA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.744.0" + "@aws-sdk/middleware-host-header" "3.734.0" + "@aws-sdk/middleware-logger" "3.734.0" + "@aws-sdk/middleware-recursion-detection" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.744.0" + "@aws-sdk/region-config-resolver" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.743.0" + "@aws-sdk/util-user-agent-browser" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.744.0" + "@smithy/config-resolver" "^4.0.1" + "@smithy/core" "^3.1.2" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/hash-node" "^4.0.1" + "@smithy/invalid-dependency" "^4.0.1" + "@smithy/middleware-content-length" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.3" + "@smithy/middleware-retry" "^4.0.4" + "@smithy/middleware-serde" "^4.0.2" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.3" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.4" + "@smithy/util-defaults-mode-node" "^4.0.4" + "@smithy/util-endpoints" "^3.0.1" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.744.0.tgz#0b357ca6b14c34c4bb5a626bcaa0b0392781b5d4" + integrity sha512-R0XLfDDq7MAXYyDf7tPb+m0R7gmzTRRDtPNQ5jvuq8dbkefph5gFMkxZ2zSx7dfTsfYHhBPuTBsQ0c5Xjal3Vg== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/core" "^3.1.2" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/signature-v4" "^5.0.1" + "@smithy/smithy-client" "^4.1.3" + "@smithy/types" "^4.1.0" + "@smithy/util-middleware" "^4.0.1" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.744.0.tgz#bfcfa86a7b7d0dc94fb7e97ef35d2b7830f69f42" + integrity sha512-hyjC7xqzAeERorYYjhQG1ivcr1XlxgfBpa+r4pG29toFG60mACyVzaR7+og3kgzjRFAB7D1imMxPQyEvQ1QokA== + dependencies: + "@aws-sdk/core" "3.744.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.744.0.tgz#696c71f0fdea856a69752947624255383c2fca1f" + integrity sha512-k+P1Tl5ewBvVByR6hB726qFIzANgQVf2cY87hZ/e09pQYlH4bfBcyY16VJhkqYnKmv6HMdWxKHX7D8nwlc8Obg== + dependencies: + "@aws-sdk/core" "3.744.0" + "@aws-sdk/types" "3.734.0" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/property-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.3" + "@smithy/types" "^4.1.0" + "@smithy/util-stream" "^4.0.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.744.0.tgz#7d048788efdce53391211ce3b4624a6a146a16e0" + integrity sha512-hjEWgkF86tkvg8PIsDiB3KkTj7z8ZFGR0v0OLQYD47o17q1qfoMzZmg9wae3wXp9KzU+lZETo+8oMqX9a+7aVQ== + dependencies: + "@aws-sdk/core" "3.744.0" + "@aws-sdk/credential-provider-env" "3.744.0" + "@aws-sdk/credential-provider-http" "3.744.0" + "@aws-sdk/credential-provider-process" "3.744.0" + "@aws-sdk/credential-provider-sso" "3.744.0" + "@aws-sdk/credential-provider-web-identity" "3.744.0" + "@aws-sdk/nested-clients" "3.744.0" + "@aws-sdk/types" "3.734.0" + "@smithy/credential-provider-imds" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.744.0.tgz#302a136b40c5bc6b3b137d03615ec97eb111bfe8" + integrity sha512-4oUfRd6pe/VGmKoav17pPoOO0WP0L6YXmHqtJHSDmFUOAa+Vh0ZRljTj/yBdleRgdO6rOfdWqoGLFSFiAZDrsQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.744.0" + "@aws-sdk/credential-provider-http" "3.744.0" + "@aws-sdk/credential-provider-ini" "3.744.0" + "@aws-sdk/credential-provider-process" "3.744.0" + "@aws-sdk/credential-provider-sso" "3.744.0" + "@aws-sdk/credential-provider-web-identity" "3.744.0" + "@aws-sdk/types" "3.734.0" + "@smithy/credential-provider-imds" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.744.0.tgz#4a0850276a4175094aba7d6164dd29a5fd855a95" + integrity sha512-m0d/pDBIaiEAAxWXt/c79RHsKkUkyPOvF2SAMRddVhhOt1GFZI4ml+3f4drmAZfXldIyJmvJTJJqWluVPwTIqQ== + dependencies: + "@aws-sdk/core" "3.744.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.744.0.tgz#8e25af2c7b12887f2db4ce33c88efa4e136173d7" + integrity sha512-xdMufTZOvpbDoDPI2XLu0/Rg3qJ/txpS8IJR63NsCGotHJZ/ucLNKwTcGS40hllZB8qSHTlvmlOzElDahTtx/A== + dependencies: + "@aws-sdk/client-sso" "3.744.0" + "@aws-sdk/core" "3.744.0" + "@aws-sdk/token-providers" "3.744.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.744.0.tgz#fab672a92bf4924e0fee5e4ca307f25cd9dc2f7a" + integrity sha512-cNk93GZxORzqEojWfXdrPBF6a7Nu3LpPCWG5mV+lH2tbuGsmw6XhKkwpt7o+OiIP4tKCpHlvqOD8f1nmhe1KDA== + dependencies: + "@aws-sdk/core" "3.744.0" + "@aws-sdk/nested-clients" "3.744.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.734.0.tgz#a9a02c055352f5c435cc925a4e1e79b7ba41b1b5" + integrity sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.734.0.tgz#d31e141ae7a78667e372953a3b86905bc6124664" + integrity sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.734.0.tgz#4fa1deb9887455afbb39130f7d9bc89ccee17168" + integrity sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.744.0.tgz#b87405dc60943afbcbc858e0dcdb69eaea46033c" + integrity sha512-ROUbDQHfVWiBHXd4m9E9mKj1Azby8XCs8RC8OCf9GVH339GSE6aMrPJSzMlsV1LmzPdPIypgp5qqh5NfSrKztg== + dependencies: + "@aws-sdk/core" "3.744.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.743.0" + "@smithy/core" "^3.1.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/nested-clients@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.744.0.tgz#6af18949cf2a2180c2c4fbcf71fab6fd965e1874" + integrity sha512-Mnrlh4lRY1gZQnKvN2Lh/5WXcGkzC41NM93mtn2uaqOh+DZLCXCttNCfbUesUvYJLOo3lYaOpiDsjTkPVB1yjw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.744.0" + "@aws-sdk/middleware-host-header" "3.734.0" + "@aws-sdk/middleware-logger" "3.734.0" + "@aws-sdk/middleware-recursion-detection" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.744.0" + "@aws-sdk/region-config-resolver" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.743.0" + "@aws-sdk/util-user-agent-browser" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.744.0" + "@smithy/config-resolver" "^4.0.1" + "@smithy/core" "^3.1.2" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/hash-node" "^4.0.1" + "@smithy/invalid-dependency" "^4.0.1" + "@smithy/middleware-content-length" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.3" + "@smithy/middleware-retry" "^4.0.4" + "@smithy/middleware-serde" "^4.0.2" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.3" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.4" + "@smithy/util-defaults-mode-node" "^4.0.4" + "@smithy/util-endpoints" "^3.0.1" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.734.0.tgz#45ffbc56a3e94cc5c9e0cd596b0fda60f100f70b" + integrity sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.744.0.tgz#bedfda532cea4b28c323c5e0d23c7d974ce2ccc8" + integrity sha512-v/1+lWkDCd60Ei6oyhJqli6mTsPEVepLoSMB50vHUVlJP0fzXu/3FMje90/RzeUoh/VugZQJCEv/NNpuC6wztg== + dependencies: + "@aws-sdk/nested-clients" "3.744.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.734.0", "@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.222.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.734.0.tgz#af5e620b0e761918282aa1c8e53cac6091d169a2" + integrity sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.743.0": + version "3.743.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.743.0.tgz#fba654e0c5f1c8ba2b3e175dfee8e3ba4df2394a" + integrity sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/types" "^4.1.0" + "@smithy/util-endpoints" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.723.0.tgz#174551bfdd2eb36d3c16e7023fd7e7ee96ad0fa9" + integrity sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.734.0.tgz#bbf3348b14bd7783f60346e1ce86978999450fe7" + integrity sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/types" "^4.1.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.744.0": + version "3.744.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.744.0.tgz#d2a5293d5036c95832020d596ce28d6899223971" + integrity sha512-BJURjwIXhNa4heXkLC0+GcL+8wVXaU7JoyW6ckdvp93LL+sVHeR1d5FxXZHQW/pMI4E3gNlKyBqjKaT75tObNQ== + dependencies: + "@aws-sdk/middleware-user-agent" "3.744.0" + "@aws-sdk/types" "3.734.0" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" "@aws-sdk/util-utf8-browser@^3.0.0": version "3.259.0" @@ -57,88 +465,136 @@ dependencies: tslib "^2.3.1" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.21.5": - version "7.21.9" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.9.tgz#10a2e7fda4e51742c907938ac3b7229426515514" - integrity sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ== - -"@babel/helper-compilation-targets@^7.17.7": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" - integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== +"@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: - "@babel/compat-data" "^7.21.5" - "@babel/helper-validator-option" "^7.21.0" - browserslist "^4.21.3" + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.5": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" + integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== + +"@babel/generator@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.8.tgz#f9c5e770309e12e3099ad8271e52f6caa15442ab" + integrity sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA== + dependencies: + "@babel/parser" "^7.26.8" + "@babel/types" "^7.26.8" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.22.6": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" + integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== + dependencies: + "@babel/compat-data" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" lru-cache "^5.1.1" - semver "^6.3.0" + semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== +"@babel/helper-define-polyfill-provider@^0.6.2", "@babel/helper-define-polyfill-provider@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21" + integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" - semver "^6.1.2" -"@babel/helper-module-imports@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== dependencies: - "@babel/types" "^7.21.4" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.20.2": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" - integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== +"@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" + integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== -"@babel/helper-string-parser@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" - integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== -"@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== -"@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/parser@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.8.tgz#deca2b4d99e5e1b1553843b99823f118da6107c2" + integrity sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw== + dependencies: + "@babel/types" "^7.26.8" "@babel/plugin-transform-runtime@^7.5.5": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz#2e1da21ca597a7d01fc96b699b21d8d2023191aa" - integrity sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA== - dependencies: - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-plugin-utils" "^7.20.2" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - semver "^6.3.0" + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.8.tgz#e025e062c08809db61de7e249193a8de1bc83092" + integrity sha512-H0jlQxFMI0Q8SyGPsj9pO3ygVQRxPkIGytsL3m1Zqca8KrCPpMlvh+e2dxknqdfS8LFwBw+PpiYPD9qy/FPQpA== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.26.5" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" + semver "^6.3.1" "@babel/runtime@^7.5.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" - integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== - dependencies: - regenerator-runtime "^0.13.11" + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.7.tgz#f4e7fe527cd710f8dc0618610b61b4b060c3c341" + integrity sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.8.tgz#db3898f47a17bab2f4c78ec1d0de38527c2ffe19" + integrity sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.26.8" + "@babel/types" "^7.26.8" + +"@babel/traverse@^7.25.9": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.8.tgz#0a8a9c2b7cc9519eed14275f4fd2278ad46e8cc9" + integrity sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.8" + "@babel/parser" "^7.26.8" + "@babel/template" "^7.26.8" + "@babel/types" "^7.26.8" + debug "^4.3.1" + globals "^11.1.0" -"@babel/types@^7.21.4": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" - integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== +"@babel/types@^7.25.9", "@babel/types@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.8.tgz#97dcdc190fab45be7f3dc073e3c11160d677c127" + integrity sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA== dependencies: - "@babel/helper-string-parser" "^7.21.5" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" "@bytecodealliance/preview2-shim@0.17.0": version "0.17.0" @@ -165,6 +621,11 @@ crc-32 "^1.2.0" ethereumjs-util "^7.1.5" +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + "@ethereumjs/tx@^3.3.0": version "3.5.2" resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" @@ -173,7 +634,16 @@ "@ethereumjs/common" "^2.6.4" ethereumjs-util "^7.1.5" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.7", "@ethersproject/abi@^5.7.0": +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.7", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -526,12 +996,31 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@jridgewell/resolve-uri@^3.0.3": +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.5.0" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== @@ -544,6 +1033,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@metamask/eth-sig-util@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" @@ -555,14 +1052,6 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@morgan-stanley/ts-mocking-bird@^0.6.2": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz#2e4b60d42957bab3b50b67dbf14c3da2f62a39f7" - integrity sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA== - dependencies: - lodash "^4.17.16" - uuid "^7.0.3" - "@noble/curves@1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" @@ -570,6 +1059,13 @@ dependencies: "@noble/hashes" "1.3.2" +"@noble/curves@1.4.2", "@noble/curves@~1.4.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== + dependencies: + "@noble/hashes" "1.4.0" + "@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" @@ -580,6 +1076,16 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== +"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + +"@noble/hashes@^1.4.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" + integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== + "@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" @@ -606,53 +1112,53 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/edr-darwin-arm64@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.5.tgz#37a31565d7ef42bed9028ac44aed82144de30bd1" - integrity sha512-A9zCCbbNxBpLgjS1kEJSpqxIvGGAX4cYbpDYCU2f3jVqOwaZ/NU761y1SvuCRVpOwhoCXqByN9b7HPpHi0L4hw== +"@nomicfoundation/edr-darwin-arm64@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.7.0.tgz#2be3338a61508ed1d24326c82b9aa9224a844dd7" + integrity sha512-vAH20oh4GaSB/iQFTRcoO8jLc0CLd9XuLY9I7vtcqZWAiM4U1J4Y8cu67PWmtxbvUQOqXR7S6FtAr8/AlWm14g== -"@nomicfoundation/edr-darwin-x64@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.5.tgz#3252f6e86397af460b7a480bfe1b889464d75b89" - integrity sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w== +"@nomicfoundation/edr-darwin-x64@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.7.0.tgz#d2f782fc43bcae1c9aca3130aca6aa2a964e8559" + integrity sha512-WHDdIrPvLlgXQr2eKypBM5xOZAwdxhDAEQIvEMQL8tEEm2qYW2bliUlssBPrs8E3bdivFbe1HizImslMAfU3+g== -"@nomicfoundation/edr-linux-arm64-gnu@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.5.tgz#e7dc2934920b6cfabeb5ee7a5e26c8fb0d4964ac" - integrity sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A== +"@nomicfoundation/edr-linux-arm64-gnu@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.7.0.tgz#48b156744989acc8e6b0b754158a26e10ad865ed" + integrity sha512-WXpJB54ukz1no7gxCPXVEw9pgl/9UZ/WO3l1ctyv/T7vOygjqA4SUd6kppTs6MNXAuTiisPtvJ/fmvHiMBLrsw== -"@nomicfoundation/edr-linux-arm64-musl@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.5.tgz#00459cd53e9fb7bd5b7e32128b508a6e89079d89" - integrity sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ== +"@nomicfoundation/edr-linux-arm64-musl@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.7.0.tgz#60351352ec26704fed8a232430bf3793d17c29cd" + integrity sha512-1iZYOcEgc+zJI7JQrlAFziuy9sBz1WgnIx3HIIu0J7lBRZ/AXeHHgATb+4InqxtEx9O3W8A0s7f11SyFqJL4Aw== -"@nomicfoundation/edr-linux-x64-gnu@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.5.tgz#5c9e4e2655caba48e0196977cba395bbde6fe97d" - integrity sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg== +"@nomicfoundation/edr-linux-x64-gnu@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.7.0.tgz#a7b056bfd46ccfde4d55c9601da5a410c2fce40f" + integrity sha512-wSjC94WcR5MM8sg9w3OsAmT6+bbmChJw6uJKoXR3qscps/jdhjzJWzfgT0XGRq3XMUfimyafW2RWOyfX3ouhrQ== -"@nomicfoundation/edr-linux-x64-musl@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.5.tgz#9c220751b66452dc43a365f380e1e236a0a8c5a9" - integrity sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A== +"@nomicfoundation/edr-linux-x64-musl@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.7.0.tgz#0fe9f5ace05072e845f71c8fbd28e57798dd6ab5" + integrity sha512-Us22+AZ7wkG1mZwxqE4S4ZcuwkEA5VrUiBOJSvKHGOgy6vFvB/Euh5Lkp4GovwjrtiXuvyGO2UmtkzymZKDxZw== -"@nomicfoundation/edr-win32-x64-msvc@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.5.tgz#90d3ac2a6a8a687522bda5ff2e92dd97e68126ea" - integrity sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A== +"@nomicfoundation/edr-win32-x64-msvc@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.7.0.tgz#f1b9a0a643db8dffcf5edb827c18e1cef25c4367" + integrity sha512-HAry0heTsWkzReVtjHwoIq3BgFCvXpVhJ5qPmTnegZGsr/KxqvMmHyDMifzKao4bycU8yrpTSyOiAJt27RWjzQ== -"@nomicfoundation/edr@^0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.6.5.tgz#b3b1ebcdd0148cfe67cca128e7ebe8092e200359" - integrity sha512-tAqMslLP+/2b2sZP4qe9AuGxG3OkQ5gGgHE4isUuq6dUVjwCRPFhAOhpdFl+OjY5P3yEv3hmq9HjUGRa2VNjng== +"@nomicfoundation/edr@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.7.0.tgz#175cb8a81eac585dc76ad41585c908542acb9383" + integrity sha512-+Zyu7TE47TGNcPhOfWLPA/zISs32WDMXrhSWdWYyPHDVn/Uux5TVuOeScKb0BR/R8EJ+leR8COUF/EGxvDOVKg== dependencies: - "@nomicfoundation/edr-darwin-arm64" "0.6.5" - "@nomicfoundation/edr-darwin-x64" "0.6.5" - "@nomicfoundation/edr-linux-arm64-gnu" "0.6.5" - "@nomicfoundation/edr-linux-arm64-musl" "0.6.5" - "@nomicfoundation/edr-linux-x64-gnu" "0.6.5" - "@nomicfoundation/edr-linux-x64-musl" "0.6.5" - "@nomicfoundation/edr-win32-x64-msvc" "0.6.5" + "@nomicfoundation/edr-darwin-arm64" "0.7.0" + "@nomicfoundation/edr-darwin-x64" "0.7.0" + "@nomicfoundation/edr-linux-arm64-gnu" "0.7.0" + "@nomicfoundation/edr-linux-arm64-musl" "0.7.0" + "@nomicfoundation/edr-linux-x64-gnu" "0.7.0" + "@nomicfoundation/edr-linux-x64-musl" "0.7.0" + "@nomicfoundation/edr-win32-x64-msvc" "0.7.0" "@nomicfoundation/ethereumjs-common@4.0.4": version "4.0.4" @@ -703,17 +1209,17 @@ lodash.isequal "^4.5.0" "@nomicfoundation/hardhat-ignition-ethers@^0.15.0": - version "0.15.8" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.8.tgz#9ae110b2258890b15492bafa68f15dce388e5edc" - integrity sha512-5Ev8cXBKgqqOsFXxWe8iijsRabWGd/Vclx3SC903KeKVePdssVsZcYTtRNRcIwRcPJ0RIKJPIZz7MNDo64l3+w== + version "0.15.9" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.9.tgz#706801c2e8c70b39c77377439bdb240c20eee76c" + integrity sha512-9PwwgLv3z2ec3B26mK0IjiFezHFFBcBcs1qKaRu8SanARE4b7RvrfiLIy8ZXE7HaxgPt32kSsQzehhzAwAIj1Q== "@nomicfoundation/hardhat-ignition@^0.15.0": - version "0.15.8" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.8.tgz#d1a6bb508740959986ad256a4403570aec3d40d0" - integrity sha512-TN8TFQokcd7VyqGfbXO+KS8Q4K/gmsOFlv8dPnt/N596AncgV2Igxh5C3O+KVez11PDHNqoj1JzcDzzNVHrIRw== + version "0.15.9" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.9.tgz#7f66ad928308f391e3ba8241655f835c7bb3546c" + integrity sha512-lSWqhaDOBt6gsqMadkRLvH6HdoFV1v8/bx7z+12cghaOloVwwn48CPoTH2iXXnkqilPGw8rdH5eVTE6UM+2v6Q== dependencies: - "@nomicfoundation/ignition-core" "^0.15.8" - "@nomicfoundation/ignition-ui" "^0.15.8" + "@nomicfoundation/ignition-core" "^0.15.9" + "@nomicfoundation/ignition-ui" "^0.15.9" chalk "^4.0.0" debug "^4.3.2" fs-extra "^10.0.0" @@ -721,9 +1227,9 @@ prompts "^2.4.2" "@nomicfoundation/hardhat-network-helpers@^1.0.0": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.11.tgz#64096829661b960b88679bd5c4fbcb50654672d1" - integrity sha512-uGPL7QSKvxrHRU69dx8jzoBvuztlLCtyFsbgfXIwIjnO3dqZRz2GNMHJoO3C3dIiUNM6jdNF4AUnoQKDscdYrA== + version "1.0.12" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.12.tgz#2c0abec0c50b75f9d0d71776e49e3b5ef746d289" + integrity sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA== dependencies: ethereumjs-util "^7.1.4" @@ -747,10 +1253,10 @@ table "^6.8.0" undici "^5.14.0" -"@nomicfoundation/ignition-core@^0.15.8": - version "0.15.8" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ignition-core/-/ignition-core-0.15.8.tgz#a5bf84f52d029d0305b5a34a289e6bb64bdcb5e6" - integrity sha512-U+CmTjKU9uwvh7qIabqboy/K/sDoClDgpsFRHoFvAj87DPDkXYb/mZBSkXPTU1wxTxrW6GTFE4lG3e7LAyF+kw== +"@nomicfoundation/ignition-core@^0.15.9": + version "0.15.9" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ignition-core/-/ignition-core-0.15.9.tgz#5c9401ad93e0c15f633afaf9b3d055b57a881604" + integrity sha512-X8W+7UP/UQPorpHUnGvA1OdsEr/edGi8tDpNwEqzaLm83FMZVbRWdOsr3vNICHN2XMzNY/xIm18Cx7xGKL2PQw== dependencies: "@ethersproject/address" "5.6.1" "@nomicfoundation/solidity-analyzer" "^0.1.1" @@ -762,10 +1268,10 @@ lodash "4.17.21" ndjson "2.0.0" -"@nomicfoundation/ignition-ui@^0.15.8": - version "0.15.8" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.8.tgz#8c0dacec4809d8b90724a1901866656222beeda9" - integrity sha512-VUD5MsWrrv7E2P0AJO01pV8w8m66Du0uwBKXM0oUV5DRIzqm6eYHt9eCDb1KBINDpiFxOQiuyWQMdeKxgPp3qw== +"@nomicfoundation/ignition-ui@^0.15.9": + version "0.15.9" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.9.tgz#ba94174f44e5c0de01d9968633fdf925a9585768" + integrity sha512-8lzbT7gpJ5PoowPQDQilkwdyqBviUKDMoHp/5rhgnwG1bDslnCS+Lxuo6s9R2akWu9LtEL14dNyqQb6WsURTag== "@nomicfoundation/slang@^0.18.3": version "0.18.3" @@ -774,108 +1280,42 @@ dependencies: "@bytecodealliance/preview2-shim" "0.17.0" -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" - integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== - "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz#3a9c3b20d51360b20affb8f753e756d553d49557" integrity sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw== -"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" - integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== - "@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz#74dcfabeb4ca373d95bd0d13692f44fcef133c28" integrity sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw== -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" - integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" - integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz#4af5849a89e5a8f511acc04f28eb5d4460ba2b6a" integrity sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA== -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" - integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== - "@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz#54036808a9a327b2ff84446c130a6687ee702a8e" integrity sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA== -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" - integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== - "@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz#466cda0d6e43691986c944b909fc6dbb8cfc594e" integrity sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g== -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" - integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== - "@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz#2b35826987a6e94444140ac92310baa088ee7f94" integrity sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg== -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" - integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== - -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" - integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== - -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" - integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== - "@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz#e6363d13b8709ca66f330562337dbc01ce8bbbd9" integrity sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA== -"@nomicfoundation/solidity-analyzer@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" - integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== - optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" - -"@nomicfoundation/solidity-analyzer@^0.1.1": +"@nomicfoundation/solidity-analyzer@^0.1.0", "@nomicfoundation/solidity-analyzer@^0.1.1": version "0.1.2" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz#8bcea7d300157bf3a770a851d9f5c5e2db34ac55" integrity sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA== @@ -914,40 +1354,41 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.6.tgz#2a880a24eb19b4f8b25adc2a5095f2aa27f39677" integrity sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA== -"@openzeppelin/defender-sdk-base-client@^1.14.4", "@openzeppelin/defender-sdk-base-client@^1.15.2": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.15.2.tgz#aae7ec001365968b81ccce087f39a6eb52fa13f9" - integrity sha512-N3ZTeH8TXyklL7yNPMLUv0dxQwT78DTkOEDhzMS2/QE2FxbXrclSseoeeXxl6UYI61RBtZKn+okbSsbwiB5QWQ== +"@openzeppelin/defender-sdk-base-client@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-2.1.0.tgz#f4f969fb327068c1024ba61b10a24f88cffdeece" + integrity sha512-YxrOgjESsbmxArLoe8kRA6lKwz/Qm/OtaZBfquzAg+w0jgOG9ogFuXA3NI6w2sVw1w/PzI1dWKe30u62p5vLXw== dependencies: + "@aws-sdk/client-lambda" "^3.563.0" amazon-cognito-identity-js "^6.3.6" async-retry "^1.3.3" -"@openzeppelin/defender-sdk-deploy-client@^1.14.4": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.15.2.tgz#3b1d953aa66b6cdee13e7e672a488af2e2acf974" - integrity sha512-zspzMqh+OC8arXAkgBqTUDVO+NfCkt54UrsmQHbA3UAjr5TiDXKycBKU5ORb01hE+2gAmoPwEpDW9uS2VLg33A== +"@openzeppelin/defender-sdk-deploy-client@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-2.1.0.tgz#02cfa27041c50f79694103c5ba80f0631375f481" + integrity sha512-tg1EIqFVQ59UNbEV7a5XHVvsGM1dL0tVrwXMB4EzlDnDRS70l6jjeCgl6d0SUQqK8Cob1AzjdLn9+Ax+oFcceQ== dependencies: - "@openzeppelin/defender-sdk-base-client" "^1.15.2" - axios "^1.7.2" + "@openzeppelin/defender-sdk-base-client" "^2.1.0" + axios "^1.7.4" lodash "^4.17.21" -"@openzeppelin/defender-sdk-network-client@^1.14.4": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-1.15.2.tgz#7178836d9861272ad509d93dea8739a5c4bf86c1" - integrity sha512-9r9pegc1aR7xzP9fmj1zvkk0OXMRJE10JabxxiJzAQQgmNXDeTGI6W5bFgrNJfxzcImNGqddJ3K4weKdLyL21A== +"@openzeppelin/defender-sdk-network-client@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-2.1.0.tgz#6486fff52f3531604e325e4887839e020c127755" + integrity sha512-ebtSmihHMlcjFTtXyB/IFr+CjCcjdW0nV+ijG24SNnRvOaHn2BNORs6CwhdEZc8ok9YHWnKouGKdfzmxX+mp/A== dependencies: - "@openzeppelin/defender-sdk-base-client" "^1.15.2" - axios "^1.7.2" + "@openzeppelin/defender-sdk-base-client" "^2.1.0" + axios "^1.7.4" lodash "^4.17.21" "@openzeppelin/hardhat-upgrades@^3.0.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.7.0.tgz#fc9562ab01edfa1eafb49870d8bf37e038a3ce49" - integrity sha512-dTnqqTIZUOyEzL62FIusZPeac9CqTD+x3Q5h+46JBALgS9DubUq/jXMhiE3JKLco3RELZQCh/9GYKBoUA0R2DQ== + version "3.9.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.9.0.tgz#3317292f5e338012d0263bfd0f8458466c3fb0a8" + integrity sha512-7YYBSxRnO/X+tsQkVgtz3/YbwZuQPjbjQ3m0A/8+vgQzdPfulR93NaFKgZfMonnrriXb5O/ULjIDPI+8nuqtyQ== dependencies: - "@openzeppelin/defender-sdk-base-client" "^1.14.4" - "@openzeppelin/defender-sdk-deploy-client" "^1.14.4" - "@openzeppelin/defender-sdk-network-client" "^1.14.4" + "@openzeppelin/defender-sdk-base-client" "^2.1.0" + "@openzeppelin/defender-sdk-deploy-client" "^2.1.0" + "@openzeppelin/defender-sdk-network-client" "^2.1.0" "@openzeppelin/upgrades-core" "^1.41.0" chalk "^4.1.0" debug "^4.1.1" @@ -956,12 +1397,12 @@ undici "^6.11.1" "@openzeppelin/upgrades-core@^1.41.0": - version "1.41.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.41.0.tgz#3a5e044cf53acd50c392f3297e7c37e4ff8f8355" - integrity sha512-+oryinqZnxkiZvg7bWqWX4Ki/CNwVUZEqC6Elpi5PQoahpL3/6Sq9xjIozD5AiI2O61h8JHQ+A//5NtczyavJw== + version "1.42.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.42.1.tgz#a2784e8d9c09f4a79b7e5cbb11933062ad709835" + integrity sha512-8qnz2XfQrco8R8u9NjV+KiSLrVn7DnWFd+3BuhTUjhVy0bzCSu2SMKCVpZLtXbxf4f2dpz8jYPQYRa6s23PhLA== dependencies: "@nomicfoundation/slang" "^0.18.3" - cbor "^9.0.0" + cbor "^10.0.0" chalk "^4.1.0" compare-versions "^6.0.0" debug "^4.1.1" @@ -1005,10 +1446,10 @@ debug "^3.1.0" hosted-git-info "^2.6.0" -"@scure/base@~1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" - integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== +"@scure/base@~1.1.0", "@scure/base@~1.1.6": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== "@scure/bip32@1.1.5": version "1.1.5" @@ -1019,6 +1460,15 @@ "@noble/secp256k1" "~1.7.0" "@scure/base" "~1.1.0" +"@scure/bip32@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" + integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== + dependencies: + "@noble/curves" "~1.4.0" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + "@scure/bip39@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" @@ -1027,6 +1477,14 @@ "@noble/hashes" "~1.2.0" "@scure/base" "~1.1.0" +"@scure/bip39@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" + integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== + dependencies: + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + "@sentry/core@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" @@ -1095,12 +1553,452 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@smithy/types@^2.3.1": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.3.2.tgz#b124ce8ddfb134e09b217f7adcae7c7fe3d6ea5d" - integrity sha512-iH0cdKi7HQlzfAM3w2shFk/qZYKAqJWswtpmQpPtlruF+uFZeGEpMJjgDRyhWiddfVM4e2oP4nMaOBsMy6lXgg== +"@smithy/abort-controller@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.0.1.tgz#7c5e73690c4105ad264c2896bd1ea822450c3819" + integrity sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/config-resolver@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.0.1.tgz#3d6c78bbc51adf99c9819bb3f0ea197fe03ad363" + integrity sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + tslib "^2.6.2" + +"@smithy/core@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.1.2.tgz#f5b4c89bf054b717781d71c66b4fb594e06cbb62" + integrity sha512-htwQXkbdF13uwwDevz9BEzL5ABK+1sJpVQXywwGSH973AVOvisHNfpcB8A8761G6XgHoS2kHPqc9DqHJ2gp+/Q== + dependencies: + "@smithy/middleware-serde" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-stream" "^4.0.2" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz#807110739982acd1588a4847b61e6edf196d004e" + integrity sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.0.1.tgz#8e0beae84013eb3b497dd189470a44bac4411bae" + integrity sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^4.1.0" + "@smithy/util-hex-encoding" "^4.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.1.tgz#cdbbb18b9371da363eff312d78a10f6bad82df28" + integrity sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA== + dependencies: + "@smithy/eventstream-serde-universal" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.1.tgz#3662587f507ad7fac5bd4505c4ed6ed0ac49a010" + integrity sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.1.tgz#3799c33e0148d2b923a66577d1dbc590865742ce" + integrity sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q== + dependencies: + "@smithy/eventstream-serde-universal" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.1.tgz#ddb2ab9f62b8ab60f50acd5f7c8b3ac9d27468e2" + integrity sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA== + dependencies: + "@smithy/eventstream-codec" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz#8463393442ca6a1644204849e42c386066f0df79" + integrity sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA== + dependencies: + "@smithy/protocol-http" "^5.0.1" + "@smithy/querystring-builder" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-base64" "^4.0.0" + tslib "^2.6.2" + +"@smithy/hash-node@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.0.1.tgz#ce78fc11b848a4f47c2e1e7a07fb6b982d2f130c" + integrity sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w== + dependencies: + "@smithy/types" "^4.1.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.0.1.tgz#704d1acb6fac105558c17d53f6d55da6b0d6b6fc" + integrity sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/is-array-buffer@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" + integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== + dependencies: + tslib "^2.6.2" + +"@smithy/is-array-buffer@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz#55a939029321fec462bcc574890075cd63e94206" + integrity sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw== + dependencies: + tslib "^2.6.2" + +"@smithy/middleware-content-length@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.0.1.tgz#378bc94ae623f45e412fb4f164b5bb90b9de2ba3" + integrity sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ== + dependencies: + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.3.tgz#74b64fb2473ae35649a8d22d41708bc5d8d99df2" + integrity sha512-YdbmWhQF5kIxZjWqPIgboVfi8i5XgiYMM7GGKFMTvBei4XjNQfNv8sukT50ITvgnWKKKpOtp0C0h7qixLgb77Q== + dependencies: + "@smithy/core" "^3.1.2" + "@smithy/middleware-serde" "^4.0.2" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-middleware" "^4.0.1" + tslib "^2.6.2" + +"@smithy/middleware-retry@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.0.4.tgz#95e55a1b163ff06264f20b4dbbcbd915c8028f60" + integrity sha512-wmxyUBGHaYUqul0wZiset4M39SMtDBOtUr2KpDuftKNN74Do9Y36Go6Eqzj9tL0mIPpr31ulB5UUtxcsCeGXsQ== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/service-error-classification" "^4.0.1" + "@smithy/smithy-client" "^4.1.3" + "@smithy/types" "^4.1.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.0.2.tgz#f792d72f6ad8fa6b172e3f19c6fe1932a856a56d" + integrity sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz#c157653f9df07f7c26e32f49994d368e4e071d22" + integrity sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA== dependencies: - tslib "^2.5.0" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz#4e84fe665c0774d5f4ebb75144994fc6ebedf86e" + integrity sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ== + dependencies: + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.0.2.tgz#48d47a046cf900ab86bfbe7f5fd078b52c82fab6" + integrity sha512-X66H9aah9hisLLSnGuzRYba6vckuFtGE+a5DcHLliI/YlqKrGoxhisD5XbX44KyoeRzoNlGr94eTsMVHFAzPOw== + dependencies: + "@smithy/abort-controller" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/querystring-builder" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/property-provider@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.0.1.tgz#8d35d5997af2a17cf15c5e921201ef6c5e3fc870" + integrity sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.0.1.tgz#37c248117b29c057a9adfad4eb1d822a67079ff1" + integrity sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz#37e1e05d0d33c6f694088abc3e04eafb65cb6976" + integrity sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg== + dependencies: + "@smithy/types" "^4.1.0" + "@smithy/util-uri-escape" "^4.0.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz#312dc62b146f8bb8a67558d82d4722bb9211af42" + integrity sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz#84e78579af46c7b79c900b6d6cc822c9465f3259" + integrity sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA== + dependencies: + "@smithy/types" "^4.1.0" + +"@smithy/shared-ini-file-loader@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz#d35c21c29454ca4e58914a4afdde68d3b2def1ee" + integrity sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.0.1.tgz#f93401b176150286ba246681031b0503ec359270" + integrity sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA== + dependencies: + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-uri-escape" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.1.3.tgz#2c8f9aff3377e7655cebe84239da6be277ba8554" + integrity sha512-A2Hz85pu8BJJaYFdX8yb1yocqigyqBzn+OVaVgm+Kwi/DkN8vhN2kbDVEfADo6jXf5hPKquMLGA3UINA64UZ7A== + dependencies: + "@smithy/core" "^3.1.2" + "@smithy/middleware-endpoint" "^4.0.3" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-stream" "^4.0.2" + tslib "^2.6.2" + +"@smithy/types@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.1.0.tgz#19de0b6087bccdd4182a334eb5d3d2629699370f" + integrity sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.0.1.tgz#b47743f785f5b8d81324878cbb1b5f834bf8d85a" + integrity sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g== + dependencies: + "@smithy/querystring-parser" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/util-base64@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.0.0.tgz#8345f1b837e5f636e5f8470c4d1706ae0c6d0358" + integrity sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg== + dependencies: + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz#965d19109a4b1e5fe7a43f813522cce718036ded" + integrity sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz#3db245f6844a9b1e218e30c93305bfe2ffa473b3" + integrity sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg== + dependencies: + tslib "^2.6.2" + +"@smithy/util-buffer-from@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" + integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-buffer-from@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz#b23b7deb4f3923e84ef50c8b2c5863d0dbf6c0b9" + integrity sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug== + dependencies: + "@smithy/is-array-buffer" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-config-provider@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz#e0c7c8124c7fba0b696f78f0bd0ccb060997d45e" + integrity sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.4.tgz#6fa7ba64a80a77f27b9b5c6972918904578b8d5b" + integrity sha512-Ej1bV5sbrIfH++KnWxjjzFNq9nyP3RIUq2c9Iqq7SmMO/idUR24sqvKH2LUQFTSPy/K7G4sB2m8n7YYlEAfZaw== + dependencies: + "@smithy/property-provider" "^4.0.1" + "@smithy/smithy-client" "^4.1.3" + "@smithy/types" "^4.1.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.4.tgz#5470fdc96672cee5199620b576d7025de3b17333" + integrity sha512-HE1I7gxa6yP7ZgXPCFfZSDmVmMtY7SHqzFF55gM/GPegzZKaQWZZ+nYn9C2Cc3JltCMyWe63VPR3tSFDEvuGjw== + dependencies: + "@smithy/config-resolver" "^4.0.1" + "@smithy/credential-provider-imds" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/smithy-client" "^4.1.3" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.0.1.tgz#44ccbf1721447966f69496c9003b87daa8f61975" + integrity sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz#dd449a6452cffb37c5b1807ec2525bb4be551e8d" + integrity sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.0.1.tgz#58d363dcd661219298c89fa176a28e98ccc4bf43" + integrity sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/util-retry@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.0.1.tgz#fb5f26492383dcb9a09cc4aee23a10f839cd0769" + integrity sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw== + dependencies: + "@smithy/service-error-classification" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + +"@smithy/util-stream@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.0.2.tgz#63495d3f7fba9d78748d540921136dc4a8d4c067" + integrity sha512-0eZ4G5fRzIoewtHtwaYyl8g2C+osYOT4KClXgfdNEDAgkbe2TYPqcnw4GAWabqkZCax2ihRGPe9LZnsPdIUIHA== + dependencies: + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/types" "^4.1.0" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz#a96c160c76f3552458a44d8081fade519d214737" + integrity sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.0.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" + integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-utf8@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.0.0.tgz#09ca2d9965e5849e72e347c130f2a29d5c0c863c" + integrity sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow== + dependencies: + "@smithy/util-buffer-from" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-waiter@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.0.2.tgz#0a73a0fcd30ea7bbc3009cf98ad199f51b8eac51" + integrity sha512-piUTHyp2Axx3p/kc2CIJkYSv0BAaheBQmbACZgQSSfWUumWNW+R1lL+H9PDBxKJkvOeEX+hKYEFiwO8xagL8AQ== + dependencies: + "@smithy/abort-controller" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" "@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1": version "0.14.5" @@ -1249,23 +2147,25 @@ "@types/node" "*" "@types/bn.js@^5.1.0": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.2.tgz#162f5238c46f4bcbac07a98561724eca1fcf0c5e" - integrity sha512-dkpZu0szUtn9UXTmw+e0AJFd4D2XAxDnsCLdc05SfqpqzPEBft8eQr8uaFitfo/dUUOZERaLec2hHMG87A4Dxg== + version "5.1.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.6.tgz#9ba818eec0c85e4d3c679518428afdf611d03203" + integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== dependencies: "@types/node" "*" "@types/chai-as-promised@^7.1.3": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz#6e016811f6c7a64f2eed823191c3a6955094e255" - integrity sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ== + version "7.1.8" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz#f2b3d82d53c59626b5d6bbc087667ccb4b677fe9" + integrity sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw== dependencies: "@types/chai" "*" "@types/chai@*": - version "4.3.5" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" - integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.0.1.tgz#2c3705555cf11f5f59c836a84c44afcfe4e5689d" + integrity sha512-5T8ajsg3M/FOncpLYW7sdOcD6yf4+722sze/tc4KQV0P8Z2rAr3SAuHCIkYmYpt8VbcQlnz8SxlOlPQYefe4cA== + dependencies: + "@types/deep-eql" "*" "@types/chai@^4.2.0": version "4.3.20" @@ -1279,6 +2179,11 @@ dependencies: "@types/node" "*" +"@types/deep-eql@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" + integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== + "@types/form-data@0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" @@ -1309,10 +2214,12 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0" integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== -"@types/node@*": - version "20.6.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.2.tgz#a065925409f59657022e9063275cd0b9bd7e1b12" - integrity sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw== +"@types/node@*", "@types/node@>=18.0.0": + version "22.13.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.1.tgz#a2a3fefbdeb7ba6b89f40371842162fac0934f33" + integrity sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew== + dependencies: + undici-types "~6.20.0" "@types/node@22.7.5": version "22.7.5" @@ -1321,13 +2228,6 @@ dependencies: undici-types "~6.19.2" -"@types/node@>=18.0.0": - version "22.10.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.1.tgz#41ffeee127b8975a05f8c4f83fb89bcb2987d766" - integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== - dependencies: - undici-types "~6.20.0" - "@types/node@^10.0.3": version "10.17.60" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" @@ -1339,31 +2239,26 @@ integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== "@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== dependencies: "@types/node" "*" "@types/prettier@^2.1.1": - version "2.7.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" - integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== - -"@types/qs@^6.2.31": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== -"@types/qs@^6.9.7": - version "6.9.17" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.17.tgz#fc560f60946d0aeff2f914eb41679659d3310e1a" - integrity sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ== +"@types/qs@^6.2.31", "@types/qs@^6.9.7": + version "6.9.18" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2" + integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== "@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== dependencies: "@types/node" "*" @@ -1449,14 +2344,14 @@ ajv@^6.12.3: uri-js "^4.2.2" ajv@^8.0.1: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" amazon-cognito-identity-js@^6.3.6: version "6.3.12" @@ -1481,16 +2376,6 @@ ansi-align@^3.0.0: dependencies: string-width "^4.1.0" -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-colors@^4.1.1, ansi-colors@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -1508,17 +2393,12 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1537,7 +2417,7 @@ antlr4ts@^0.5.0-alpha.4: resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== -anymatch@~3.1.1, anymatch@~3.1.2: +anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -1572,14 +2452,6 @@ array-back@^4.0.1, array-back@^4.0.2: resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -1590,41 +2462,6 @@ array-uniq@1.0.3: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== -array.prototype.findlast@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.3.tgz#4e4b375de5adf4897fed155e2d2771564865cc3b" - integrity sha512-kcBubumjciBg4JKp5KTKtI7ec7tRefPk88yjkWJwaVKYd9QfTaxcsOxoMNKd7iBr447zCfDV0z1kOF47umv42g== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" - -array.prototype.reduce@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" - integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -1693,11 +2530,6 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - await-semaphore@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/await-semaphore/-/await-semaphore-0.1.3.tgz#2b88018cc8c28e06167ae1cdff02504f1f9688d3" @@ -1709,9 +2541,9 @@ aws-sign2@~0.7.0: integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== axios@^0.21.1: version "0.21.4" @@ -1720,7 +2552,7 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" -axios@^1.7.2: +axios@^1.5.1, axios@^1.7.4: version "1.7.9" resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== @@ -1729,29 +2561,29 @@ axios@^1.7.2: form-data "^4.0.0" proxy-from-env "^1.1.0" -babel-plugin-polyfill-corejs2@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.12" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz#ca55bbec8ab0edeeef3d7b8ffd75322e210879a9" + integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" - semver "^6.1.1" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.3" + semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" - integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - core-js-compat "^3.25.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" -babel-plugin-polyfill-regenerator@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz#abeb1f3f1c762eace37587f42548b08b57789bc8" + integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" + "@babel/helper-define-polyfill-provider" "^0.6.3" backoff@^2.5.0: version "2.5.0" @@ -1766,9 +2598,9 @@ balanced-match@^1.0.0: integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + version "3.0.10" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.10.tgz#62de58653f8762b5d6f8d9fe30fa75f7b2585a75" + integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== dependencies: safe-buffer "^5.0.1" @@ -1790,9 +2622,9 @@ bech32@1.1.4: integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== blakejs@^1.1.0: version "1.2.1" @@ -1805,15 +2637,20 @@ bn.js@4.11.6: integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + version "4.12.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.1.tgz#215741fe3c9dba2d7e12c001d0cfdbae43975ba7" + integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + boxen@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" @@ -1843,19 +2680,19 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browser-stdout@1.3.1, browser-stdout@^1.3.1: +browser-stdout@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== @@ -1872,15 +2709,15 @@ browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" -browserslist@^4.21.3, browserslist@^4.21.5: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== +browserslist@^4.24.0, browserslist@^4.24.3: + version "4.24.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" + integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" bs58@^4.0.0: version "4.0.1" @@ -1922,35 +2759,20 @@ buffer@4.9.2: ieee754 "^1.1.4" isarray "^1.0.0" -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind-apply-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.0.tgz#33127b42608972f76812a501d69db5d8ce404979" - integrity sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" + integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== dependencies: es-errors "^1.3.0" function-bind "^1.1.2" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-bind@^1.0.7: +call-bind@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== @@ -1960,26 +2782,36 @@ call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.2" -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +call-bound@^1.0.2, call-bound@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" + integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== + dependencies: + call-bind-apply-helpers "^1.0.1" + get-intrinsic "^1.2.6" camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001449: - version "1.0.30001489" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz#ca82ee2d4e4dbf2bd2589c9360d3fcc2c7ba3bd8" - integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ== +caniuse-lite@^1.0.30001688: + version "1.0.30001699" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz#a102cf330d153bf8c92bfb5be3cd44c0a89c8c12" + integrity sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w== caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== +cbor@^10.0.0: + version "10.0.3" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-10.0.3.tgz#202d79cd696f408700af51b0c9771577048a860e" + integrity sha512-72Jnj81xMsqepqdcSdf2+fflz/UDsThOHy5hj2MW5F5xzHL8Oa0KQ6I6V9CwVUPxg5pf+W9xp6W2KilaRXWWtw== + dependencies: + nofilter "^3.0.2" + cbor@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" @@ -1988,31 +2820,31 @@ cbor@^8.1.0: nofilter "^3.1.0" cbor@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.1.tgz#b16e393d4948d44758cd54ac6151379d443b37ae" - integrity sha512-/TQOWyamDxvVIv+DY9cOLNuABkoyz8K/F3QE56539pGVYohx0+MEA1f4lChFTX79dBTBS7R1PF6ovH7G+VtBfQ== + version "9.0.2" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.2.tgz#536b4f2d544411e70ec2b19a2453f10f83cd9fdb" + integrity sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ== dependencies: nofilter "^3.1.0" chai-as-promised@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" - integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + version "7.1.2" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.2.tgz#70cd73b74afd519754161386421fb71832c6d041" + integrity sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw== dependencies: check-error "^1.0.2" chai@^4.2.0: - version "4.3.7" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" - integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== + version "4.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== dependencies: assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^4.1.2" - get-func-name "^2.0.0" - loupe "^2.3.1" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" pathval "^1.1.1" - type-detect "^4.0.5" + type-detect "^4.1.0" chalk@^2.4.2: version "2.4.2" @@ -2036,10 +2868,12 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== +check-error@^1.0.2, check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" checkpoint-store@^1.1.0: version "1.1.0" @@ -2048,36 +2882,6 @@ checkpoint-store@^1.1.0: dependencies: functional-red-black-tree "^1.0.1" -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.2.0" - optionalDependencies: - fsevents "~2.1.1" - -chokidar@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - chokidar@^3.5.2, chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" @@ -2094,9 +2898,9 @@ chokidar@^3.5.2, chokidar@^3.5.3: fsevents "~2.3.2" chokidar@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.1.tgz#4a6dff66798fb0f72a94f616abbd7e1a19f31d41" - integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== dependencies: readdirp "^4.0.1" @@ -2106,12 +2910,12 @@ ci-info@^2.0.0: integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + version "1.0.6" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.6.tgz#8fe672437d01cd6c4561af5334e0cc50ff1955f7" + integrity sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + safe-buffer "^5.2.1" clean-stack@^2.0.0: version "2.2.0" @@ -2142,15 +2946,6 @@ cli-table3@^0.6.0: optionalDependencies: "@colors/colors" "1.5.0" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -2232,9 +3027,9 @@ commander@^8.1.0: integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== compare-versions@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.0.tgz#3f2131e3ae93577df111dba133e6db876ffe127a" - integrity sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg== + version "6.1.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" + integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== concat-map@0.0.1: version "0.0.1" @@ -2252,9 +3047,9 @@ concat-stream@^1.6.0, concat-stream@^1.6.2: typedarray "^0.0.6" console-table-printer@^2.9.0: - version "2.11.2" - resolved "https://registry.yarnpkg.com/console-table-printer/-/console-table-printer-2.11.2.tgz#549757033a7e3cde7e26e030038c9392ce600ee5" - integrity sha512-uuUHie0sfPP542TKGzPFal0W1wo1beuKAqIZdaavcONx8OoqdnJRKjkinbRTOta4FaCa1RcIL+7mMJWX3pQGVg== + version "2.12.1" + resolved "https://registry.yarnpkg.com/console-table-printer/-/console-table-printer-2.12.1.tgz#4a9646537a246a6d8de57075d4fae1e08abae267" + integrity sha512-wKGOQRRvdnd89pCeH96e2Fn4wkbenSP6LMHfjfyNLMbGuHEFbMqQNuxXqd0oXG9caIOQ1FTvc5Uijp9/4jujnQ== dependencies: simple-wcswidth "^1.0.1" @@ -2263,12 +3058,12 @@ cookie@^0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -core-js-compat@^3.25.1: - version "3.30.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.2.tgz#83f136e375babdb8c80ad3c22d67c69098c1dd8b" - integrity sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA== +core-js-compat@^3.38.0: + version "3.40.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.40.0.tgz#7485912a5a4a4315c2fdb2cbdc623e6881c88b38" + integrity sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ== dependencies: - browserslist "^4.21.5" + browserslist "^4.24.3" core-util-is@1.0.2: version "1.0.2" @@ -2338,19 +3133,12 @@ death@^1.1.0: resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== -debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: - ms "2.1.2" + ms "^2.1.3" debug@^3.1.0: version "3.2.7" @@ -2359,34 +3147,15 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== - dependencies: - ms "^2.1.3" - -debug@^4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== - dependencies: - ms "2.1.2" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - decamelize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -deep-eql@^4.0.1, deep-eql@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== +deep-eql@^4.0.1, deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== dependencies: type-detect "^4.0.0" @@ -2407,15 +3176,6 @@ deferred-leveldown@~1.2.1: dependencies: abstract-leveldown "~2.6.0" -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" @@ -2425,14 +3185,6 @@ define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -2443,16 +3195,6 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -2487,6 +3229,15 @@ dotenv@^16.3.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2495,12 +3246,12 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.4.284: - version "1.4.403" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.403.tgz#8b4666d1ea6cf97e03c1ed39ded1f25212865ecc" - integrity sha512-evCMqXJWmbQHdlh307peXNguqVIMmcLGrQwXiR+Qc98js8jPDeT9rse1+EF2YRjWgueuzj1r4WWLAe4/U+xjMg== +electron-to-chromium@^1.5.73: + version "1.5.96" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.96.tgz#afa3bf1608c897a7c7e33f22d4be1596dd5a4f3e" + integrity sha512-8AJUW6dh75Fm/ny8+kZKJzI1pgoE8bKLZlzDU2W1ENd+DXKJrx7I7l9hb8UWR4ojlnb5OlixMt00QWiYJoVw1w== -elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: +elliptic@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -2513,10 +3264,18 @@ elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +elliptic@^6.5.2, elliptic@^6.5.7: + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" emoji-regex@^8.0.0: version "8.0.0" @@ -2535,14 +3294,7 @@ encoding@^0.1.11: dependencies: iconv-lite "^0.6.2" -enquirer@^2.3.0: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -enquirer@^2.3.6: +enquirer@^2.3.0, enquirer@^2.3.6: version "2.4.1" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== @@ -2562,144 +3314,34 @@ errno@~0.1.1: dependencies: prr "~1.0.1" -es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: - version "1.21.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" - integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== - dependencies: - array-buffer-byte-length "^1.0.0" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.0" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" - -es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.12" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== +es-object-atoms@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" + es-errors "^1.3.0" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: +escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== @@ -2749,23 +3391,21 @@ eth-block-tracker@^4.4.2: safe-event-emitter "^1.0.1" eth-gas-reporter@^0.2.25: - version "0.2.25" - resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz#546dfa946c1acee93cb1a94c2a1162292d6ff566" - integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== + version "0.2.27" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz#928de8548a674ed64c7ba0bf5795e63079150d4e" + integrity sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw== dependencies: - "@ethersproject/abi" "^5.0.0-beta.146" "@solidity-parser/parser" "^0.14.0" + axios "^1.5.1" cli-table3 "^0.5.0" colors "1.4.0" ethereum-cryptography "^1.0.3" - ethers "^4.0.40" + ethers "^5.7.2" fs-readdir-recursive "^1.1.0" lodash "^4.17.14" markdown-table "^1.1.3" - mocha "^7.1.1" + mocha "^10.2.0" req-cwd "^2.0.0" - request "^2.88.0" - request-promise-native "^1.0.5" sha1 "^1.1.1" sync-request "^6.0.0" @@ -2809,11 +3449,11 @@ eth-sig-util@^3.0.1: tweetnacl-util "^0.15.0" ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz#8294f074c1a6cbd32c39d2cc77ce86ff14797dab" + integrity sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA== dependencies: - js-sha3 "^0.8.0" + "@noble/hashes" "^1.4.0" ethereum-common@0.2.0: version "0.2.0" @@ -2856,6 +3496,16 @@ ethereum-cryptography@^1.0.3: "@scure/bip32" "1.1.5" "@scure/bip39" "1.1.1" +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" + 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" + ethereum-protocol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz#b7d68142f4105e0ae7b5e178cf42f8d4dc4b93cf" @@ -2947,7 +3597,7 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: +ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== @@ -2989,22 +3639,7 @@ ethereumjs-wallet@^1.0.1: utf8 "^3.0.0" uuid "^8.3.2" -ethers@^4.0.40: - version "4.0.49" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" - integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== - dependencies: - aes-js "3.0.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - -ethers@^5.6.1, ethers@^5.7.0, ethers@~5.7.0: +ethers@^5.6.1, ethers@^5.7.0, ethers@^5.7.2, ethers@~5.7.0: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -3041,9 +3676,9 @@ ethers@^5.6.1, ethers@^5.7.0, ethers@~5.7.0: "@ethersproject/wordlists" "5.7.0" ethers@^6.4.0, ethers@^6.7.0: - version "6.13.4" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.4.tgz#bd3e1c3dc1e7dc8ce10f9ffb4ee40967a651b53c" - integrity sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA== + version "6.13.5" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.5.tgz#8c1d6ac988ac08abc3c1d8fabbd4b8b602851ac4" + integrity sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ== dependencies: "@adraffy/ens-normalize" "1.10.1" "@noble/curves" "1.2.0" @@ -3109,21 +3744,21 @@ fast-base64-decode@^1.0.0: resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q== -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.0.3: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.4" + micromatch "^4.0.8" fast-json-stable-stringify@^2.0.0: version "2.1.0" @@ -3140,17 +3775,29 @@ fast-safe-stringify@^2.0.6: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +fast-uri@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== + +fast-xml-parser@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" + integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== + dependencies: + strnum "^1.0.5" + fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.19.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.0.tgz#a82c6b7c2bb4e44766d865f07997785fecfdcb89" + integrity sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA== dependencies: reusify "^1.0.4" fdir@^6.4.2: - version "6.4.2" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.2.tgz#ddaa7ce1831b161bc3657bb99cb36e1622702689" - integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ== + version "6.4.3" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72" + integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== fetch-ponyfill@^4.0.0: version "4.1.0" @@ -3159,10 +3806,10 @@ fetch-ponyfill@^4.0.0: dependencies: node-fetch "~1.7.1" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -3173,21 +3820,6 @@ find-replace@^3.0.0: dependencies: array-back "^3.0.1" -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@5.0.0, find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -3195,12 +3827,13 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - is-buffer "~2.0.3" + locate-path "^6.0.0" + path-exists "^4.0.0" flat@^5.0.2: version "5.0.2" @@ -3214,46 +3847,30 @@ fmix@^0.1.0: dependencies: imul "^1.0.0" -follow-redirects@^1.12.1: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -follow-redirects@^1.14.0: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - -follow-redirects@^1.15.6: +follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.6: version "1.15.9" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== form-data@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + version "2.5.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.2.tgz#dc653743d1de2fcc340ceea38079daf6e9069fd2" + integrity sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q== dependencies: asynckit "^0.4.0" combined-stream "^1.0.6" mime-types "^2.1.12" + safe-buffer "^5.2.1" form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + version "4.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -3325,99 +3942,59 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -functions-have-names@^1.2.2, functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044" + integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA== dependencies: + call-bind-apply-helpers "^1.0.1" + es-define-property "^1.0.1" es-errors "^1.3.0" + es-object-atoms "^1.0.0" function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" + get-proto "^1.0.0" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" get-port@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-proto@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" getpass@^0.1.1: version "0.1.7" @@ -3434,25 +4011,13 @@ ghost-testrpc@^0.0.2: chalk "^2.4.2" node-emoji "^1.10.0" -glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@7.1.7: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" @@ -3465,18 +4030,6 @@ glob@7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -3535,12 +4088,10 @@ global@~4.4.0: min-document "^2.19.0" process "^0.11.10" -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globby@^10.0.1: version "10.0.2" @@ -3556,30 +4107,23 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - handlebars@^4.0.1: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -3663,13 +4207,13 @@ hardhat-tracer@^2.6.0: ethers "^5.6.1" hardhat@^2.14.0: - version "2.22.17" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.17.tgz#96036bbe6bad8eb6a6b65c54dc5fbc1324541612" - integrity sha512-tDlI475ccz4d/dajnADUTRc1OJ3H8fpP9sWhXhBPpYsQOg8JHq5xrDimo53UhWPl7KJmAeDCm1bFG74xvpGRpg== + version "2.22.18" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.18.tgz#e299a26a67b521bbb225370eb47a032d4e097e3a" + integrity sha512-2+kUz39gvMo56s75cfLBhiFedkQf+gXdrwCcz4R/5wW0oBdwiyfj2q9BIkMoaA0WIGYYMU2I1Cc4ucTunhfjzw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/edr" "^0.6.5" + "@nomicfoundation/edr" "^0.7.0" "@nomicfoundation/ethereumjs-common" "4.0.4" "@nomicfoundation/ethereumjs-tx" "5.0.4" "@nomicfoundation/ethereumjs-util" "9.0.4" @@ -3712,11 +4256,6 @@ hardhat@^2.14.0: uuid "^8.3.2" ws "^7.4.6" -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" @@ -3732,13 +4271,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" @@ -3746,29 +4278,10 @@ has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== hash-base@^3.0.0: version "3.1.0" @@ -3779,14 +4292,6 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -hash.js@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -3795,14 +4300,14 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hasown@^2.0.0: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" -he@1.2.0, he@^1.2.0: +he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -3896,9 +4401,9 @@ ieee754@^1.1.4: integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.1.1: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== immediate@^3.2.3: version "3.3.0" @@ -3911,9 +4416,9 @@ immer@10.0.2: integrity sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA== immutable@^4.0.0-rc.12: - version "4.3.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be" - integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== + version "4.3.7" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" + integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== imul@^1.0.0: version "1.0.1" @@ -3943,15 +4448,6 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" @@ -3964,22 +4460,6 @@ io-ts@1.10.4: dependencies: fp-ts "^1.0.0" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -3987,37 +4467,12 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.11.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: - has-tostringtag "^1.0.0" + hasown "^2.0.2" is-extglob@^2.1.1: version "2.1.1" @@ -4056,18 +4511,6 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -4078,58 +4521,11 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -is-typed-array@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -4140,13 +4536,6 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -4185,23 +4574,15 @@ js-cookie@^2.2.1: resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== -js-sha3@0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== - js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@3.x: version "3.14.1" @@ -4211,7 +4592,7 @@ js-yaml@3.x: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@4.1.0, js-yaml@^4.1.0: +js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -4223,6 +4604,11 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + json-rpc-engine@^5.1.3: version "5.4.0" resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz#75758609d849e1dba1e09021ae473f3ab63161e5" @@ -4252,11 +4638,15 @@ json-schema@0.4.0: integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz#e06f23128e0bbe342dc996ed5a19e28b57b580e0" - integrity sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g== + version "1.2.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.2.1.tgz#addb683c2b78014d0b78d704c2fcbdf0695a60e2" + integrity sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA== dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + isarray "^2.0.5" jsonify "^0.0.1" + object-keys "^1.1.1" json-stream-stringify@^3.1.4: version "3.1.6" @@ -4295,9 +4685,9 @@ jsonify@^0.0.1: integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== jsonschema@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" - integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== + version "1.5.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.5.0.tgz#f6aceb1ab9123563dd901d05f81f9d4883d3b7d8" + integrity sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw== jsprim@^1.2.2: version "1.4.2" @@ -4310,9 +4700,9 @@ jsprim@^1.2.2: verror "1.10.0" keccak@^3.0.0, keccak@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" - integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== dependencies: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" @@ -4389,17 +4779,9 @@ levn@~0.3.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: - p-locate "^3.0.0" + p-locate "^2.0.0" path-exists "^3.0.0" locate-path@^6.0.0: @@ -4439,19 +4821,12 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.16, lodash@^4.17.19, lodash@^4.17.21: +lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -log-symbols@4.1.0, log-symbols@^4.1.0: +log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -4459,12 +4834,12 @@ log-symbols@4.1.0, log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -loupe@^2.3.1: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: - get-func-name "^2.0.0" + get-func-name "^2.0.1" lru-cache@^5.1.1: version "5.1.1" @@ -4473,13 +4848,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" @@ -4505,6 +4873,11 @@ match-all@^1.2.6: resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -4550,12 +4923,17 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: rlp "^2.0.0" semaphore ">=1.0.1" -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" mime-db@1.52.0: @@ -4594,20 +4972,6 @@ minimalistic-crypto-utils@^1.0.1: dependencies: brace-expansion "^1.1.7" -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - minimatch@^5.0.1, minimatch@^5.1.6: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" @@ -4627,13 +4991,6 @@ minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mkdirp@0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - mkdirp@0.5.x, mkdirp@^0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -4653,37 +5010,10 @@ mnemonist@^0.38.0: dependencies: obliterator "^2.0.0" -mocha@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -mocha@^10.2.0: - version "10.6.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.6.0.tgz#465fc66c52613088e10018989a3b98d5e11954b9" - integrity sha512-hxjt4+EEB0SA0ZDygSS015t65lJw/I2yRCS3Ae+SJ5FrbzrXgfYwJr96f0OvIXdj7h4lv/vLCrH3rkiuizFSvw== +mocha@^10.0.0, mocha@^10.2.0: + version "10.8.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" + integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== dependencies: ansi-colors "^4.1.3" browser-stdout "^1.3.1" @@ -4706,47 +5036,7 @@ mocha@^10.2.0: yargs-parser "^20.2.9" yargs-unparser "^2.0.0" -mocha@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1, ms@^2.1.3: +ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -4760,11 +5050,6 @@ murmur-128@^0.2.1: fmix "^0.1.0" imul "^1.0.0" -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - ndjson@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ndjson/-/ndjson-2.0.0.tgz#320ac86f6fe53f5681897349b86ac6f43bfa3a19" @@ -4776,7 +5061,7 @@ ndjson@2.0.0: split2 "^3.0.0" through2 "^4.0.0" -neo-async@^2.6.0: +neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -4786,6 +5071,11 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + node-emoji@^1.10.0: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -4793,28 +5083,13 @@ node-emoji@^1.10.0: dependencies: lodash "^4.17.21" -node-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch@^2.6.1: +node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.7: - version "2.6.11" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" - integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== - dependencies: - whatwg-url "^5.0.0" - node-fetch@~1.7.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -4824,16 +5099,16 @@ node-fetch@~1.7.1: is-stream "^1.0.1" node-gyp-build@^4.2.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" - integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== -node-releases@^2.0.8: - version "2.0.11" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.11.tgz#59d7cef999d13f908e43b5a70001cf3129542f0f" - integrity sha512-+M0PwXeU80kRohZ3aT4J/OnR+l9/KD2nVLNNoRgFtnf+umQVFdGBAO2N8+nCnEi0xlh/Wk3zOGC+vNNx+uM79Q== +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== -nofilter@^3.1.0: +nofilter@^3.0.2, nofilter@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== @@ -4868,17 +5143,12 @@ object-assign@^4.1.0: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== -object-inspect@^1.13.1: - version "1.13.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" - integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== - -object-keys@^1.0.11, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -4888,41 +5158,10 @@ object-keys@~0.4.0: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3: - version "2.1.6" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz#5e5c384dd209fa4efffead39e3a0512770ccc312" - integrity sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ== - dependencies: - array.prototype.reduce "^1.0.5" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.21.2" - safe-array-concat "^1.0.0" - obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + version "2.0.5" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.5.tgz#031e0145354b0c18840336ae51d41e7d6d2c76aa" + integrity sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw== once@1.x, once@^1.3.0: version "1.4.0" @@ -4960,13 +5199,6 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -4981,13 +5213,6 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -5007,11 +5232,6 @@ p-try@^1.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - parse-cache-control@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" @@ -5068,12 +5288,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picocolors@^1.1.0: +picocolors@^1.0.0, picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -5171,28 +5386,23 @@ prr@~1.0.1: integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== psl@^1.1.28: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs@^6.4.0: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== dependencies: - side-channel "^1.0.4" + punycode "^2.3.1" + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@^6.9.4: - version "6.13.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.1.tgz#3ce5fc72bd3a8171b85c99b93c65dd20b7d1b16e" - integrity sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg== +qs@^6.4.0, qs@^6.9.4: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== dependencies: - side-channel "^1.0.6" + side-channel "^1.1.0" qs@~6.5.2: version "6.5.3" @@ -5264,16 +5474,9 @@ readable-stream@~1.0.15: string_decoder "~0.10.x" readdirp@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" - integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== - -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" + version "4.1.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.1.tgz#bd115327129672dc47f87408f05df9bd9ca3ef55" + integrity sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw== readdirp@~3.6.0: version "3.6.0" @@ -5301,28 +5504,10 @@ reduce-flatten@^2.0.0: resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== -regenerator-runtime@^0.13.11: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regexp.prototype.flags@^1.4.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" - -regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== req-cwd@^2.0.0: version "2.0.0" @@ -5338,23 +5523,7 @@ req-from@^2.0.0: dependencies: resolve-from "^3.0.0" -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.5: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.85.0, request@^2.88.0: +request@^2.85.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -5390,11 +5559,6 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -5413,11 +5577,11 @@ resolve@1.17.0: path-parse "^1.0.6" resolve@^1.1.6, resolve@^1.14.2: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: - is-core-module "^2.11.0" + is-core-module "^2.16.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -5463,27 +5627,7 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== -safe-array-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" - integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -5500,15 +5644,6 @@ safe-event-emitter@^1.0.1: dependencies: events "^3.0.0" -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -5534,23 +5669,18 @@ sc-istanbul@^0.4.5: which "^1.1.1" wordwrap "^1.0.0" -scrypt-js@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" - integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== - scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + version "4.0.4" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.4.tgz#58f0bfe1830fe777d9ca1ffc7574962a8189f8ab" + integrity sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw== dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" + elliptic "^6.5.7" + node-addon-api "^5.0.0" node-gyp-build "^4.2.0" semaphore@>=1.0.1, semaphore@^1.0.3: @@ -5558,35 +5688,26 @@ semaphore@>=1.0.1, semaphore@^1.0.3: resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== -semver@^5.5.0, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@^5.5.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.4: - version "7.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== - dependencies: - lru-cache "^6.0.0" + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== semver@~5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - serialize-javascript@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" @@ -5594,11 +5715,6 @@ serialize-javascript@^6.0.2: dependencies: randombytes "^2.1.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" @@ -5611,25 +5727,11 @@ set-function-length@^1.2.2: gopd "^1.0.1" has-property-descriptors "^1.0.2" -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" - set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" integrity sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ== -setimmediate@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" - integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== - setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -5665,24 +5767,45 @@ shelljs@^0.8.3: interpret "^1.0.0" rechoir "^0.6.2" -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + es-errors "^1.3.0" + object-inspect "^1.13.3" -side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== dependencies: - call-bind "^1.0.7" + call-bound "^1.0.2" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" signal-exit@^3.0.2: version "3.0.7" @@ -5727,11 +5850,9 @@ solc@0.8.26: tmp "0.0.33" solidity-ast@^0.4.51: - version "0.4.55" - resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.55.tgz#00b685e6eefb2e8dfb67df1fe0afbe3b3bfb4b28" - integrity sha512-qeEU/r/K+V5lrAw8iswf2/yfWAnSGs3WKPHI+zAFKFjX0dIBVXEU/swQ8eJQYHf6PJWUZFO2uWV4V1wEOkeQbA== - dependencies: - array.prototype.findlast "^1.2.2" + version "0.4.59" + resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.59.tgz#290a2815aef70a61092591ab3e991da080ae5931" + integrity sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g== solidity-coverage@^0.8.0: version "0.8.14" @@ -5791,9 +5912,9 @@ sprintf-js@~1.0.2: integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -5817,22 +5938,12 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - string-format@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== -"string-width@^1.0.2 || 2", string-width@^2.1.1: +string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -5840,15 +5951,6 @@ string-format@^2.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -5858,60 +5960,6 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -5938,13 +5986,6 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -5959,29 +6000,15 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strip-json-comments@3.1.1, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - -supports-color@8.1.1, supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== supports-color@^3.1.0: version "3.2.3" @@ -6004,6 +6031,13 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -6036,9 +6070,9 @@ table-layout@^1.0.2: wordwrapjs "^4.0.0" table@^6.8.0: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== + version "6.9.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" + integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -6085,11 +6119,6 @@ tmp@0.0.33: dependencies: os-tmpdir "~1.0.2" -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -6102,7 +6131,7 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^2.3.3, tough-cookie@~2.5.0: +tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -6127,11 +6156,10 @@ truffle-flattener@^1.2.9: tsort "0.0.1" ts-command-line-args@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.0.tgz#7eeed3a6937b2612ea08a0794cf9d43fbbea89c4" - integrity sha512-Ff7Xt04WWCjj/cmPO9eWTJX3qpBZWuPWyQYG1vnxJao+alWWYjwJBc5aYz3h5p5dE08A6AnpkgiCtP/0KXXBYw== + version "2.5.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== dependencies: - "@morgan-stanley/ts-mocking-bird" "^0.6.2" chalk "^4.1.0" command-line-args "^5.1.1" command-line-usage "^6.1.0" @@ -6171,10 +6199,10 @@ tslib@^1.11.1, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.3.1, tslib@^2.5.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tslib@^2.3.1, tslib@^2.6.2: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tsort@0.0.1: version "0.0.1" @@ -6210,10 +6238,10 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-detect@^4.0.0, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== type-fest@^0.20.2: version "0.20.2" @@ -6246,54 +6274,15 @@ typechain@^8.3.0: ts-command-line-args "^2.2.0" ts-essentials "^7.0.1" -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@>=4.5.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" - integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== + version "5.7.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" + integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== typical@^4.0.0: version "4.0.0" @@ -6306,19 +6295,9 @@ typical@^5.2.0: integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== undici-types@~6.19.2: version "6.19.8" @@ -6331,16 +6310,16 @@ undici-types@~6.20.0: integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== undici@^5.14.0: - version "5.22.1" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.22.1.tgz#877d512effef2ac8be65e695f3586922e1a57d7b" - integrity sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw== + version "5.28.5" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.5.tgz#b2b94b6bf8f1d919bc5a6f31f2c01deb02e54d4b" + integrity sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA== dependencies: - busboy "^1.6.0" + "@fastify/busboy" "^2.0.0" undici@^6.11.1: - version "6.21.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.0.tgz#4b3d3afaef984e07b48e7620c34ed8a285ed4cd4" - integrity sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw== + version "6.21.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.1.tgz#336025a14162e6837e44ad7b819b35b6c6af0e05" + integrity sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ== unfetch@^4.2.0: version "4.2.0" @@ -6353,22 +6332,22 @@ universalify@^0.1.0: integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== +update-browserslist-db@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" + integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.2.0" + picocolors "^1.1.1" uri-js@^4.2.2: version "4.4.1" @@ -6387,26 +6366,21 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" - integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== - uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" - integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== - uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -6422,13 +6396,14 @@ verror@1.10.0: extsprintf "^1.2.0" web3-utils@^1.3.6: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.0.tgz#ca4c1b431a765c14ac7f773e92e0fd9377ccf578" - integrity sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg== + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== dependencies: + "@ethereumjs/util" "^8.1.0" bn.js "^5.2.1" ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" + ethereum-cryptography "^2.1.2" ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" @@ -6452,59 +6427,13 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - -which@1.3.1, which@^1.1.1, which@^1.3.1: +which@^1.1.1, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - widest-line@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" @@ -6513,9 +6442,9 @@ widest-line@^3.1.0: string-width "^4.0.0" word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== wordwrap@^1.0.0: version "1.0.0" @@ -6530,25 +6459,11 @@ wordwrapjs@^4.0.0: reduce-flatten "^2.0.0" typical "^5.2.0" -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - workerpool@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -6574,16 +6489,16 @@ ws@8.17.1: integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== ws@^5.1.1: - version "5.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" - integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== + version "5.2.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.4.tgz#c7bea9f1cfb5f410de50e70e82662e562113f9a7" + integrity sha512-fFCejsuC8f9kOSu9FYaOw8CdO68O3h5v0lg4p74o8JqWpwTf9tniOD+nOB78aWoVSS6WptVUmDrp/KPsMVBWFQ== dependencies: async-limiter "~1.0.0" ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== xhr@^2.2.0: version "2.6.0" @@ -6595,11 +6510,6 @@ xhr@^2.2.0: parse-headers "^2.0.0" xtend "^4.0.0" -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== - xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -6612,11 +6522,6 @@ xtend@~2.1.1: dependencies: object-keys "~0.4.0" -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -6627,39 +6532,12 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - -yargs-unparser@2.0.0, yargs-unparser@^2.0.0: +yargs-unparser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== @@ -6669,23 +6547,7 @@ yargs-unparser@2.0.0, yargs-unparser@^2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@16.2.0, yargs@^16.2.0: +yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== From 5ad0d4840781c0579b70bc0f77389649008a1304 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Mon, 10 Feb 2025 17:05:17 +0300 Subject: [PATCH 05/41] wip everything compiles with older oZepp --- .../FraxFerryLZCrossChainAdapterL2.sol | 2 +- .../LayerZero/LZCrossChainAdapterL1.sol | 2 +- .../LayerZero/LZCrossChainAdapterL2.sol | 2 +- projects/bridge-lz/package.json | 4 +- projects/bridge-lz/yarn.lock | 1135 ++-- .../.openzeppelin/mainnet.json | 2674 +++++++++ .../.openzeppelin/unknown-17000.json | 2043 +++++++ .../tests/omnivault-rebalancer/.solcover.js | 30 + .../omnivault-rebalancer/hardhat.config.ts | 66 + .../mocks/contracts/DummyToken.sol | 28 + .../mocks/contracts/IERC20Mintable.sol | 14 + .../mocks/contracts/MockFraxFerry.sol | 158 + .../tests/omnivault-rebalancer/package.json | 51 + .../test/ERC20Rebalancer.test.ts | 3222 +++++++++++ .../test/NewERC20Omnitest.test.ts | 584 ++ .../test/Rebalancer.test.ts | 3175 +++++++++++ .../test/helpers/utils.js | 101 + .../tests/omnivault-rebalancer/tsconfig.json | 10 + projects/tests/omnivault-rebalancer/yarn.lock | 4910 +++++++++++++++++ .../contracts/interfaces/IRebalancer.sol | 83 + .../contracts/rebalancer/ERC20Rebalancer.sol | 177 + .../rebalancer/ERC20RebalancerStorage.sol | 199 + 22 files changed, 17871 insertions(+), 799 deletions(-) create mode 100644 projects/tests/omnivault-rebalancer/.openzeppelin/mainnet.json create mode 100644 projects/tests/omnivault-rebalancer/.openzeppelin/unknown-17000.json create mode 100644 projects/tests/omnivault-rebalancer/.solcover.js create mode 100644 projects/tests/omnivault-rebalancer/hardhat.config.ts create mode 100644 projects/tests/omnivault-rebalancer/mocks/contracts/DummyToken.sol create mode 100644 projects/tests/omnivault-rebalancer/mocks/contracts/IERC20Mintable.sol create mode 100644 projects/tests/omnivault-rebalancer/mocks/contracts/MockFraxFerry.sol create mode 100644 projects/tests/omnivault-rebalancer/package.json create mode 100644 projects/tests/omnivault-rebalancer/test/ERC20Rebalancer.test.ts create mode 100644 projects/tests/omnivault-rebalancer/test/NewERC20Omnitest.test.ts create mode 100644 projects/tests/omnivault-rebalancer/test/Rebalancer.test.ts create mode 100644 projects/tests/omnivault-rebalancer/test/helpers/utils.js create mode 100644 projects/tests/omnivault-rebalancer/tsconfig.json create mode 100644 projects/tests/omnivault-rebalancer/yarn.lock create mode 100644 projects/vaults/contracts/interfaces/IRebalancer.sol create mode 100644 projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol create mode 100644 projects/vaults/contracts/rebalancer/ERC20RebalancerStorage.sol diff --git a/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol b/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol index 50c86368..62060f96 100644 --- a/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol +++ b/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol @@ -57,7 +57,7 @@ contract FraxFerryLZCrossChainAdapterL2 is uint32[] memory _eIds, uint256[] memory _chainIds ) public initializer { - __Ownable_init(msg.sender); + __Ownable_init(); __OAppUpgradeable_init(_endpoint, _delegate); require(_eIds.length == _chainIds.length, ArraysLengthsMismatch()); _l1ChainId = l1ChainId; diff --git a/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL1.sol b/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL1.sol index 5be14bcc..e3d4d647 100644 --- a/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL1.sol +++ b/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL1.sol @@ -44,7 +44,7 @@ contract LZCrossChainAdapterL1 is uint32[] memory _eIds, uint256[] memory _chainIds ) public initializer { - __Ownable_init(msg.sender); + __Ownable2Step_init(); __OAppUpgradeable_init(_endpoint, _delegate); require(_eIds.length == _chainIds.length, ArraysLengthsMismatch()); diff --git a/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL2.sol b/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL2.sol index 4ba86307..33d49473 100644 --- a/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL2.sol +++ b/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL2.sol @@ -45,7 +45,7 @@ contract LZCrossChainAdapterL2 is uint32[] memory _eIds, uint256[] memory _chainIds ) public initializer { - __Ownable_init(msg.sender); + __Ownable2Step_init(); __OAppUpgradeable_init(_endpoint, _delegate); require(_eIds.length == _chainIds.length, ArraysLengthsMismatch()); l1ChainId = _l1ChainId; diff --git a/projects/bridge-lz/package.json b/projects/bridge-lz/package.json index 803108f6..7bffa33d 100644 --- a/projects/bridge-lz/package.json +++ b/projects/bridge-lz/package.json @@ -33,8 +33,8 @@ "@nomicfoundation/hardhat-toolbox": "^5.0.0", "@nomicfoundation/hardhat-verify": "^2.0.11", "@nomiclabs/hardhat-etherscan": "^3.1.8", - "@openzeppelin/contracts": "^5.1.0", - "@openzeppelin/contracts-upgradeable": "^5.1.0", + "@openzeppelin/contracts": "^4.8.3", + "@openzeppelin/contracts-upgradeable": "^4.8.3", "@openzeppelin/hardhat-upgrades": "^3.5.0", "@typechain/ethers-v6": "^0.5.1", "@typechain/hardhat": "^9.1.0", diff --git a/projects/bridge-lz/yarn.lock b/projects/bridge-lz/yarn.lock index 5e293064..ab7b9602 100644 --- a/projects/bridge-lz/yarn.lock +++ b/projects/bridge-lz/yarn.lock @@ -204,17 +204,12 @@ resolved "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz" integrity sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ== -"@colors/colors@^1.6.0": - version "1.6.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" - integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== - "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@colors/colors@1.6.0": +"@colors/colors@1.6.0", "@colors/colors@^1.6.0": version "1.6.0" resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== @@ -267,7 +262,7 @@ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.6.4", "@ethereumjs/common@2.6.5": +"@ethereumjs/common@2.6.5", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.6.4": version "2.6.5" resolved "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz" integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== @@ -280,7 +275,7 @@ resolved "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz" integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== -"@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@3.5.2": +"@ethereumjs/tx@3.5.2", "@ethereumjs/tx@^3.3.0": version "3.5.2" resolved "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz" integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== @@ -297,7 +292,7 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" -"@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.7", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0", "@ethersproject/abi@5.7.0": +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.7", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -312,7 +307,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@^5.7.0", "@ethersproject/abstract-provider@5.7.0": +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== @@ -325,7 +320,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@^5.7.0", "@ethersproject/abstract-signer@5.7.0": +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== @@ -336,17 +331,6 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0", "@ethersproject/address@~5.7.0", "@ethersproject/address@5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" - 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" - "@ethersproject/address@5.6.1": version "5.6.1" resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz" @@ -358,14 +342,25 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/rlp" "^5.6.1" -"@ethersproject/base64@^5.7.0", "@ethersproject/base64@5.7.0": +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0", "@ethersproject/address@~5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" + 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" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@^5.7.0", "@ethersproject/basex@5.7.0": +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz" integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== @@ -373,7 +368,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@^5.6.2", "@ethersproject/bignumber@^5.7.0", "@ethersproject/bignumber@5.7.0": +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.6.2", "@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -382,21 +377,21 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@^5.6.1", "@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@5.7.0": +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.6.1", "@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@^5.7.0", "@ethersproject/constants@5.7.0": +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@^5.7.0", "@ethersproject/contracts@5.7.0": +"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz" integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== @@ -412,7 +407,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/transactions" "^5.7.0" -"@ethersproject/hash@^5.7.0", "@ethersproject/hash@5.7.0": +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -427,7 +422,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hdnode@^5.7.0", "@ethersproject/hdnode@5.7.0": +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz" integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== @@ -445,7 +440,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/json-wallets@^5.7.0", "@ethersproject/json-wallets@5.7.0": +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz" integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== @@ -464,7 +459,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@^5.6.1", "@ethersproject/keccak256@^5.7.0", "@ethersproject/keccak256@5.7.0": +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.6.1", "@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -472,19 +467,19 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.7.0", "@ethersproject/logger@5.7.0": +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@^5.7.0", "@ethersproject/networks@5.7.1": +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": version "5.7.1" resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/pbkdf2@^5.7.0", "@ethersproject/pbkdf2@5.7.0": +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz" integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== @@ -492,14 +487,14 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@^5.7.0", "@ethersproject/properties@5.7.0": +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@^5.4.7", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@^5.7.2", "@ethersproject/providers@5.7.2": +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.4.7", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -525,7 +520,7 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@^5.7.0", "@ethersproject/random@5.7.0": +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz" integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== @@ -533,7 +528,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@^5.6.1", "@ethersproject/rlp@^5.7.0", "@ethersproject/rlp@5.7.0": +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.6.1", "@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -541,7 +536,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@^5.7.0", "@ethersproject/sha2@5.7.0": +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz" integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== @@ -550,7 +545,7 @@ "@ethersproject/logger" "^5.7.0" hash.js "1.1.7" -"@ethersproject/signing-key@^5.7.0", "@ethersproject/signing-key@5.7.0": +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== @@ -562,7 +557,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@^5.7.0", "@ethersproject/solidity@5.7.0": +"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz" integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== @@ -574,7 +569,7 @@ "@ethersproject/sha2" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@^5.7.0", "@ethersproject/strings@5.7.0": +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -583,7 +578,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@5.7.0": +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -607,7 +602,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/wallet@^5.7.0", "@ethersproject/wallet@5.7.0": +"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz" integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== @@ -628,7 +623,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@^5.7.0", "@ethersproject/web@5.7.1": +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": version "5.7.1" resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== @@ -639,7 +634,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@^5.7.0", "@ethersproject/wordlists@5.7.0": +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz" integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== @@ -698,14 +693,6 @@ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - "@jridgewell/trace-mapping@0.3.9": version "0.3.9" resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" @@ -714,16 +701,13 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@layerzerolabs/devtools-evm-hardhat@~1.2.0": - version "1.2.3" - resolved "https://registry.npmjs.org/@layerzerolabs/devtools-evm-hardhat/-/devtools-evm-hardhat-1.2.3.tgz" - integrity sha512-kIVMvLb1BZ+7rcPjjfl3iDnrszLfH+RnD9H4PWsbazqEOWizNQnO0+u9Aj9/KMTyly6hl5e5gZINZoTwkrPi+w== +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: - "@layerzerolabs/export-deployments" "~0.0.12" - "@safe-global/protocol-kit" "^1.3.0" - micro-memoize "~4.1.2" - p-memoize "~4.0.4" - zod "^3.22.4" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" "@layerzerolabs/devtools-evm-hardhat@1.0.0": version "1.0.0" @@ -736,6 +720,17 @@ p-memoize "~4.0.4" zod "^3.22.4" +"@layerzerolabs/devtools-evm-hardhat@~1.2.0": + version "1.2.3" + resolved "https://registry.npmjs.org/@layerzerolabs/devtools-evm-hardhat/-/devtools-evm-hardhat-1.2.3.tgz" + integrity sha512-kIVMvLb1BZ+7rcPjjfl3iDnrszLfH+RnD9H4PWsbazqEOWizNQnO0+u9Aj9/KMTyly6hl5e5gZINZoTwkrPi+w== + dependencies: + "@layerzerolabs/export-deployments" "~0.0.12" + "@safe-global/protocol-kit" "^1.3.0" + micro-memoize "~4.1.2" + p-memoize "~4.0.4" + zod "^3.22.4" + "@layerzerolabs/devtools-evm@~0.4.2": version "0.4.2" resolved "https://registry.npmjs.org/@layerzerolabs/devtools-evm/-/devtools-evm-0.4.2.tgz" @@ -978,13 +973,6 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@noble/curves@~1.4.0": - version "1.4.2" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz" - integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== - dependencies: - "@noble/hashes" "1.4.0" - "@noble/curves@1.2.0": version "1.2.0" resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz" @@ -992,34 +980,34 @@ dependencies: "@noble/hashes" "1.3.2" -"@noble/curves@1.4.2": +"@noble/curves@1.4.2", "@noble/curves@~1.4.0": version "1.4.2" resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz" integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== dependencies: "@noble/hashes" "1.4.0" -"@noble/hashes@^1.4.0": - version "1.6.1" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz" - integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== - -"@noble/hashes@~1.2.0", "@noble/hashes@1.2.0": +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": version "1.2.0" resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz" integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== -"@noble/hashes@~1.4.0", "@noble/hashes@1.4.0": - version "1.4.0" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== - "@noble/hashes@1.3.2": version "1.3.2" resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== -"@noble/secp256k1@~1.7.0", "@noble/secp256k1@1.7.1": +"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": + version "1.4.0" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + +"@noble/hashes@^1.4.0": + version "1.6.1" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz" + integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== + +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": version "1.7.1" resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz" integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== @@ -1032,7 +1020,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -1290,11 +1278,6 @@ "@openzeppelin/contracts" "4.7.3" "@openzeppelin/contracts-upgradeable" "4.7.3" -"@openzeppelin/contracts-upgradeable@^5.1.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.1.0.tgz" - integrity sha512-AIElwP5Ck+cslNE+Hkemf5SxjJoF4wBvvjxc27Rp+9jaPs/CLIaUBMYe1FNzhdiN0cYuwGRmYaRHmmntuiju4Q== - "@openzeppelin/contracts-upgradeable@4.5.2": version "4.5.2" resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz" @@ -1305,10 +1288,10 @@ resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz" integrity sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A== -"@openzeppelin/contracts@^5.1.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.1.0.tgz" - integrity sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA== +"@openzeppelin/contracts-upgradeable@^4.8.3": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.6.tgz#38b21708a719da647de4bb0e4802ee235a0d24df" + integrity sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA== "@openzeppelin/contracts@4.5.0": version "4.5.0" @@ -1320,6 +1303,11 @@ resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz" integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== +"@openzeppelin/contracts@^4.8.3": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.6.tgz#2a880a24eb19b4f8b25adc2a5095f2aa27f39677" + integrity sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA== + "@openzeppelin/defender-sdk-base-client@^1.14.4", "@openzeppelin/defender-sdk-base-client@^1.15.2": version "1.15.2" resolved "https://registry.npmjs.org/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.15.2.tgz" @@ -1592,12 +1580,7 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@sindresorhus/is@^4.6.0": +"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": version "4.6.0" resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== @@ -1869,6 +1852,13 @@ dependencies: undici-types "~6.20.0" +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" + "@types/node@^10.0.3": version "10.17.60" resolved "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" @@ -1884,13 +1874,6 @@ resolved "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz" integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== -"@types/node@22.7.5": - version "22.7.5" - resolved "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz" - integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== - dependencies: - undici-types "~6.19.2" - "@types/pbkdf2@^3.0.0": version "3.1.2" resolved "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz" @@ -2082,11 +2065,6 @@ adm-zip@^0.4.16: resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== -aes-js@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz" - integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== - aes-js@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz" @@ -2097,6 +2075,11 @@ aes-js@4.0.0-beta.5: resolved "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz" integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== +aes-js@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + agent-base@6: version "6.0.2" resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" @@ -2231,12 +2214,7 @@ array-back@^3.0.1, array-back@^3.1.0: resolved "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== -array-back@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" - integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== - -array-back@^4.0.2: +array-back@^4.0.1, array-back@^4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== @@ -2334,7 +2312,7 @@ asn1@~0.2.3: dependencies: safer-buffer "~2.1.0" -assert-plus@^1.0.0, assert-plus@1.0.0: +assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== @@ -2380,7 +2358,7 @@ async-retry@^1.3.3: dependencies: retry "0.13.1" -async@^1.4.2: +async@1.x, async@^1.4.2: version "1.5.2" resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz" integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== @@ -2397,11 +2375,6 @@ async@^3.2.3: resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== -async@1.x: - version "1.5.2" - resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz" - integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" @@ -2491,14 +2464,7 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^3.0.2: - version "3.0.10" - resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz" - integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== - dependencies: - safe-buffer "^5.0.1" - -base-x@^3.0.8: +base-x@^3.0.2, base-x@^3.0.8: version "3.0.10" resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz" integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== @@ -2552,17 +2518,12 @@ bluebird@^3.5.0: resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.11.0, bn.js@^4.11.8: - version "4.12.1" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz" - integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== - -bn.js@^4.11.6: - version "4.12.1" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz" - integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== -bn.js@^4.11.9: +bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: version "4.12.1" resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz" integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== @@ -2572,12 +2533,7 @@ bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -body-parser@^1.16.0, body-parser@1.20.3: +body-parser@1.20.3, body-parser@^1.16.0: version "1.20.3" resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz" integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== @@ -2713,22 +2669,6 @@ buffer-xor@^1.0.3: resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer@^5.0.5: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - buffer@4.9.2: version "4.9.2" resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" @@ -2738,6 +2678,14 @@ buffer@4.9.2: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + bufferutil@^4.0.1: version "4.0.8" resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz" @@ -2856,16 +2804,7 @@ chai@^4.2.0: pathval "^1.1.1" type-detect "^4.1.0" -chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.4.2: +chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2901,22 +2840,7 @@ checkpoint-store@^1.1.0: dependencies: functional-red-black-tree "^1.0.1" -chokidar@^3.5.2: - version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^3.5.3: +chokidar@^3.5.2, chokidar@^3.5.3: version "3.6.0" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -3044,14 +2968,7 @@ code-excerpt@^3.0.0: dependencies: convert-to-spaces "^1.0.1" -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^1.9.3: +color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -3065,16 +2982,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + color-string@^1.6.0: version "1.9.1" resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" @@ -3091,7 +3008,7 @@ color@^3.1.3: color-convert "^1.9.3" color-string "^1.6.0" -colors@^1.1.2, colors@1.4.0: +colors@1.4.0, colors@^1.1.2: version "1.4.0" resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== @@ -3212,16 +3129,16 @@ cookie-signature@1.0.6: resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - cookie@0.7.1: version "0.7.1" resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + core-js-compat@^3.38.0: version "3.39.0" resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz" @@ -3229,16 +3146,16 @@ core-js-compat@^3.38.0: dependencies: browserslist "^4.24.2" -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - core-util-is@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cors@^2.8.1: version "2.8.5" resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" @@ -3330,7 +3247,7 @@ cross-spawn@^7.0.2: resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== -d@^1.0.1, d@^1.0.2, d@1: +d@1, d@^1.0.1, d@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/d/-/d-1.0.2.tgz" integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== @@ -3377,40 +3294,26 @@ death@^1.1.0: resolved "https://registry.npmjs.org/death/-/death-1.1.0.tgz" integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== -debug@^2.2.0: +debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@4: +debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: version "4.3.7" resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: ms "^2.1.3" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +debug@^3.1.0, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - ms "2.0.0" + ms "^2.1.1" decamelize@^4.0.0: version "4.0.0" @@ -3578,7 +3481,7 @@ electron-to-chromium@^1.5.41: resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz" integrity sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ== -elliptic@^6.4.0, elliptic@^6.5.2, elliptic@6.5.4: +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2: version "6.5.4" resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -4022,7 +3925,7 @@ espree@^9.0.0, espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@^2.7.1, esprima@2.7.x: +esprima@2.7.x, esprima@^2.7.1: version "2.7.3" resolved "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== @@ -4119,6 +4022,15 @@ eth-json-rpc-errors@^2.0.2: dependencies: fast-safe-stringify "^2.0.6" +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + eth-lib@^0.1.26: version "0.1.29" resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz" @@ -4131,15 +4043,6 @@ eth-lib@^0.1.26: ws "^3.0.0" xhr-request-promise "^0.1.2" -eth-lib@0.2.8: - version "0.2.8" - resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" - integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - eth-query@^2.1.0, eth-query@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz" @@ -4172,17 +4075,17 @@ ethereum-bloom-filters@^1.0.6: dependencies: "@noble/hashes" "^1.4.0" -ethereum-common@^0.0.18: - version "0.0.18" - resolved "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz" - integrity sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ== - ethereum-common@0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz" integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== -ethereum-cryptography@^0.1.3, ethereum-cryptography@0.1.3: +ethereum-common@^0.0.18: + version "0.0.18" + resolved "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz" + integrity sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ== + +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== @@ -4213,17 +4116,7 @@ ethereum-cryptography@^1.0.3: "@scure/bip32" "1.1.5" "@scure/bip39" "1.1.1" -ethereum-cryptography@^2.0.0: - version "2.2.1" - resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz" - 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" - -ethereum-cryptography@^2.1.2: +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: version "2.2.1" resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz" integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== @@ -4298,7 +4191,7 @@ ethereumjs-tx@^2.1.1: ethereumjs-common "^1.5.0" ethereumjs-util "^6.0.0" -ethereumjs-util@^5.0.0: +ethereumjs-util@^5.0.0, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.5: version "5.2.1" resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== @@ -4311,72 +4204,7 @@ ethereumjs-util@^5.0.0: rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^5.1.1: - version "5.2.1" - resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" - integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== - dependencies: - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "^0.1.3" - rlp "^2.0.0" - safe-buffer "^5.1.1" - -ethereumjs-util@^5.1.2: - version "5.2.1" - resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" - integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== - dependencies: - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "^0.1.3" - rlp "^2.0.0" - safe-buffer "^5.1.1" - -ethereumjs-util@^5.1.5: - version "5.2.1" - resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" - integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== - dependencies: - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "^0.1.3" - rlp "^2.0.0" - safe-buffer "^5.1.1" - -ethereumjs-util@^6.0.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - -ethereumjs-util@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - -ethereumjs-util@^6.2.1: +ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.1: version "6.2.1" resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== @@ -4431,79 +4259,7 @@ ethereumjs-wallet@^1.0.1: utf8 "^3.0.0" uuid "^8.3.2" -ethers@^5.6.1: - version "5.7.2" - resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@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/contracts" "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/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - -ethers@^5.7.0: - version "5.7.2" - resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@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/contracts" "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/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - -ethers@^5.7.2: +ethers@^5.6.1, ethers@^5.7.0, ethers@^5.7.2, ethers@~5.7.0: version "5.7.2" resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -4552,42 +4308,6 @@ ethers@^6.4.0, ethers@^6.7.0: tslib "2.7.0" ws "8.17.1" -ethers@~5.7.0: - version "5.7.2" - resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@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/contracts" "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/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz" @@ -4596,7 +4316,7 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" -ethjs-util@^0.1.3, ethjs-util@^0.1.6, ethjs-util@0.1.6: +ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: version "0.1.6" resolved "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== @@ -4684,7 +4404,7 @@ extend@~3.0.2: resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extsprintf@^1.2.0, extsprintf@1.3.0: +extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== @@ -4875,16 +4595,16 @@ forge-std@^1.1.2: resolved "https://registry.npmjs.org/forge-std/-/forge-std-1.1.2.tgz" integrity sha512-Wfb0iAS9PcfjMKtGpWQw9mXzJxrWD62kJCUqqLcyuI0+VRtJ3j20XembjF3kS20qELYdXft1vD/SPFVWVKMFOw== -form-data-encoder@^2.1.2: - version "2.1.4" - resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz" - integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== - form-data-encoder@1.7.1: version "1.7.1" resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz" integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== +form-data-encoder@^2.1.2: + version "2.1.4" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz" + integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== + form-data@^2.2.0: version "2.5.2" resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz" @@ -4918,6 +4638,11 @@ forwarded@0.2.0: resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + fp-ts@^1.0.0: version "1.19.5" resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz" @@ -4928,11 +4653,6 @@ fp-ts@^2.16.2: resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.9.tgz" integrity sha512-+I2+FnVB+tVaxcYyQkHUq7ZdKScaBlX53A41mxQtpIccsfyv8PzdzP7fzp2AY832T4aoK6UZ5WRX/ebGd8uZuQ== -fp-ts@1.19.3: - version "1.19.3" - resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" - integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== - fresh@0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" @@ -4956,16 +4676,7 @@ fs-extra@^4.0.2: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.1: +fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -4983,17 +4694,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.1.0: +fs-extra@^9.0.0, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5020,6 +4721,11 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" @@ -5124,7 +4830,7 @@ git-hooks-list@^3.0.0: resolved "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.1.0.tgz" integrity sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA== -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5138,12 +4844,17 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== +glob@7.1.7: + version "7.1.7" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== dependencies: - is-glob "^4.0.1" + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" glob@^5.0.15: version "5.0.15" @@ -5156,19 +4867,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: +glob@^7.0.0, glob@^7.1.3: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5191,18 +4890,6 @@ glob@^8.0.3, glob@^8.1.0: minimatch "^5.0.1" once "^1.3.0" -glob@7.1.7: - version "7.1.7" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-modules@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" @@ -5280,6 +4967,25 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +got@12.1.0: + version "12.1.0" + resolved "https://registry.npmjs.org/got/-/got-12.1.0.tgz" + integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== + dependencies: + "@sindresorhus/is" "^4.6.0" + "@szmarczak/http-timer" "^5.0.1" + "@types/cacheable-request" "^6.0.2" + "@types/responselike" "^1.0.0" + cacheable-lookup "^6.0.4" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + form-data-encoder "1.7.1" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^2.0.0" + got@^11.8.5: version "11.8.6" resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" @@ -5314,35 +5020,16 @@ got@^12.1.0: p-cancelable "^3.0.0" responselike "^3.0.0" -got@12.1.0: - version "12.1.0" - resolved "https://registry.npmjs.org/got/-/got-12.1.0.tgz" - integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== - dependencies: - "@sindresorhus/is" "^4.6.0" - "@szmarczak/http-timer" "^5.0.1" - "@types/cacheable-request" "^6.0.2" - "@types/responselike" "^1.0.0" - cacheable-lookup "^6.0.4" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - form-data-encoder "1.7.1" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^2.0.0" +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - gradient-string@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/gradient-string/-/gradient-string-1.2.0.tgz" @@ -5548,7 +5235,7 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7, hash.js@1.1.7: +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== @@ -5663,13 +5350,6 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" @@ -5677,6 +5357,13 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + idna-uts46-hx@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" @@ -5740,7 +5427,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6097,6 +5784,11 @@ is-wsl@^2.1.1: dependencies: is-docker "^2.0.0" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" @@ -6107,11 +5799,6 @@ isarray@^2.0.5: resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" @@ -6135,28 +5822,21 @@ js-cookie@^2.2.1: resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz" integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + js-sha3@^0.5.7: version "0.5.7" resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== -js-sha3@^0.8.0, js-sha3@0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^4.1.0, js-yaml@~4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - js-yaml@3.x: version "3.14.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" @@ -6165,6 +5845,13 @@ js-yaml@3.x: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0, js-yaml@~4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" @@ -6450,7 +6137,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@4.17.21: +lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -6497,12 +6184,7 @@ lowercase-keys@^2.0.0: lowercase-keys@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== lru-cache@^5.1.1: version "5.1.1" @@ -6511,6 +6193,11 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + ltgt@~2.2.0: version "2.2.1" resolved "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz" @@ -6675,42 +6362,14 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.5: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.2: +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^5.1.6: +minimatch@^5.0.1, minimatch@^5.1.6: version "5.1.6" resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== @@ -6724,13 +6383,6 @@ minimatch@^9.0.4, minimatch@^9.0.5: dependencies: brace-expansion "^2.0.1" -"minimatch@2 || 3": - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" @@ -6758,7 +6410,7 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@0.5.x: +mkdirp@*, mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -6808,16 +6460,16 @@ mock-fs@^4.1.0: resolved "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz" integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== -ms@^2.1.1, ms@^2.1.3, ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multibase@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz" @@ -7072,7 +6724,7 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0, once@1.x: +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -7425,21 +7077,16 @@ prettier-plugin-solidity@^1.2.0: "@solidity-parser/parser" "^0.18.0" semver "^7.5.4" -prettier@^2.3.1: - version "2.8.8" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@3.3.2, prettier@^3.2.4: + version "3.3.2" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== -prettier@^2.8.3: +prettier@^2.3.1, prettier@^2.8.3: version "2.8.8" resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -prettier@^3.2.4, prettier@3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz" - integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" @@ -7529,15 +7176,22 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" + integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== + punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -punycode@2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" - integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== +qs@6.13.0: + version "6.13.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" qs@^6.4.0, qs@^6.9.4: version "6.13.1" @@ -7551,13 +7205,6 @@ qs@~6.5.2: resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== -qs@6.13.0: - version "6.13.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== - dependencies: - side-channel "^1.0.6" - query-string@^5.0.1: version "5.1.1" resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" @@ -7589,7 +7236,7 @@ range-parser@~1.2.1: resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@^2.4.1, raw-body@2.5.2: +raw-body@2.5.2, raw-body@^2.4.1: version "2.5.2" resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== @@ -7639,6 +7286,15 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.4.0, readable-stream@^3.6.0, readable-stream@^3.6.2: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@^1.0.33: version "1.1.14" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" @@ -7662,42 +7318,6 @@ readable-stream@^2.0.0, readable-stream@^2.2.2, readable-stream@^2.2.9: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.6.2: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readable-stream@~1.0.15: version "1.0.34" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" @@ -7708,15 +7328,6 @@ readable-stream@~1.0.15: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@3: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readdirp@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz" @@ -7860,15 +7471,6 @@ resolve-pkg-maps@^1.0.0: resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -resolve@^1.1.6, resolve@^1.14.2, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resolve@1.1.x: version "1.1.7" resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz" @@ -7881,6 +7483,15 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + responselike@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" @@ -7903,16 +7514,16 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - retry@0.13.1: version "0.13.1" resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" @@ -7969,17 +7580,12 @@ safe-array-concat@^1.1.2: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@5.2.1: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@~5.1.1: +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -8005,7 +7611,7 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz" integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== -safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -8038,7 +7644,7 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" -scrypt-js@^3.0.0, scrypt-js@^3.0.1, scrypt-js@3.0.1: +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== @@ -8052,7 +7658,7 @@ secp256k1@^4.0.1: node-addon-api "^5.0.0" node-gyp-build "^4.2.0" -semaphore@^1.0.3, semaphore@>=1.0.1: +semaphore@>=1.0.1, semaphore@^1.0.3: version "1.1.0" resolved "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz" integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== @@ -8067,37 +7673,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4: - version "7.6.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -semver@^7.3.7: - version "7.6.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -semver@^7.5.2: - version "7.6.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -semver@^7.5.4: - version "7.6.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -semver@^7.6.0: - version "7.6.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -semver@^7.6.2: - version "7.6.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -semver@^7.6.3: +semver@^7.3.4, semver@^7.3.7, semver@^7.5.2, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3: version "7.6.3" resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -8428,12 +8004,7 @@ source-map-support@^0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -8501,18 +8072,6 @@ strict-uri-encode@^1.0.0: resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== -string_decoder@^1.1.1, string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - string-format@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz" @@ -8568,6 +8127,18 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" +string_decoder@^1.1.1, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" @@ -8670,7 +8241,7 @@ sync-rpc@^1.2.1: dependencies: get-port "^3.1.0" -synckit@^0.9.1, synckit@0.9.2: +synckit@0.9.2, synckit@^0.9.1: version "0.9.2" resolved "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz" integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== @@ -8782,7 +8353,7 @@ tinygradient@^0.4.1: "@types/tinycolor2" "^1.4.0" tinycolor2 "^1.0.0" -tmp@^0.0.33, tmp@0.0.33: +tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== @@ -8879,26 +8450,21 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + tslib@^1.11.1, tslib@^1.9.3: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.3.1: - version "2.8.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -tslib@^2.6.2: +tslib@^2.3.1, tslib@^2.6.2: version "2.8.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tslib@2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz" - integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== - tsort@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" @@ -8916,7 +8482,7 @@ tweetnacl-util@^0.15.0, tweetnacl-util@^0.15.1: resolved "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== -tweetnacl@^0.14.3: +tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== @@ -8926,11 +8492,6 @@ tweetnacl@^1.0.3: resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== -tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" @@ -9056,7 +8617,7 @@ typedarray@^0.0.6: resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@^5.4.4, typescript@>=4.5.0: +typescript@>=4.5.0, typescript@^5.4.4: version "5.7.2" resolved "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz" integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== @@ -9128,7 +8689,7 @@ universalify@^2.0.0: resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -9160,7 +8721,7 @@ utf-8-validate@^5.0.2: dependencies: node-gyp-build "^4.3.0" -utf8@^3.0.0, utf8@3.0.0: +utf8@3.0.0, utf8@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz" integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== @@ -9279,7 +8840,7 @@ web3-core-subscriptions@1.10.4: eventemitter3 "4.0.4" web3-core-helpers "1.10.4" -web3-core@^1.8.1, web3-core@1.10.4: +web3-core@1.10.4, web3-core@^1.8.1: version "1.10.4" resolved "https://registry.npmjs.org/web3-core/-/web3-core-1.10.4.tgz" integrity sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww== @@ -9428,7 +8989,7 @@ web3-shh@1.10.4: web3-core-subscriptions "1.10.4" web3-net "1.10.4" -web3-utils@^1.3.6, web3-utils@^1.8.1, web3-utils@1.10.4: +web3-utils@1.10.4, web3-utils@^1.3.6, web3-utils@^1.8.1: version "1.10.4" resolved "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz" integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== @@ -9536,21 +9097,7 @@ which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2: gopd "^1.0.1" has-tostringtag "^1.0.2" -which@^1.1.1: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^1.3.1: +which@^1.1.1, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -9643,6 +9190,16 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +ws@7.4.6, ws@^7, ws@^7.4.6: + version "7.4.6" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@8.17.1: + version "8.17.1" + resolved "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + ws@^3.0.0: version "3.3.3" resolved "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz" @@ -9659,21 +9216,11 @@ ws@^5.1.1: dependencies: async-limiter "~1.0.0" -ws@^7, ws@^7.4.6, ws@7.4.6: - version "7.4.6" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - ws@^7.5.5: version "7.5.10" resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== -ws@8.17.1: - version "8.17.1" - resolved "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz" - integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== - xhr-request-promise@^0.1.2: version "0.1.3" resolved "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" diff --git a/projects/tests/omnivault-rebalancer/.openzeppelin/mainnet.json b/projects/tests/omnivault-rebalancer/.openzeppelin/mainnet.json new file mode 100644 index 00000000..d61a5029 --- /dev/null +++ b/projects/tests/omnivault-rebalancer/.openzeppelin/mainnet.json @@ -0,0 +1,2674 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x81b98D3a51d4aC35e0ae132b0CF6b50EA1Da2603", + "txHash": "0x7a008a25fb95c832fe239e8d1a10ee9d74ecaf2affaf73054774dbbcb4d62a72", + "kind": "transparent" + }, + { + "address": "0x122ee24Cb3Cc1b6B987800D3B54A68FC16910Dbf", + "txHash": "0x0ac1c64605020314bad3fac678da74c82d46755947c9471d2ff8d7c007df376d", + "kind": "transparent" + }, + { + "address": "0x7c388e8cbCE59Ce36B38169058F82D8f774088e8", + "txHash": "0x0e9165b7ae047bd6efe4b008550ee724cdf0e440a8a27851dd9e819165d4e214", + "kind": "transparent" + }, + { + "address": "0x46199cAa0e453971cedf97f926368d9E5415831a", + "txHash": "0x80a10cc38d11dd8cc7596a3c7da8898d269e3b85970d65f73c71bd22ff3bb558", + "kind": "transparent" + }, + { + "address": "0xf403eb7B69F6c7Ab73BBaeF42AFE87c0a61a15D0", + "txHash": "0x5c822fd38c9205136ba415bf3fc3cb50b9d70fb94686efa7637ed1468fd5f898", + "kind": "transparent" + }, + { + "address": "0x161Cd8fD2694D220e246854E177B726D8E36971d", + "txHash": "0x60ba78e3763d3159fc13122be81de8cb71ed857263dc9b76cfb859e5938649b3", + "kind": "transparent" + }, + { + "address": "0xf073bAC22DAb7FaF4a3Dd6c6189a70D54110525C", + "txHash": "0x4c5a6c2a40840faa0bfffc0f8bb6c1f720f535b8ae6ef0dc271525b9d7601c6f", + "kind": "transparent" + } + ], + "impls": { + "6edc16d23a4d4f6c1904111ef9dc64f026946ac69ab9161a855c019e045fdfca": { + "address": "0xe99AD80f1367ef20e81Ad72134192358670F7bf9", + "txHash": "0x00d4f1b91e222db35d943b845b4b02578bd5fcc7897c54506a387bad1b033bbf", + "layout": { + "solcVersion": "0.8.20", + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "71d135c444c577e77f23565934e5ef47a051f98194121da673ec1aa67993def6": { + "address": "0xB7A63a69cc0e635915e65379D2794f0b687D63EC", + "txHash": "0x5cbec22b4fc3f7be6b38d0aa8dcd8f8cfda59c1526b77cf74b0636fb00f50f0c", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)8300", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "_ratios", + "offset": 0, + "slot": "50", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RatioFeed", + "src": "contracts/RatioFeed.sol:18" + }, + { + "label": "historicalRatios", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_struct(HistoricalRatios)8315_storage)", + "contract": "RatioFeed", + "src": "contracts/RatioFeed.sol:19" + }, + { + "label": "ratioThreshold", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "RatioFeed", + "src": "contracts/RatioFeed.sol:24" + }, + { + "label": "_ratioUpdates", + "offset": 0, + "slot": "53", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RatioFeed", + "src": "contracts/RatioFeed.sol:29" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint64)9_storage": { + "label": "uint64[9]", + "numberOfBytes": "96" + }, + "t_contract(IProtocolConfig)8300": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_struct(HistoricalRatios)8315_storage)": { + "label": "mapping(address => struct IRatioFeed.HistoricalRatios)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_struct(HistoricalRatios)8315_storage": { + "label": "struct IRatioFeed.HistoricalRatios", + "members": [ + { + "label": "historicalRatios", + "type": "t_array(t_uint64)9_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "lastUpdate", + "type": "t_uint40", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "035ad31b54f24db62a54b465c282779cd6f114940d9cf42674ce8c8e39bc73a3": { + "address": "0x59114182500d834b8E41A397314C97EeE96Ee9bD", + "txHash": "0x4435750a8d1438a11de8b950c9c4596aafb4937d745ad507f0e1d424edfb2f04", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)7970", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "__gap", + "offset": 0, + "slot": "50", + "type": "t_array(t_uint256)50_storage", + "contract": "cToken", + "src": "contracts/cToken.sol:27" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)144_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)259_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_contract(IProtocolConfig)7970": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:38", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:42", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:45", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "bbeadd90000ed713601ce7de8a74f4d5887975ff1612a56bf8fcd7d37a0b36d3": { + "address": "0x043B7dd4979FB34DECA99a131cA69DaC3805fcB7", + "txHash": "0x4f2bb7c5442f17117366298647d01f13da111bf50a60857f48eb2907b711bc62", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)8298", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "_minStakeAmount", + "offset": 0, + "slot": "50", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:31" + }, + { + "label": "_minUnstakeAmount", + "offset": 0, + "slot": "51", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:32" + }, + { + "label": "_totalStaked", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:37" + }, + { + "label": "_totalUnstaked", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:41" + }, + { + "label": "_pendingGap", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:46" + }, + { + "label": "_pendingUnstakes", + "offset": 0, + "slot": "55", + "type": "t_array(t_struct(Unstake)8356_storage)dyn_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:50" + }, + { + "label": "_totalPendingUnstakes", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:54" + }, + { + "label": "_totalUnstakesOf", + "offset": 0, + "slot": "57", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:55" + }, + { + "label": "_distributeGasLimit", + "offset": 0, + "slot": "58", + "type": "t_uint32", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:59" + }, + { + "label": "_totalClaimable", + "offset": 0, + "slot": "59", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:61" + }, + { + "label": "_claimable", + "offset": 0, + "slot": "60", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:62" + }, + { + "label": "_restakers", + "offset": 0, + "slot": "61", + "type": "t_mapping(t_bytes32,t_address)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:67" + }, + { + "label": "_maxTVL", + "offset": 0, + "slot": "62", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:72" + }, + { + "label": "__gap", + "offset": 0, + "slot": "63", + "type": "t_array(t_uint256)37_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:79" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReentrancyGuardStorage)320_storage": { + "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", + "members": [ + { + "label": "_status", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Unstake)8356_storage)dyn_storage": { + "label": "struct IRestakingPool.Unstake[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)37_storage": { + "label": "uint256[37]", + "numberOfBytes": "1184" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IProtocolConfig)8298": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32" + }, + "t_struct(Unstake)8356_storage": { + "label": "struct IRestakingPool.Unstake", + "members": [ + { + "label": "recipient", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "amount", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.ReentrancyGuard": [ + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "65da5c5ed178e80f7b24d95b3c524cc0677e732c08b627f280f4b00904c8753a": { + "address": "0xfdfb52865892f97531a9742aade702Ab6e4A3B24", + "txHash": "0x5634d6af46667da6ed9df5611a15cf7c5d033b35b6e78cf58af4c91cfadbc850", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)8300", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "commission", + "offset": 0, + "slot": "50", + "type": "t_uint16", + "contract": "FeeCollector", + "src": "contracts/FeeCollector.sol:21" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReentrancyGuardStorage)320_storage": { + "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", + "members": [ + { + "label": "_status", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_contract(IProtocolConfig)8300": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.ReentrancyGuard": [ + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "497030db8d1cafbf65ac9afd19d4e778cfcdd70a4a62306b6cf6bed72821f0b5": { + "address": "0x04D7CD78913622B59197880f58c40FdB90A84DBF", + "txHash": "0xe585830eee707ee37badc394f73a44e0b26449cd93a3c3f2d0195440e94d04fe", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_selectorToTarget", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_bytes4,t_enum(FuncTarget)9373)", + "contract": "RestakerFacets", + "src": "contracts/restaker/RestakerFacets.sol:18" + }, + { + "label": "_podManager", + "offset": 0, + "slot": "1", + "type": "t_contract(IEigenPodManager)7130", + "contract": "RestakerFacets", + "src": "contracts/restaker/RestakerFacets.sol:19" + }, + { + "label": "_delegationManager", + "offset": 0, + "slot": "2", + "type": "t_contract(IDelegationManager)6662", + "contract": "RestakerFacets", + "src": "contracts/restaker/RestakerFacets.sol:20" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)14_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes4": { + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_contract(IDelegationManager)6662": { + "label": "contract IDelegationManager", + "numberOfBytes": "20" + }, + "t_contract(IEigenPodManager)7130": { + "label": "contract IEigenPodManager", + "numberOfBytes": "20" + }, + "t_enum(FuncTarget)9373": { + "label": "enum IRestakerFacets.FuncTarget", + "members": ["POD", "POD_MANAGER", "DELEGATION_MANAGER"], + "numberOfBytes": "1" + }, + "t_mapping(t_bytes4,t_enum(FuncTarget)9373)": { + "label": "mapping(bytes4 => enum IRestakerFacets.FuncTarget)", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "4f146d0f312ca656685c98ada306961ee6ab5c4579c94b52b32e3a37bcf8e041": { + "address": "0xAB110ea38ABf7929A2CEBf1184f905865E1C51dA", + "txHash": "0x332dc8f9295f05e3e290d6d14ce7c1368ffc73c3f0ce66889c0611bf3b5e9d05", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_facets", + "offset": 0, + "slot": "0", + "type": "t_contract(IRestakerFacets)11286", + "contract": "Restaker", + "src": "contracts/restaker/Restaker.sol:17" + }, + { + "label": "_signer", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "Restaker", + "src": "contracts/restaker/Restaker.sol:18" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)14_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_contract(IRestakerFacets)11286": { + "label": "contract IRestakerFacets", + "numberOfBytes": "20" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "allAddresses": ["0xAB110ea38ABf7929A2CEBf1184f905865E1C51dA", "0x74a39592218548c2204E25e82592403B21844f2b"] + }, + "54157c9e27f02691028e764e8587955da75c5e3da98025e4a5f28dcbc77053e0": { + "address": "0x4B21A1ee9268f4cF259E228388E1f3EC0C67D665", + "txHash": "0x8ae0cff312a0a7d6b46f93b68302e6c678621e0b75f99510b10c3b2c8fea2594", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_facets", + "offset": 0, + "slot": "0", + "type": "t_contract(IRestakerFacets)11341", + "contract": "Restaker", + "src": "contracts/restaker/Restaker.sol:17" + }, + { + "label": "_signer", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "Restaker", + "src": "contracts/restaker/Restaker.sol:18" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)14_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_contract(IRestakerFacets)11341": { + "label": "contract IRestakerFacets", + "numberOfBytes": "20" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "26b3e81fe23d11442359e67d6388a70ceb649937439f28a4746e3070b8053e19": { + "address": "0xA0044Ece2B29B78c74a7b16C4178D7C204e48b4d", + "txHash": "0xa43695689f0e399fbde9f85c82a368842922eba4985a7f9d0f369ddbaea87e3a", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)7260", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "_minStakeAmount", + "offset": 0, + "slot": "50", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:31" + }, + { + "label": "_minUnstakeAmount", + "offset": 0, + "slot": "51", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:32" + }, + { + "label": "_totalStaked", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:37" + }, + { + "label": "_totalUnstaked", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:41" + }, + { + "label": "_pendingGap", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:46" + }, + { + "label": "_pendingUnstakes", + "offset": 0, + "slot": "55", + "type": "t_array(t_struct(Unstake)7337_storage)dyn_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:50" + }, + { + "label": "_totalPendingUnstakes", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:54" + }, + { + "label": "_totalUnstakesOf", + "offset": 0, + "slot": "57", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:55" + }, + { + "label": "_distributeGasLimit", + "offset": 0, + "slot": "58", + "type": "t_uint32", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:59" + }, + { + "label": "_totalClaimable", + "offset": 0, + "slot": "59", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:61" + }, + { + "label": "_claimable", + "offset": 0, + "slot": "60", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:62" + }, + { + "label": "_restakers", + "offset": 0, + "slot": "61", + "type": "t_mapping(t_bytes32,t_address)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:67" + }, + { + "label": "_maxTVL", + "offset": 0, + "slot": "62", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:72" + }, + { + "label": "__gap", + "offset": 0, + "slot": "63", + "type": "t_array(t_uint256)37_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:79" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReentrancyGuardStorage)320_storage": { + "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", + "members": [ + { + "label": "_status", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Unstake)7337_storage)dyn_storage": { + "label": "struct IRestakingPool.Unstake[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)37_storage": { + "label": "uint256[37]", + "numberOfBytes": "1184" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IProtocolConfig)7260": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32" + }, + "t_struct(Unstake)7337_storage": { + "label": "struct IRestakingPool.Unstake", + "members": [ + { + "label": "recipient", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "amount", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.ReentrancyGuard": [ + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "be9930084391335f8f79dd1a134c0fce0b070f5d2e9864e694ce783a626fc9f9": { + "address": "0x429e9C65a0e69a6030f0D7C39CF39a3B3F5F292D", + "txHash": "0x8d72d27b3de85552f1093d4281e020424dd72af8e56cfe114c7be0f36e8425d6", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)7273", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "_minStakeAmount", + "offset": 0, + "slot": "50", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:31" + }, + { + "label": "_minUnstakeAmount", + "offset": 0, + "slot": "51", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:32" + }, + { + "label": "_totalStaked", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:37" + }, + { + "label": "_totalUnstaked", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:41" + }, + { + "label": "_pendingGap", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:46" + }, + { + "label": "_pendingUnstakes", + "offset": 0, + "slot": "55", + "type": "t_array(t_struct(Unstake)7331_storage)dyn_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:50" + }, + { + "label": "_totalPendingUnstakes", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:54" + }, + { + "label": "_totalUnstakesOf", + "offset": 0, + "slot": "57", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:55" + }, + { + "label": "_distributeGasLimit", + "offset": 0, + "slot": "58", + "type": "t_uint32", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:59" + }, + { + "label": "_totalClaimable", + "offset": 0, + "slot": "59", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:61" + }, + { + "label": "_claimable", + "offset": 0, + "slot": "60", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:62" + }, + { + "label": "_restakers", + "offset": 0, + "slot": "61", + "type": "t_mapping(t_bytes32,t_address)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:67" + }, + { + "label": "_maxTVL", + "offset": 0, + "slot": "62", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:72" + }, + { + "label": "__gap", + "offset": 0, + "slot": "63", + "type": "t_array(t_uint256)37_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:79" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReentrancyGuardStorage)320_storage": { + "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", + "members": [ + { + "label": "_status", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Unstake)7331_storage)dyn_storage": { + "label": "struct IRestakingPool.Unstake[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)37_storage": { + "label": "uint256[37]", + "numberOfBytes": "1184" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IProtocolConfig)7273": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32" + }, + "t_struct(Unstake)7331_storage": { + "label": "struct IRestakingPool.Unstake", + "members": [ + { + "label": "recipient", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "amount", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.ReentrancyGuard": [ + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "29f9e02cb8bda0ba6a19f761e929466f36e4ca0b5cf6133e06f4ce250ac53e96": { + "address": "0x65B13B6133e928366C0a9664123De7ef3D63a614", + "txHash": "0x2edfff89888b8b0052a72547aef4a750a203151b51de8ce796a291d5c83fc76d", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)6125", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "_minStakeAmount", + "offset": 0, + "slot": "50", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:31" + }, + { + "label": "_minUnstakeAmount", + "offset": 0, + "slot": "51", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:32" + }, + { + "label": "_totalStaked", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:37" + }, + { + "label": "_totalUnstaked", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:41" + }, + { + "label": "_pendingGap", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:46" + }, + { + "label": "_pendingUnstakes", + "offset": 0, + "slot": "55", + "type": "t_array(t_struct(Unstake)6183_storage)dyn_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:50" + }, + { + "label": "_totalPendingUnstakes", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:54" + }, + { + "label": "_totalUnstakesOf", + "offset": 0, + "slot": "57", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:55" + }, + { + "label": "_distributeGasLimit", + "offset": 0, + "slot": "58", + "type": "t_uint32", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:59" + }, + { + "label": "_totalClaimable", + "offset": 0, + "slot": "59", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:61" + }, + { + "label": "_claimable", + "offset": 0, + "slot": "60", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:62" + }, + { + "label": "_restakers", + "offset": 0, + "slot": "61", + "type": "t_mapping(t_bytes32,t_address)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:67" + }, + { + "label": "_maxTVL", + "offset": 0, + "slot": "62", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:72" + }, + { + "label": "__gap", + "offset": 0, + "slot": "63", + "type": "t_array(t_uint256)37_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:79" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)10_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReentrancyGuardStorage)266_storage": { + "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", + "members": [ + { + "label": "_status", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Unstake)6183_storage)dyn_storage": { + "label": "struct IRestakingPool.Unstake[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)37_storage": { + "label": "uint256[37]", + "numberOfBytes": "1184" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IProtocolConfig)6125": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32" + }, + "t_struct(Unstake)6183_storage": { + "label": "struct IRestakingPool.Unstake", + "members": [ + { + "label": "recipient", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "amount", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.ReentrancyGuard": [ + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "affdaec18cf9db0d6f42d6167a62d16fcdd0a085239b9ebd7beb8d492630e178": { + "address": "0x3b621aCCEB6628d85dDAcBfB57572433458b54E4", + "txHash": "0x7a376724078ad0711dc33af059b05dead0363cd5aaa63feb8b12e37468be350d", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_selectorToTarget", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_bytes4,t_enum(FuncTarget)11132)", + "contract": "RestakerFacets", + "src": "contracts/restaker/RestakerFacets.sol:18" + }, + { + "label": "_podManager", + "offset": 0, + "slot": "1", + "type": "t_contract(IEigenPodManager)7827", + "contract": "RestakerFacets", + "src": "contracts/restaker/RestakerFacets.sol:19" + }, + { + "label": "_delegationManager", + "offset": 0, + "slot": "2", + "type": "t_contract(IDelegationManager)7268", + "contract": "RestakerFacets", + "src": "contracts/restaker/RestakerFacets.sol:20" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)14_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes4": { + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_contract(IDelegationManager)7268": { + "label": "contract IDelegationManager", + "numberOfBytes": "20" + }, + "t_contract(IEigenPodManager)7827": { + "label": "contract IEigenPodManager", + "numberOfBytes": "20" + }, + "t_enum(FuncTarget)11132": { + "label": "enum IRestakerFacets.FuncTarget", + "members": ["POD", "POD_MANAGER", "DELEGATION_MANAGER"], + "numberOfBytes": "1" + }, + "t_mapping(t_bytes4,t_enum(FuncTarget)11132)": { + "label": "mapping(bytes4 => enum IRestakerFacets.FuncTarget)", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "263678939318159cce1993df1dcd2675f9fb1428e23da6735e7c696c9ed84bdd": { + "address": "0x0e1b44F0c5968C499f62Fbd711cE0247dB6a47B0", + "txHash": "0x22862184dae353aae41c9747d68ce5e388a01a9ccf8cd768caa2830a14c51499", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)6125", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "_name", + "offset": 0, + "slot": "50", + "type": "t_string_storage", + "contract": "cToken", + "src": "contracts/cToken.sol:22" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "51", + "type": "t_string_storage", + "contract": "cToken", + "src": "contracts/cToken.sol:23" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)48_storage", + "contract": "cToken", + "src": "contracts/cToken.sol:30" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)90_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)10_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)205_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_array(t_uint256)48_storage": { + "label": "uint256[48]", + "numberOfBytes": "1536" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_contract(IProtocolConfig)6125": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:38", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:42", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:45", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "6244d86a51a6f7caab02a405831105d43e99ef22cce2eba72b71a5c9c5647052": { + "address": "0x180E0F5efAD0a5299e9b6724BA3eF6Ea59914246", + "txHash": "0x3f3f8e8362f7d5950bbf9dd7ad4644a436f5446d36164adaf862e26f8779000c", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)8123", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "_minStakeAmount", + "offset": 0, + "slot": "50", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:37" + }, + { + "label": "_minUnstakeAmount", + "offset": 0, + "slot": "51", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:38" + }, + { + "label": "_totalStaked", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:43" + }, + { + "label": "_totalUnstaked", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:47" + }, + { + "label": "_pendingGap", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:52" + }, + { + "label": "_pendingUnstakes", + "offset": 0, + "slot": "55", + "type": "t_array(t_struct(Unstake)8181_storage)dyn_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:56" + }, + { + "label": "_totalPendingUnstakes", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:60" + }, + { + "label": "_totalUnstakesOf", + "offset": 0, + "slot": "57", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:61" + }, + { + "label": "_distributeGasLimit", + "offset": 0, + "slot": "58", + "type": "t_uint32", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:65" + }, + { + "label": "_totalClaimable", + "offset": 0, + "slot": "59", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:67" + }, + { + "label": "_claimable", + "offset": 0, + "slot": "60", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:68" + }, + { + "label": "_restakers", + "offset": 0, + "slot": "61", + "type": "t_mapping(t_bytes32,t_address)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:73" + }, + { + "label": "_maxTVL", + "offset": 0, + "slot": "62", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:78" + }, + { + "label": "stakeBonusAmount", + "offset": 0, + "slot": "63", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:83" + }, + { + "label": "targetCapacity", + "offset": 0, + "slot": "64", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:85" + }, + { + "label": "maxBonusRate", + "offset": 8, + "slot": "64", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:86" + }, + { + "label": "optimalBonusRate", + "offset": 16, + "slot": "64", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:87" + }, + { + "label": "stakeUtilizationKink", + "offset": 24, + "slot": "64", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:88" + }, + { + "label": "maxFlashFeeRate", + "offset": 0, + "slot": "65", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:90" + }, + { + "label": "optimalUnstakeRate", + "offset": 8, + "slot": "65", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:91" + }, + { + "label": "unstakeUtilizationKink", + "offset": 16, + "slot": "65", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:92" + }, + { + "label": "protocolFee", + "offset": 24, + "slot": "65", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:93" + }, + { + "label": "__gap", + "offset": 0, + "slot": "66", + "type": "t_array(t_uint256)34_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:100" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReentrancyGuardStorage)320_storage": { + "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", + "members": [ + { + "label": "_status", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Unstake)8181_storage)dyn_storage": { + "label": "struct IRestakingPool.Unstake[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)34_storage": { + "label": "uint256[34]", + "numberOfBytes": "1088" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IProtocolConfig)8123": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32" + }, + "t_struct(Unstake)8181_storage": { + "label": "struct IRestakingPool.Unstake", + "members": [ + { + "label": "recipient", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "amount", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.ReentrancyGuard": [ + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/projects/tests/omnivault-rebalancer/.openzeppelin/unknown-17000.json b/projects/tests/omnivault-rebalancer/.openzeppelin/unknown-17000.json new file mode 100644 index 00000000..39d42952 --- /dev/null +++ b/projects/tests/omnivault-rebalancer/.openzeppelin/unknown-17000.json @@ -0,0 +1,2043 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0xe59e4410d1D4C364b506F09aBe942b97f1c7b912", + "txHash": "0x008577c1540519757e2356e50d59a160bc92487289b295ca4b5e64edd366805a", + "kind": "transparent" + }, + { + "address": "0x3e329e6782C7d8496DE49e79CD36D1aA592D493b", + "txHash": "0xa5a569a9a8ccec4b3e641211c88309b0ef1a73b0d4cdae608b330bbbb39e63b2", + "kind": "transparent" + }, + { + "address": "0x76944d54c9eF0a7A563E43226e998F382714C92f", + "txHash": "0x833832c2a5ffd5b4da1551054b946202f357e49bac11dfffa103a7f9aca76bb0", + "kind": "transparent" + }, + { + "address": "0xEAA6d9f33c7095218Ed9cD4f0D7FB6551A14005f", + "txHash": "0x6fcfab1784dc615b4eebf081289c9ea1782e6347e03fe3a9ca8f7ae208dfb1bb", + "kind": "transparent" + }, + { + "address": "0x350744AAa70aa8a45A860b64e48c910ceAC72cc4", + "txHash": "0x52868823914d59d54a5ecd23a8f12af3201026922de06351c92486136cf35c54", + "kind": "transparent" + }, + { + "address": "0x655cae54f8bcb718275c7719259dc359d8253C62", + "txHash": "0x0b88303bf1a45fbbc6547da7375f216a677c72aa4e145d1c8b2b5de3f942a926", + "kind": "transparent" + } + ], + "impls": { + "6edc16d23a4d4f6c1904111ef9dc64f026946ac69ab9161a855c019e045fdfca": { + "address": "0x5246Ca73320051bDa0E12b10EE199357Ac77c441", + "txHash": "0x88b546cc1f5cc919756411d0004030e6660505ea14568cb8d565ee9e1f36becf", + "layout": { + "solcVersion": "0.8.20", + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "71d135c444c577e77f23565934e5ef47a051f98194121da673ec1aa67993def6": { + "address": "0xDCe300034018A1632edFdd7C434F2900cc52d431", + "txHash": "0xfb0b81e05224c5999ff14355e5e4a6265b802c5df5236aa41da61948e1d43e59", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)7775", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "_ratios", + "offset": 0, + "slot": "50", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RatioFeed", + "src": "contracts/RatioFeed.sol:18" + }, + { + "label": "historicalRatios", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_struct(HistoricalRatios)7790_storage)", + "contract": "RatioFeed", + "src": "contracts/RatioFeed.sol:19" + }, + { + "label": "ratioThreshold", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "RatioFeed", + "src": "contracts/RatioFeed.sol:24" + }, + { + "label": "_ratioUpdates", + "offset": 0, + "slot": "53", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RatioFeed", + "src": "contracts/RatioFeed.sol:29" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint64)9_storage": { + "label": "uint64[9]", + "numberOfBytes": "96" + }, + "t_contract(IProtocolConfig)7775": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_struct(HistoricalRatios)7790_storage)": { + "label": "mapping(address => struct IRatioFeed.HistoricalRatios)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_struct(HistoricalRatios)7790_storage": { + "label": "struct IRatioFeed.HistoricalRatios", + "members": [ + { + "label": "historicalRatios", + "type": "t_array(t_uint64)9_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "lastUpdate", + "type": "t_uint40", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "035ad31b54f24db62a54b465c282779cd6f114940d9cf42674ce8c8e39bc73a3": { + "address": "0x5ad4070Ae3F4D8dae0935A32c6Bcfc374998F2d0", + "txHash": "0x2c49787d123b5b157a3c6b834d6cf9c14ff144c604384de8523f39fd7116657a", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)7970", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "__gap", + "offset": 0, + "slot": "50", + "type": "t_array(t_uint256)50_storage", + "contract": "cToken", + "src": "contracts/cToken.sol:27" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)144_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)259_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_contract(IProtocolConfig)7970": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:38", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:42", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:45", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "be9930084391335f8f79dd1a134c0fce0b070f5d2e9864e694ce783a626fc9f9": { + "address": "0x1f53d133ae2F92A0c175dFEA155f0B5a1848cA27", + "txHash": "0xb55b1eb53442f398e1c3d3eec5bc5a3ce611cf5cd7260c2c31a303c70248408f", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)7943", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "_minStakeAmount", + "offset": 0, + "slot": "50", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:31" + }, + { + "label": "_minUnstakeAmount", + "offset": 0, + "slot": "51", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:32" + }, + { + "label": "_totalStaked", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:37" + }, + { + "label": "_totalUnstaked", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:41" + }, + { + "label": "_pendingGap", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:46" + }, + { + "label": "_pendingUnstakes", + "offset": 0, + "slot": "55", + "type": "t_array(t_struct(Unstake)8001_storage)dyn_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:50" + }, + { + "label": "_totalPendingUnstakes", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:54" + }, + { + "label": "_totalUnstakesOf", + "offset": 0, + "slot": "57", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:55" + }, + { + "label": "_distributeGasLimit", + "offset": 0, + "slot": "58", + "type": "t_uint32", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:59" + }, + { + "label": "_totalClaimable", + "offset": 0, + "slot": "59", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:61" + }, + { + "label": "_claimable", + "offset": 0, + "slot": "60", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:62" + }, + { + "label": "_restakers", + "offset": 0, + "slot": "61", + "type": "t_mapping(t_bytes32,t_address)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:67" + }, + { + "label": "_maxTVL", + "offset": 0, + "slot": "62", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:72" + }, + { + "label": "__gap", + "offset": 0, + "slot": "63", + "type": "t_array(t_uint256)37_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:79" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReentrancyGuardStorage)320_storage": { + "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", + "members": [ + { + "label": "_status", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Unstake)8001_storage)dyn_storage": { + "label": "struct IRestakingPool.Unstake[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)37_storage": { + "label": "uint256[37]", + "numberOfBytes": "1184" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IProtocolConfig)7943": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32" + }, + "t_struct(Unstake)8001_storage": { + "label": "struct IRestakingPool.Unstake", + "members": [ + { + "label": "recipient", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "amount", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.ReentrancyGuard": [ + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "65da5c5ed178e80f7b24d95b3c524cc0677e732c08b627f280f4b00904c8753a": { + "address": "0xf3a256Fa737DfA75f209393d395F2e178a5eDb72", + "txHash": "0x6110e2cb3b8ab1cdc2f422814637aaf336d8c34a0628519e67716ee07ac07b11", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)7775", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "commission", + "offset": 0, + "slot": "50", + "type": "t_uint16", + "contract": "FeeCollector", + "src": "contracts/FeeCollector.sol:21" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReentrancyGuardStorage)320_storage": { + "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", + "members": [ + { + "label": "_status", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_contract(IProtocolConfig)7775": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.ReentrancyGuard": [ + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "497030db8d1cafbf65ac9afd19d4e778cfcdd70a4a62306b6cf6bed72821f0b5": { + "address": "0x0Abd655972eBb6b0B25b0023329759E3CC46697B", + "txHash": "0xdb676b4d2ea54b20dcff79e174a6fd04a778c2e16f4516c6ec8c75004fe22303", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_selectorToTarget", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_bytes4,t_enum(FuncTarget)11084)", + "contract": "RestakerFacets", + "src": "contracts/restaker/RestakerFacets.sol:18" + }, + { + "label": "_podManager", + "offset": 0, + "slot": "1", + "type": "t_contract(IEigenPodManager)7800", + "contract": "RestakerFacets", + "src": "contracts/restaker/RestakerFacets.sol:19" + }, + { + "label": "_delegationManager", + "offset": 0, + "slot": "2", + "type": "t_contract(IDelegationManager)7241", + "contract": "RestakerFacets", + "src": "contracts/restaker/RestakerFacets.sol:20" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)14_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes4": { + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_contract(IDelegationManager)7241": { + "label": "contract IDelegationManager", + "numberOfBytes": "20" + }, + "t_contract(IEigenPodManager)7800": { + "label": "contract IEigenPodManager", + "numberOfBytes": "20" + }, + "t_enum(FuncTarget)11084": { + "label": "enum IRestakerFacets.FuncTarget", + "members": [ + "POD", + "POD_MANAGER", + "DELEGATION_MANAGER" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_bytes4,t_enum(FuncTarget)11084)": { + "label": "mapping(bytes4 => enum IRestakerFacets.FuncTarget)", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "4f146d0f312ca656685c98ada306961ee6ab5c4579c94b52b32e3a37bcf8e041": { + "address": "0xa3BC5EE6864749fbFB7A02ED5d06229b4c15ca3c", + "txHash": "0xdcc61c3fb75a197030032159035b117a0aadda4feea2e5bbcda3b2df5a427f1f", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_facets", + "offset": 0, + "slot": "0", + "type": "t_contract(IRestakerFacets)10123", + "contract": "Restaker", + "src": "contracts/restaker/Restaker.sol:17" + }, + { + "label": "_signer", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "Restaker", + "src": "contracts/restaker/Restaker.sol:18" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)14_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_contract(IRestakerFacets)10123": { + "label": "contract IRestakerFacets", + "numberOfBytes": "20" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "29f9e02cb8bda0ba6a19f761e929466f36e4ca0b5cf6133e06f4ce250ac53e96": { + "address": "0x5d2DdAD50869e9f80b676bd5c0348e8a324a6265", + "txHash": "0x2da0bfba1eae7981eb35bc9948ff7e5970dab154ffd3e8afb76046f7b19b9eac", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)8609", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "_minStakeAmount", + "offset": 0, + "slot": "50", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:31" + }, + { + "label": "_minUnstakeAmount", + "offset": 0, + "slot": "51", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:32" + }, + { + "label": "_totalStaked", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:37" + }, + { + "label": "_totalUnstaked", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:41" + }, + { + "label": "_pendingGap", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:46" + }, + { + "label": "_pendingUnstakes", + "offset": 0, + "slot": "55", + "type": "t_array(t_struct(Unstake)8686_storage)dyn_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:50" + }, + { + "label": "_totalPendingUnstakes", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:54" + }, + { + "label": "_totalUnstakesOf", + "offset": 0, + "slot": "57", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:55" + }, + { + "label": "_distributeGasLimit", + "offset": 0, + "slot": "58", + "type": "t_uint32", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:59" + }, + { + "label": "_totalClaimable", + "offset": 0, + "slot": "59", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:61" + }, + { + "label": "_claimable", + "offset": 0, + "slot": "60", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:62" + }, + { + "label": "_restakers", + "offset": 0, + "slot": "61", + "type": "t_mapping(t_bytes32,t_address)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:67" + }, + { + "label": "_maxTVL", + "offset": 0, + "slot": "62", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:72" + }, + { + "label": "__gap", + "offset": 0, + "slot": "63", + "type": "t_array(t_uint256)37_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:79" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReentrancyGuardStorage)320_storage": { + "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", + "members": [ + { + "label": "_status", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Unstake)8686_storage)dyn_storage": { + "label": "struct IRestakingPool.Unstake[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)37_storage": { + "label": "uint256[37]", + "numberOfBytes": "1184" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IProtocolConfig)8609": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32" + }, + "t_struct(Unstake)8686_storage": { + "label": "struct IRestakingPool.Unstake", + "members": [ + { + "label": "recipient", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "amount", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.ReentrancyGuard": [ + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "affdaec18cf9db0d6f42d6167a62d16fcdd0a085239b9ebd7beb8d492630e178": { + "address": "0xaf10Aa96fECeAF6309EDc4357a4bbC94773312fE", + "txHash": "0x957b03739d9f3e92f82b615d09e0a0f5a9bee19bdeb850c352b9ccd40aa60132", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_selectorToTarget", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_bytes4,t_enum(FuncTarget)10103)", + "contract": "RestakerFacets", + "src": "contracts/restaker/RestakerFacets.sol:18" + }, + { + "label": "_podManager", + "offset": 0, + "slot": "1", + "type": "t_contract(IEigenPodManager)7827", + "contract": "RestakerFacets", + "src": "contracts/restaker/RestakerFacets.sol:19" + }, + { + "label": "_delegationManager", + "offset": 0, + "slot": "2", + "type": "t_contract(IDelegationManager)7268", + "contract": "RestakerFacets", + "src": "contracts/restaker/RestakerFacets.sol:20" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)14_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes4": { + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_contract(IDelegationManager)7268": { + "label": "contract IDelegationManager", + "numberOfBytes": "20" + }, + "t_contract(IEigenPodManager)7827": { + "label": "contract IEigenPodManager", + "numberOfBytes": "20" + }, + "t_enum(FuncTarget)10103": { + "label": "enum IRestakerFacets.FuncTarget", + "members": [ + "POD", + "POD_MANAGER", + "DELEGATION_MANAGER" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_bytes4,t_enum(FuncTarget)10103)": { + "label": "mapping(bytes4 => enum IRestakerFacets.FuncTarget)", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "263678939318159cce1993df1dcd2675f9fb1428e23da6735e7c696c9ed84bdd": { + "address": "0x87a2fEc143f6b9f444Adb4b853776434B6C00BA5", + "txHash": "0x03201d0cee90e055ff79d2ffc7fc216132117538394980fe69495ceb45792797", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)6125", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "_name", + "offset": 0, + "slot": "50", + "type": "t_string_storage", + "contract": "cToken", + "src": "contracts/cToken.sol:22" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "51", + "type": "t_string_storage", + "contract": "cToken", + "src": "contracts/cToken.sol:23" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)48_storage", + "contract": "cToken", + "src": "contracts/cToken.sol:30" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)90_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)10_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)205_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_array(t_uint256)48_storage": { + "label": "uint256[48]", + "numberOfBytes": "1536" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_contract(IProtocolConfig)6125": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:38", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:42", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:45", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "9c521865d27ce662b67f30bd0faa85078c0cac04c5c0e16d685ebafdbb0cbfd4": { + "address": "0x5A5fE78A7C23BA25096Cf079D43FCDD32d91f78d", + "txHash": "0x0069f265dee885eceb865348a3567880dbd40b9c9ce2af4bb2cbbec345f97c0e", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_config", + "offset": 0, + "slot": "0", + "type": "t_contract(IProtocolConfig)7411", + "contract": "Configurable", + "src": "contracts/Configurable.sol:17" + }, + { + "label": "__reserved", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "Configurable", + "src": "contracts/Configurable.sol:18" + }, + { + "label": "_minStakeAmount", + "offset": 0, + "slot": "50", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:37" + }, + { + "label": "_minUnstakeAmount", + "offset": 0, + "slot": "51", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:38" + }, + { + "label": "_totalStaked", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:43" + }, + { + "label": "_totalUnstaked", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:47" + }, + { + "label": "_pendingGap", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:52" + }, + { + "label": "_pendingUnstakes", + "offset": 0, + "slot": "55", + "type": "t_array(t_struct(Unstake)7469_storage)dyn_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:56" + }, + { + "label": "_totalPendingUnstakes", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:60" + }, + { + "label": "_totalUnstakesOf", + "offset": 0, + "slot": "57", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:61" + }, + { + "label": "_distributeGasLimit", + "offset": 0, + "slot": "58", + "type": "t_uint32", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:65" + }, + { + "label": "_totalClaimable", + "offset": 0, + "slot": "59", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:67" + }, + { + "label": "_claimable", + "offset": 0, + "slot": "60", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:68" + }, + { + "label": "_restakers", + "offset": 0, + "slot": "61", + "type": "t_mapping(t_bytes32,t_address)", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:73" + }, + { + "label": "_maxTVL", + "offset": 0, + "slot": "62", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:78" + }, + { + "label": "stakeBonusAmount", + "offset": 0, + "slot": "63", + "type": "t_uint256", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:83" + }, + { + "label": "targetCapacity", + "offset": 0, + "slot": "64", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:85" + }, + { + "label": "maxBonusRate", + "offset": 8, + "slot": "64", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:86" + }, + { + "label": "optimalBonusRate", + "offset": 16, + "slot": "64", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:87" + }, + { + "label": "stakeUtilizationKink", + "offset": 24, + "slot": "64", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:88" + }, + { + "label": "maxFlashFeeRate", + "offset": 0, + "slot": "65", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:90" + }, + { + "label": "optimalUnstakeRate", + "offset": 8, + "slot": "65", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:91" + }, + { + "label": "unstakeUtilizationKink", + "offset": 16, + "slot": "65", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:92" + }, + { + "label": "protocolFee", + "offset": 24, + "slot": "65", + "type": "t_uint64", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:93" + }, + { + "label": "__gap", + "offset": 0, + "slot": "66", + "type": "t_array(t_uint256)34_storage", + "contract": "RestakingPool", + "src": "contracts/RestakingPool.sol:100" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)64_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReentrancyGuardStorage)320_storage": { + "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", + "members": [ + { + "label": "_status", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Unstake)7469_storage)dyn_storage": { + "label": "struct IRestakingPool.Unstake[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)34_storage": { + "label": "uint256[34]", + "numberOfBytes": "1088" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IProtocolConfig)7411": { + "label": "contract IProtocolConfig", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32" + }, + "t_struct(Unstake)7469_storage": { + "label": "struct IRestakingPool.Unstake", + "members": [ + { + "label": "recipient", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "amount", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.ReentrancyGuard": [ + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/projects/tests/omnivault-rebalancer/.solcover.js b/projects/tests/omnivault-rebalancer/.solcover.js new file mode 100644 index 00000000..167afbcc --- /dev/null +++ b/projects/tests/omnivault-rebalancer/.solcover.js @@ -0,0 +1,30 @@ +module.exports = { + skipFiles: [ + "bridge-lz/mock/", + "restaking-pool/interfaces/", + "restaking-pool/libraries/", + "restaking-pool/mock/", + "restaking-pool/restaker/", + "restaking-pool/Configurable.sol", + "restaking-pool/cToken.sol", + "restaking-pool/FeeCollector.sol", + "restaking-pool/ProtocolConfig.sol", + "restaking-pool/RatioFeed.sol", + "restaking-pool/RestakingPool.sol", + "restaking-pool/XERC20Lockbox.sol", + "vaults/assets-handler/InceptionAssetsHandler.sol", + "vaults/assets-handler/InceptionERC20OmniAssetsHandler.sol", + "vaults/eigenlayer-handler/", + "vaults/interfaces/", + "vaults/lib/", + "vaults/mock/", + "vaults/restaker/", + "vaults/tests/", + "vaults/tokens/", + "vaults/vaults/inEth/", + "vaults/vaults/vault_e1/", + "vaults/vaults/vault_e2/", + "vaults/vaults/InceptionERC20OmniVault.sol", + "vaults/vaults/InceptionVault.sol", + ] +}; \ No newline at end of file diff --git a/projects/tests/omnivault-rebalancer/hardhat.config.ts b/projects/tests/omnivault-rebalancer/hardhat.config.ts new file mode 100644 index 00000000..2a2ca8b3 --- /dev/null +++ b/projects/tests/omnivault-rebalancer/hardhat.config.ts @@ -0,0 +1,66 @@ +import "dotenv"; +import { HardhatUserConfig } from "hardhat/config"; +import { CONFIG } from "../../../hh.config"; +import "@nomicfoundation/hardhat-toolbox"; +import "@layerzerolabs/test-devtools-evm-hardhat"; +import "hardhat-gas-reporter"; +import "hardhat-deploy"; +import "@openzeppelin/hardhat-upgrades"; +import fse from "fs-extra"; +import path from "path"; + +const TARGET_DIR = "./contracts"; +//const EXTERNAL_PROJECTS = ["../../bridge-lz", "../../restaking-pool", "../../vaults", "./mocks"]; +const EXTERNAL_PROJECTS = ["../../bridge-lz", "../../vaults", "./mocks"]; + +const copyContracts = () => { + EXTERNAL_PROJECTS.forEach((project) => { + const srcDir = path.resolve(project + "/contracts"); + const dstDir = path.join(TARGET_DIR, path.basename(project)); + console.log("src dir:", srcDir); + console.log("dst dir:", dstDir); + + //Clear old contracts + fse.removeSync(dstDir); + fse.ensureDirSync(dstDir); + + //Cope + fse.copySync(srcDir, dstDir, { overwrite: true }); + }); +}; +copyContracts(); + +const config: HardhatUserConfig = { + ...(CONFIG as HardhatUserConfig), + networks: { + hardhat: { + forking: { + url: process.env.MAINNET_RPC, + blockNumber: 20810000, + }, + addresses: { + restakingPoolConfig: "0x81b98D3a51d4aC35e0ae132b0CF6b50EA1Da2603", + restakingPool: "0x46199cAa0e453971cedf97f926368d9E5415831a", + inceptionVault: "0x295234B7E370a5Db2D2447aCA83bc7448f151161", + lib: "0x8a6a8a7233b16d0ecaa7510bfd110464a0d69f66", + cToken: "0xf073bAC22DAb7FaF4a3Dd6c6189a70D54110525C", + inceptionToken: "0x668308d77be3533c909a692302Cb4D135Bf8041C", + sfrxETH: "0xac3e018457b222d93114458476f3e3416abbe38f", + ratioFeed: "0x122ee24Cb3Cc1b6B987800D3B54A68FC16910Dbf", + lockbox: "0xb86d7BfB30E4e9552Ba1Dd6208284667DF2E8c0E", + fraxFerry: "0xC05DE1CB258bAdc152d8EAd3F573CA9A2E812B2a", + }, + }, + }, + solidity: { + version: "0.8.27", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, +}; + +export default config; diff --git a/projects/tests/omnivault-rebalancer/mocks/contracts/DummyToken.sol b/projects/tests/omnivault-rebalancer/mocks/contracts/DummyToken.sol new file mode 100644 index 00000000..fae847b4 --- /dev/null +++ b/projects/tests/omnivault-rebalancer/mocks/contracts/DummyToken.sol @@ -0,0 +1,28 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; +import "@openzeppelin/contracts/security/Pausable.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/access/AccessControl.sol"; +import "./IERC20Mintable.sol"; + +contract DummyToken is IERC20Mintable, ERC20Permit, ERC20Burnable, Ownable { + constructor() + Ownable() + ERC20("SecondUnderlyingToken", "UT2") + ERC20Permit("SecondUnderlyingToken") { + } + + function mint(address to, uint256 amount) external { // no access control on minting for test reasons + _mint(to, amount); + } + + function burnFrom(address account, uint256 value) public override { + //_spendAllowance(account, _msgSender(), value); + _burn(account, value); + } +} \ No newline at end of file diff --git a/projects/tests/omnivault-rebalancer/mocks/contracts/IERC20Mintable.sol b/projects/tests/omnivault-rebalancer/mocks/contracts/IERC20Mintable.sol new file mode 100644 index 00000000..d6f44023 --- /dev/null +++ b/projects/tests/omnivault-rebalancer/mocks/contracts/IERC20Mintable.sol @@ -0,0 +1,14 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.4; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; +import "@openzeppelin/contracts/security/Pausable.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/access/AccessControl.sol"; + +interface IERC20Mintable is IERC20 { + function mint(address to, uint256 amount) external; +} \ No newline at end of file diff --git a/projects/tests/omnivault-rebalancer/mocks/contracts/MockFraxFerry.sol b/projects/tests/omnivault-rebalancer/mocks/contracts/MockFraxFerry.sol new file mode 100644 index 00000000..e121097a --- /dev/null +++ b/projects/tests/omnivault-rebalancer/mocks/contracts/MockFraxFerry.sol @@ -0,0 +1,158 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +// WARNING: Add/exec waiting period is disabled for testing + +// ==================================================================== +// | ______ _______ | +// | / _____________ __ __ / ____(_____ ____ _____ ________ | +// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | +// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | +// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | +// | | +// ==================================================================== +// ============================ Fraxferry ============================= +// ==================================================================== +// Ferry that can be used to ship tokens between chains + +// Frax Finance: https://github.com/FraxFinance + +// Primary Author(s) +// Dennis: https://github.com/denett + +/* + ** Modus operandi: + ** - User sends tokens to the contract. This transaction is stored in the contract. + ** - Captain queries the source chain for transactions to ship. + ** - Captain sends batch (start, end, hash) to start the trip, + ** - Crewmembers check the batch and can dispute it if it is invalid. + ** - Non disputed batches can be executed by the first officer by providing the transactions as calldata. + ** - Hash of the transactions must be equal to the hash in the batch. User receives their tokens on the other chain. + ** - In case there was a fraudulent transaction (a hacker for example), the owner can cancel a single transaction, such that it will not be executed. + ** - The owner can manually manage the tokens in the contract and must make sure it has enough funds. + ** + ** What must happen for a false batch to be executed: + ** - Captain is tricked into proposing a batch with a false hash + ** - All crewmembers bots are offline/censured/compromised and no one disputes the proposal + ** + ** Other risks: + ** - Reorgs on the source chain. Avoided, by only returning the transactions on the source chain that are at least one hour old. + ** - Rollbacks of optimistic rollups. Avoided by running a node. + ** - Operators do not have enough time to pause the chain after a fake proposal. Avoided by requiring a minimal amount of time between sending the proposal and executing it. + */ +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol"; +import {SafeERC20, IERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "@openzeppelin/contracts/utils/math/Math.sol"; +import "hardhat/console.sol"; + +contract MockFraxferry { + using SafeERC20 for IERC20; + + IERC20 public immutable token; + IERC20 public immutable targetToken; + uint public immutable chainid; + uint public immutable targetChain; + + address public owner; + address public nominatedOwner; + address public captain; + address public firstOfficer; + mapping(address => bool) public crewmembers; + mapping(address => bool) public fee_exempt_addrs; + + bool public paused; + + uint public MIN_WAIT_PERIOD_ADD = 1; + uint public MIN_WAIT_PERIOD_EXECUTE = 1; + uint public FEE_RATE = 10; // 0.1% fee + uint public FEE_MIN = 1e16; // set fees to 0.01 eth + uint public FEE_MAX = 1e16; // (just like the real thing) + + uint constant MAX_FEE_RATE = 100; // Max fee rate is 1% + uint constant MAX_FEE_MIN = 100e18; // Max minimum fee is 100 tokens + uint constant MAX_FEE_MAX = 1000e18; // Max fee is 1000 tokens + + uint public constant REDUCED_DECIMALS = 1e10; + + Transaction[] public transactions; + mapping(uint => bool) public cancelled; + uint public executeIndex; + Batch[] public batches; + uint256 public batchCtr; + + struct Transaction { + address user; + uint64 amount; + uint32 timestamp; + } + + struct Batch { + uint64 start; + uint64 end; + uint64 departureTime; + uint64 status; + bytes32 hash; + } + + struct BatchData { + uint startTransactionNo; + Transaction[] transactions; + } + + constructor(address _token) { + //require (block.chainid==_chainid,"Wrong chain"); + token = IERC20(_token); + targetToken = IERC20(_token); + } + + // ############## Events ############## + + event Embark( + address indexed sender, + uint index, + uint amount, + uint amountAfterFee, + uint timestamp + ); + event Disembark(uint start, uint end, bytes32 hash); + + // ############## Ferry actions ############## + + function embarkWithRecipient(uint amount, address recipient) public { + amount = (amount / REDUCED_DECIMALS) * REDUCED_DECIMALS; // Round amount to fit in data structure + uint fee; + if (fee_exempt_addrs[msg.sender]) fee = 0; + else { + fee = Math.min( + Math.max(FEE_MIN, (amount * FEE_RATE) / 10000), + FEE_MAX + ); + } + require(amount > fee, "Amount too low"); + require( + amount / REDUCED_DECIMALS <= type(uint64).max, + "Amount too high" + ); + token.safeTransferFrom(msg.sender, address(this), amount); + uint64 amountAfterFee = uint64((amount - fee) / REDUCED_DECIMALS); + emit Embark( + recipient, + transactions.length, + amount, + amountAfterFee * REDUCED_DECIMALS, + block.timestamp + ); + // transactions.push(Transaction(recipient,amountAfterFee,uint32(block.timestamp))); + } + + function embark(uint amount) public { + embarkWithRecipient(amount, msg.sender); + } + + function mockDisembark(address _to, uint256 _amount) external { + token.safeTransfer(_to, _amount); + emit Disembark(batchCtr, batchCtr, bytes32(0)); + batchCtr++; + } +} diff --git a/projects/tests/omnivault-rebalancer/package.json b/projects/tests/omnivault-rebalancer/package.json new file mode 100644 index 00000000..5594c8cf --- /dev/null +++ b/projects/tests/omnivault-rebalancer/package.json @@ -0,0 +1,51 @@ +{ + "name": "omnivault-integration-tests-l1", + "version": "1.0.0", + "description": "", + "directories": { + "test": "test" + }, + "scripts": { + "format": "prettier --write test/*.ts test/*.js" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "@layerzerolabs/lz-evm-protocol-v2": "^2.3.39", + "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.39", + "@layerzerolabs/lz-v2-utilities": "^2.3.39", + "@layerzerolabs/oapp-evm": "^0.0.4", + "@layerzerolabs/oft-evm": "^0.0.11", + "@layerzerolabs/test-devtools-evm-hardhat": "~0.3.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.2", + "@nomicfoundation/hardhat-ethers": "^3.0.5", + "@nomicfoundation/hardhat-network-helpers": "^1.0.9", + "@nomicfoundation/hardhat-toolbox": "^4.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.5", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@openzeppelin/contracts": "^4.8.3", + "@openzeppelin/contracts-upgradeable": "^4.8.3", + "@openzeppelin/hardhat-upgrades": "^3.0.0", + "prettier": "3.3.2", + "@typechain/ethers-v6": "^0.5.1", + "@typechain/hardhat": "^9.1.0", + "@types/chai": "^4.3.11", + "@types/fs-extra": "^11.0.4", + "@types/mocha": "^10.0.6", + "@types/node": "^20.10.1", + "chai": "^4.2.0", + "dotenv": "^16.3.1", + "ethereumjs-util": "^7.1.5", + "ethers": "^6.9.0", + "fs-extra": "^11.2.0", + "hardhat": "^2.19.1", + "hardhat-deploy": "^0.11.45", + "hardhat-gas-reporter": "^1.0.9", + "hardhat-tracer": "^2.7.0", + "solidity-bytes-utils": "^0.8.2", + "solidity-coverage": "^0.8.13", + "ts-node": "^10.9.1", + "typechain": "^8.3.2", + "typescript": "^5.2.2" + } +} diff --git a/projects/tests/omnivault-rebalancer/test/ERC20Rebalancer.test.ts b/projects/tests/omnivault-rebalancer/test/ERC20Rebalancer.test.ts new file mode 100644 index 00000000..6a237609 --- /dev/null +++ b/projects/tests/omnivault-rebalancer/test/ERC20Rebalancer.test.ts @@ -0,0 +1,3222 @@ +import { ethers, network, upgrades } from "hardhat"; +import { expect } from "chai"; +import { takeSnapshot, time } from "@nomicfoundation/hardhat-network-helpers"; +import { e18, getSlotByName, impersonateWithEth, randomBI, randomBIMax, toWei } from "./helpers/utils.js"; +import { SnapshotRestorer } from "@nomicfoundation/hardhat-network-helpers/src/helpers/takeSnapshot"; +import { AbiCoder, Signer } from "ethers"; +import { Options } from "@layerzerolabs/lz-v2-utilities"; +import { + EndpointMock, + ERC20, + InceptionERC20OmniVault, + InceptionRatioFeed, + InceptionToken, + FerryAdapter, + LZCrossChainAdapterL1, + LZCrossChainAdapterL2, + ERC20Rebalancer, + RatioFeed, + RestakingPool, + InceptionVault, + IERC20Mintable, + MockFraxferry, + FraxFerryLZCrossChainAdapterL2, +} from "../typechain-types"; +import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; +import { min } from "hardhat/internal/util/bigint"; + +BigInt.prototype.format = function () { + return this.toLocaleString("de-DE"); +}; + +const FRAX_ID = 252n; +const ETH_ID = 1n; +const FRAX_EID = 30255n; +const FRAX_TESTNET_EID = 40255n; +const ETH_EID = 30111n; +const eIds = [ETH_EID, FRAX_EID]; +const chainIds = [ETH_ID, FRAX_ID]; +const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + +describe("Omnivault integration tests", function () { + this.timeout(150000); + // new + let underlyingL1, underlyingL2: IERC20Mintable; + let ferryL2: MockFraxferry; + let adapterL2: FraxFerryLZCrossChainAdapterL2; + // end new + //Adapters + // let adapterL1: LZCrossChainAdapterL1; + //let maliciousAdapterL1: LZCrossChainAdapterL1; + //let adapterFrax: LZCrossChainAdapterL2; + + let ethEndpoint: EndpointMock; + let fraxEndpoint: EndpointMock; + + //let maliciousAdapterL2: LZCrossChainAdapterL2; + + // ============ L1 ============ + let ratioFeedL1: RatioFeed; + let iTokenL1: InceptionToken; + let rebalancer: ERC20Rebalancer; + let inceptionVault: InceptionVault; + + // ============ L2 ============ + let iTokenL2: InceptionToken; + //let fraxToken: ERC20; + let omniVault: InceptionERC20OmniVault; // Frax chain + let ratioFeedL2: InceptionRatioFeed; + + let owner: Signer; + let operator: Signer; + let treasury: Signer; + let signer1: Signer; + let signer2: Signer; + let signer3: Signer; + let target: Signer; + + let snapshot: SnapshotRestorer; + let lockboxAddress: String; + + let TARGET = toWei(10); + + async function init(owner: Signer, operator: Signer) { + const block = await ethers.provider.getBlock("latest"); + console.log(`Starting at block number: ${block.number}`); + lockboxAddress = network.config.addresses.lockbox; + + // Deploy fake ERC20 and Ferries + // then deploy L1 incToken + // L1 reb + // L2 CCA + // L2 incToken + // deploy and set ratio feeds + // set target receivers + // set reb in L1it + // set reb delays + // set ratios + + console.log("=== Underlying asset mocks"); + const DummyTokenFactory = await ethers.getContractFactory("DummyToken"); + underlyingL1 = await DummyTokenFactory.deploy(); + (underlyingL1 as any).address = await underlyingL1.getAddress(); + + underlyingL2 = await DummyTokenFactory.deploy(); + (underlyingL2 as any).address = await underlyingL2.getAddress(); + + console.log("=== Ferry mocks"); + const MockFerryFactory = await ethers.getContractFactory("MockFraxferry"); + ferryL2 = await MockFerryFactory.deploy(underlyingL2); + (ferryL2 as any).address = await ferryL2.getAddress(); + + // console.log("=== CrossChainAdapterL1"); + // const ethEndpoint = await ethers.deployContract("EndpointMock", [ETH_EID]); + // (ethEndpoint as any).address = await ethEndpoint.getAddress(); + // const LZCrossChainAdapterL1 = await ethers.getContractFactory("LZCrossChainAdapterL1"); + // const adapterL1 = await upgrades.deployProxy(LZCrossChainAdapterL1, [ + // (ethEndpoint as any).address, + // (ethEndpoint as any).address, + // eIds, + // chainIds, + // ]); + // (adapterL1 as any).address = await adapterL1.getAddress(); + + // ____ _ _ _ _ + // / ___|_ __ ___ ___ ___ ___| |__ __ _(_)_ __ __ _ __| | __ _ _ __ | |_ ___ _ __ ___ + // | | | '__/ _ \/ __/ __|/ __| '_ \ / _` | | '_ \ / _` |/ _` |/ _` | '_ \| __/ _ \ '__/ __| + // | |___| | | (_) \__ \__ \ (__| | | | (_| | | | | | | (_| | (_| | (_| | |_) | || __/ | \__ \ + // \____|_| \___/|___/___/\___|_| |_|\__,_|_|_| |_| \__,_|\__,_|\__,_| .__/ \__\___|_| |___/ + // |_| + console.log("============ Crosschain adapters ============"); + + console.log("=== CrossChainAdapterL1"); + const ethEndpoint = await ethers.deployContract("EndpointMock", [ETH_EID]); + (ethEndpoint as any).address = await ethEndpoint.getAddress(); + const LZCrossChainAdapterL1 = await ethers.getContractFactory("LZCrossChainAdapterL1"); + const adapterL1 = await upgrades.deployProxy(LZCrossChainAdapterL1, [ + (ethEndpoint as any).address, + (ethEndpoint as any).address, + eIds, + chainIds, + ]); + (adapterL1 as any).address = await adapterL1.getAddress(); + + console.log("=== Frax LZCrossChainAdapterL2"); + const fraxEndpoint = await ethers.deployContract("EndpointMock", [FRAX_EID]); + (fraxEndpoint as any).address = await fraxEndpoint.getAddress(); + const FraxFerryLZCrossChainAdapterL2 = await ethers.getContractFactory("FraxFerryLZCrossChainAdapterL2"); + const adapterFrax = await upgrades.deployProxy(FraxFerryLZCrossChainAdapterL2, [ + (underlyingL2 as any).address, // underlying token + (ferryL2 as any).address, // ferry mock bridge + (fraxEndpoint as any).address, // endpoint + (owner as any).address, // delegate + ETH_ID, // chainID + eIds, + chainIds, + ]); + (adapterFrax as any).address = await adapterFrax.getAddress(); + + // (adapterFrax as any).sendData = async function (timestamp: any, vaultBalance: any, totalSupply: any) { + // const message = encodePayload(timestamp, vaultBalance, totalSupply); + // const fees = await this.quote(message, options); + // return await this.sendDataL1(message, options, { value: fees }); + // }; + + // Connect endpoints + // await fraxEndpoint.setDestLzEndpoint(adapterL1.address, ethEndpoint.address); + // await ethEndpoint.setDestLzEndpoint((adapterFrax as any).address, (fraxEndpoint as any).address); + + /************************************ + ******** Malicious adapters ******** + ************************************/ + + const maliciousAdapterL1 = await upgrades.deployProxy(LZCrossChainAdapterL1, [ethEndpoint.address, owner.address, eIds, chainIds]); + (maliciousAdapterL1 as any).address = await maliciousAdapterL1.getAddress(); + + const maliciousAdapterL2 = await upgrades.deployProxy(FraxFerryLZCrossChainAdapterL2, [ + (underlyingL2 as any).address, // underlying token + (ferryL2 as any).address, // ferry mock bridge + fraxEndpoint.address, + owner.address, + ETH_ID, + eIds, + chainIds, + ]); + (maliciousAdapterL2 as any).address = await maliciousAdapterL2.getAddress(); + + // ____ _ + // | | / | + // | | | | + // | |___| | + // |_____| | + + console.log("============ FraxETH ============"); + const sfrxETH = await ethers.getContractAt("ERC20", (network.config as any).addresses.sfrxETH); + + // impersonateStaker: async (staker, iVault, asset, assetPool) => { + // const donor = await impersonateWithEth("0xe7d40d9a77caddd8e8b4b484ed14c42f3b8d763a", toWei(1)); + // console.log(`balance of the donor: ${(await asset.balanceOf(donor.address)).toString()}`); + // await asset.connect(donor).transfer(staker.address, toWei(1000)); + // const balanceAfter = await asset.balanceOf(staker.address); + // await asset.connect(staker).approve(await iVault.getAddress(), balanceAfter); + // return staker; + // }, + // }, + + console.log("============ InceptionVault Layer1 ============"); + + console.log("=== InceptionVault"); + console.log((network.config as any).addresses.inceptionVault); + const restakingPoolAdminAddress = await upgrades.erc1967.getAdminAddress((network.config as any).addresses.inceptionVault); + let slot = "0x" + (0).toString(16); + let value = ethers.zeroPadValue((owner as any).address, 32); + await network.provider.send("hardhat_setStorageAt", [restakingPoolAdminAddress, slot, value]); + + const InceptionVaultFactory = await ethers.getContractFactory("InceptionVault", { + signer: owner, + libraries: { InceptionLibrary: network.config.addresses.lib }, + }); + await upgrades.forceImport(network.config.addresses.inceptionVault, InceptionVaultFactory); + const inceptionVault = await upgrades.upgradeProxy(network.config.addresses.inceptionVault, InceptionVaultFactory, { + unsafeAllowLinkedLibraries: true, + }); + inceptionVault.address = await inceptionVault.getAddress(); + + console.log("=== InceptionToken"); + const inceptionTokenAdminAddress = await upgrades.erc1967.getAdminAddress(network.config.addresses.inceptionToken); + console.log(inceptionTokenAdminAddress); + slot = "0x" + (0).toString(16); + value = ethers.zeroPadValue(owner.address, 32); + await network.provider.send("hardhat_setStorageAt", [inceptionTokenAdminAddress, slot, value]); + const InceptionTokenFactory = await ethers.getContractFactory("InceptionToken", owner); + await upgrades.forceImport(network.config.addresses.inceptionToken, InceptionTokenFactory); + const inceptionToken = await upgrades.upgradeProxy(network.config.addresses.inceptionToken, InceptionTokenFactory); + inceptionToken.address = await inceptionToken.getAddress(); + + console.log("=== RatioFeed"); + const ratioFeedAdminAddress = await upgrades.erc1967.getAdminAddress(network.config.addresses.ratioFeed); + slot = "0x" + (0).toString(16); + value = ethers.zeroPadValue(owner.address, 32); + await network.provider.send("hardhat_setStorageAt", [ratioFeedAdminAddress, slot, value]); + const RatioFeed = await ethers.getContractFactory("RatioFeed", owner); + const ratioFeedL1 = await upgrades.upgradeProxy(network.config.addresses.ratioFeed, RatioFeed); + ratioFeedL1.address = await ratioFeedL1.getAddress(); + + console.log("=== ERC20Rebalancer"); + const Rebalancer = await ethers.getContractFactory("ERC20Rebalancer"); + const rebalancer = await upgrades.deployProxy(Rebalancer, [ + 31337, // def chainid + // incToken + // underlying asset + // lockbox + // ivault + // adapter + // operator + inceptionToken.address, + lockboxAddress, + inceptionVault.address, + adapterL1.address, + ratioFeedL1.address, + operator.address, + ]); + rebalancer.address = await rebalancer.getAddress(); + await rebalancer.connect(owner).addChainId(FRAX_ID); + await rebalancer.connect(owner).addChainId(OPT_ID); + + // ___ ___ __ _ _ _ ____ + // / _ \ _ __ ___ _ __ (_) \ / /_ _ _ _| | |_ | | |___ \ + // | | | | '_ ` _ \| '_ \| |\ \ / / _` | | | | | __| | | __) | + // | |_| | | | | | | | | | | \ V / (_| | |_| | | |_ | |___ / __/ + // \___/|_| |_| |_|_| |_|_| \_/ \__,_|\__,_|_|\__| |_____|_____| + // + console.log("============ OmniVault Layer2 ============"); + console.log("=== iToken"); + const iTokenFactory = await ethers.getContractFactory("InceptionToken", owner); + const iToken = await upgrades.deployProxy(iTokenFactory, ["TEST InceptionLRT Token", "tINt"]); + await iToken.waitForDeployment(); + iToken.address = await iToken.getAddress(); + + console.log("=== InceptionRatioFeed"); + const iRatioFeedFactory = await ethers.getContractFactory("InceptionRatioFeed", owner); + const ratioFeedL2 = await upgrades.deployProxy(iRatioFeedFactory, []); + await ratioFeedL2.waitForDeployment(); + ratioFeedL2.address = await ratioFeedL2.getAddress(); + await (await ratioFeedL2.updateRatioBatch([iToken.address], [e18])).wait(); + + console.log("=== OmniVault"); + const omniVaultFactory = await ethers.getContractFactory("ERC20OmniVault_E2", owner); + const omniVault = await upgrades.deployProxy(omniVaultFactory, [ + "OmniVault", + operator.address, + iToken.address, + await sfrxETH.getAddress(), + adapterFrax.address, + ]); + omniVault.address = await omniVault.getAddress(); + await omniVault.setRatioFeed(ratioFeedL2.address); + await omniVault.setTreasuryAddress(treasury.address); + await iToken.setVault(omniVault.address); + + // Adapters final setup + await adapterL1.setTargetReceiver(rebalancer.address); + await adapterL1.setPeer(FRAX_EID, ethers.zeroPadValue(adapterFrax.address, 32)); + await adapterFrax.setTargetReceiver(omniVault.address); + await adapterFrax.setPeer(ETH_EID, ethers.zeroPadValue(adapterL1.address, 32)); + + await maliciousAdapterL1.setPeer(FRAX_EID, ethers.zeroPadValue(adapterFrax.address, 32)); + await maliciousAdapterL2.setPeer(ETH_EID, ethers.zeroPadValue(adapterL1.address, 32)); + + return [ + adapterL1, + ethEndpoint, + adapterFrax, + fraxEndpoint, + inceptionToken, + rebalancer, + ratioFeedL1, + inceptionVault, + iToken, + ratioFeedL2, + omniVault, + maliciousAdapterL1, + maliciousAdapterL2, + ]; + } + + async function addReplenishBonusToOmniVault(amount) { + if (amount > 0n) { + expect(await iToken.balanceOf(signer3.address)).to.be.eq(0n); + await omniVault.connect(signer3).deposit(signer3.address, { value: amount }); + const shares = await iToken.balanceOf(signer3.address); + await omniVault.connect(signer3).flashWithdraw(shares, signer3.address); + } + return await omniVault.depositBonusAmount(); + } + + function encodePayload(timestamp, ethAmount, totalSupply) { + const abiCoder = new AbiCoder(); + return abiCoder.encode(["uint256", "uint256", "uint256"], [timestamp, totalSupply, ethAmount]); + } + + before(async function () { + [owner, operator, treasury, signer1, signer2, signer3, target] = await ethers.getSigners(); + [ + adapterL1, + ethEndpoint, + adapterFrax, + fraxEndpoint, + underlyingToken, + rebalancer, + ratioFeedL1, + inceptionVault, + iToken, + ratioFeedL2, + omniVault, + maliciousAdapterL1, + maliciousAdapterL2, + ] = await init(owner, operator); + + snapshot = await takeSnapshot(); + }); + + describe("InceptionVault", function () { + describe("After deployments checks", function () { + before(async function () { + await snapshot.restore(); + }); + + it("Signer can stake", async function () { + await inceptionVault.connect(signer1).deposit(2n * e18, signer1); + }); + + it("Get min stake amount", async function () { + console.log("Min stake amount: ", await inceptionVault.minAmount()); + }); + }); + }); + + describe("Bridge base flow", function () { + const TARGET = e18 / 10n; + let iTokenOpt: InceptionToken; + let omniVaultOpt: InceptionERC20OmniVault; + let ratioFeedL2Opt: InceptionRatioFeed; + before(async function () { + await snapshot.restore(); + + console.log("============ OmniVault Layer2 Optimism============"); + console.log("=== iTokenOpt"); + const iTokenFactory = await ethers.getContractFactory("InceptionToken", owner); + iTokenOpt = await upgrades.deployProxy(iTokenFactory, ["TEST InceptionLRT Token", "tINt"]); + await iTokenOpt.waitForDeployment(); + iTokenOpt.address = await iTokenOpt.getAddress(); + + console.log("=== InceptionRatioFeed"); + const iRatioFeedFactory = await ethers.getContractFactory("InceptionRatioFeed", owner); + ratioFeedL2Opt = await upgrades.deployProxy(iRatioFeedFactory, []); + ratioFeedL2Opt.waitForDeployment(); + ratioFeedL2Opt.address = await ratioFeedL2Opt.getAddress(); + await (await ratioFeedL2Opt.updateRatioBatch([iTokenOpt.address], [e18])).wait(); + + console.log("=== OmniVault"); + const omniVaultFactory = await ethers.getContractFactory("InceptionERC20OmniVault", owner); + omniVaultOpt = await upgrades.deployProxy(omniVaultFactory, ["omniVault", operator.address, iTokenOpt.address, adapterFrax.address], { + initializer: "initialize", + }); + omniVaultOpt.address = await omniVaultOpt.getAddress(); + await omniVaultOpt.setRatioFeed(ratioFeedL2Opt.address); + await omniVaultOpt.setTreasuryAddress(treasury.address); + await iTokenOpt.setVault(omniVaultOpt.address); + + await omniVault.setTargetFlashCapacity(TARGET); + await omniVaultOpt.setTargetFlashCapacity(TARGET); + + // await rebalancer.setUpdateable(true); + }); + + it("Sync ratio from ETH to FRAX", async function () { + const l1Ratio = await underlyingToken.ratio(); + console.log("L1 ratio:", l1Ratio.format()); + await ratioFeedL2.updateRatioBatch([iToken.address], [l1Ratio]); + await ratioFeedL2Opt.updateRatioBatch([iTokenOpt.address], [l1Ratio]); + console.log("Frax ratio:", (await omniVault.ratio()).format()); + }); + + it("Stake on FRAX", async function () { + await omniVault.connect(signer1).deposit(TARGET + e18, signer1); + await omniVault.connect(signer2).deposit(e18, signer2); + expect(await omniVault.getFreeBalance()).to.be.eq(e18 + e18); + console.log(await iToken.totalSupply()); + console.log(await omniVault.getFlashCapacity()); + console.log(await omniVault.getFreeBalance()); + console.log(await ethers.provider.getBalance(omniVault.address)); + }); + + let mintShares = 0n; + it("Send info from FRAX", async function () { + const totalSupply = await iToken.totalSupply(); + mintShares += totalSupply; + const ethBalance = await omniVault.getFlashCapacity(); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + const timestamp = (await time.latest()) + 1; + const tx = await omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee }); + + const txData = await rebalancer.getTransactionData(FRAX_ID); + await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(FRAX_ID, timestamp, ethBalance, totalSupply); + expect(txData.inceptionTokenSupply).to.be.eq(totalSupply); + expect(txData.underlyingBalance).to.be.eq(ethBalance); + expect(txData.timestamp).to.be.eq(timestamp); + }); + + it("Add OPT and send data from OPT", async function () { + await rebalancer.connect(owner).addChainId(OPT_ID); + // await adapterOpt.connect(owner).setTargetReceiver(omniVaultOpt.address); + + const totalSupply = await iTokenOpt.totalSupply(); + mintShares += totalSupply; + const ethBalance = await omniVaultOpt.getFlashCapacity(); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVaultOpt.quoteSendAssetsInfoToL1(options); + const timestamp = (await time.latest()) + 1; + const tx = await omniVaultOpt.connect(operator).sendAssetsInfoToL1(options, { value: fee }); + + const txData = await rebalancer.getTransactionData(OPT_ID); + await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(OPT_ID, timestamp, ethBalance, totalSupply); + expect(txData.inceptionTokenBalance).to.be.eq(totalSupply); + expect(txData.ethBalance).to.be.eq(ethBalance); + expect(txData.timestamp).to.be.eq(timestamp); + }); + + it("Update data and mint", async function () { + const inEthSupplyBefore = await underlyingToken.totalSupply(); + + const tx = await rebalancer.connect(signer1).updateTreasuryData(); + + const inEthSupplyAfter = await underlyingToken.totalSupply(); + await expect(tx).to.emit(rebalancer, "SyncedSupplyChanged").withArgs(0n, mintShares); + await expect(tx).to.emit(rebalancer, "TreasuryUpdateMint").withArgs(mintShares); + await expect(tx).changeTokenBalance(underlyingToken, lockboxAddress, mintShares); + expect(inEthSupplyAfter - inEthSupplyBefore).to.be.eq(mintShares); + }); + + it("updateTreasuryData reverts when there are no changes", async function () { + await expect(rebalancer.connect(signer1).updateTreasuryData()).to.be.revertedWithCustomError(rebalancer, "NoRebalancingRequired"); + }); + + it("Send free balance from ARB", async function () { + const inEthSupplyBefore = await underlyingToken.totalSupply(); + + const freeBalance = await omniVault.getFreeBalance(); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, freeBalance).toHex().toString(); + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + const tx = await omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee }); + + const inEthSupplyAfter = await underlyingToken.totalSupply(); + console.log(await omniVault.getFlashCapacity()); + console.log(await omniVault.getFreeBalance()); + console.log(await ethers.provider.getBalance(omniVault.address)); + + await expect(tx).changeEtherBalance(rebalancer, freeBalance); + expect(inEthSupplyAfter).to.be.eq(inEthSupplyBefore); + }); + + /** + * Stake() only transfers Eth to inceptionVault without minting new shares, + * as the number of shares managed separately by updateTreasuryData() + */ + it("Stake eth by rebalancer", async function () { + const inEthSupplyBefore = await underlyingToken.totalSupply(); + const pendingBefore = await inceptionVault.getPending(); + + const amount = await ethers.provider.getBalance(rebalancer.address); + const tx = await rebalancer.connect(operator).stake(amount); + + const pendingAfter = await inceptionVault.getPending(); + + await expect(tx).changeEtherBalance(inceptionVault, amount); + const inEthSupplyAfter = await underlyingToken.totalSupply(); + expect(inEthSupplyAfter).to.be.eq(inEthSupplyBefore); + expect(pendingAfter - pendingBefore).to.be.eq(amount); + }); + + let burntShares; + it("Flash withdraw on ARB", async function () { + const iTokenSupplyBefore = await iToken.totalSupply(); + + burntShares = await omniVault.convertToShares(await omniVault.getFlashCapacity()); + await omniVault.connect(signer2).flashWithdraw(burntShares, signer2.address); + + console.log(await omniVault.getFlashCapacity()); + console.log(await omniVault.getFreeBalance()); + console.log(await ethers.provider.getBalance(omniVault.address)); + + const iTokenSupplyAfter = await iToken.totalSupply(); + expect(iTokenSupplyBefore - iTokenSupplyAfter).to.be.eq(burntShares); + }); + + it("Update data and burn", async function () { + mintShares = await iToken.totalSupply(); + const ethBalance = await omniVault.getFlashCapacity(); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + const timestamp = (await time.latest()) + 1; + let tx = await omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee }); + await expect(tx).to.emit(omniVault, "MessageToL1Sent").withArgs(mintShares, ethBalance); + + const txData = await rebalancer.getTransactionData(ARB_ID); + await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(ARB_ID, timestamp, ethBalance, mintShares); + expect(txData.inceptionTokenBalance).to.be.eq(mintShares); + expect(txData.ethBalance).to.be.eq(ethBalance); + expect(txData.timestamp).to.be.eq(timestamp); + + const inEthSupplyBefore = await underlyingToken.totalSupply(); + const syncBefore = await rebalancer.syncedSupply(); + tx = await rebalancer.connect(signer1).updateTreasuryData(); + + const inEthSupplyAfter = await underlyingToken.totalSupply(); + await expect(tx) + .to.emit(rebalancer, "SyncedSupplyChanged") + .withArgs(syncBefore, syncBefore - burntShares); + await expect(tx).to.emit(rebalancer, "TreasuryUpdateBurn").withArgs(burntShares); + await expect(tx).changeTokenBalance(underlyingToken, lockboxAddress, -burntShares); + expect(inEthSupplyBefore - inEthSupplyAfter).to.be.eq(burntShares); + }); + + it("Deposit on ARB", async function () { + const depositBonus = await omniVault.depositBonusAmount(); + const amount = e18 * 2n; + const expectedShars = await omniVault.convertToShares(amount + depositBonus); + const balanceBefore = await iToken.balanceOf(signer2); + + let tx = await omniVault.connect(signer2).deposit(signer2, { value: amount }); + + const balanceAfter = await iToken.balanceOf(signer2); + + expect(balanceAfter - balanceBefore).to.be.closeTo(expectedShars, 1n); + mintShares = balanceAfter - balanceBefore; + console.log(await omniVault.getFlashCapacity()); + console.log(await omniVault.getFreeBalance()); + console.log(await ethers.provider.getBalance(omniVault.address)); + }); + + it("Send free balance from ARB", async function () { + const freeBalance = await omniVault.getFreeBalance(); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, freeBalance).toHex().toString(); + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + let tx = await omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee }); + + await expect(tx).changeEtherBalance(rebalancer, freeBalance); + console.log(await omniVault.getFlashCapacity()); + console.log(await omniVault.getFreeBalance()); + console.log(await ethers.provider.getBalance(omniVault.address)); + + const inEthSupplyBefore = await underlyingToken.totalSupply(); + const amount = await ethers.provider.getBalance(rebalancer.address); + tx = await rebalancer.connect(operator).stake(amount); + + await expect(tx).changeEtherBalance(inceptionVault, amount); + const inEthSupplyAfter = await underlyingToken.totalSupply(); + expect(inEthSupplyAfter).to.be.eq(inEthSupplyBefore); + }); + + it("Send info and update data", async function () { + const totalSupplyArb = await iToken.totalSupply(); + const ethBalance = await omniVault.getFlashCapacity(); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + const timestamp = (await time.latest()) + 1; + let tx = await omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee }); + + const txData = await rebalancer.getTransactionData(ARB_ID); + await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(ARB_ID, timestamp, ethBalance, totalSupplyArb); + expect(txData.inceptionTokenBalance).to.be.eq(totalSupplyArb); + expect(txData.ethBalance).to.be.eq(ethBalance); + expect(txData.timestamp).to.be.eq(timestamp); + + const inEthSupplyBefore = await underlyingToken.totalSupply(); + const syncBefore = await rebalancer.syncedSupply(); + tx = await rebalancer.connect(signer1).updateTreasuryData(); + + const inEthSupplyAfter = await underlyingToken.totalSupply(); + const syncAfter = await rebalancer.syncedSupply(); + await expect(tx) + .to.emit(rebalancer, "SyncedSupplyChanged") + .withArgs(syncBefore, syncBefore + mintShares); + await expect(tx).to.emit(rebalancer, "TreasuryUpdateMint").withArgs(mintShares); + await expect(tx).changeTokenBalance(underlyingToken, lockboxAddress, mintShares); + expect(inEthSupplyAfter - inEthSupplyBefore).to.be.eq(mintShares); + expect(syncAfter - syncBefore).to.be.eq(mintShares); + }); + + it("Stake to restaking pool", async function () { + const amount = await inceptionVault.availableToStake(); + const expectedShares = await underlyingToken.convertToShares(amount); + const totalSupplyBefore = await underlyingToken.totalSupply(); + const pendingBefore = await inceptionVault.getPending(); + + let tx = await inceptionVault.connect(signer1)["stake()"]({ value: amount }); + + const totalSupplyAfter = await underlyingToken.totalSupply(); + const pendingAfter = await inceptionVault.getPending(); + + await expect(tx).changeEtherBalance(inceptionVault, amount); + await expect(tx).changeTokenBalance(underlyingToken, signer1, expectedShares); + expect(totalSupplyAfter - totalSupplyBefore).to.be.eq(expectedShares); + expect(pendingAfter - pendingBefore).to.be.eq(amount); + }); + }); + return; + describe("Rebalancer", function () { + describe("Deployments checks", function () { + let NativeRebalancer; + before(async function () { + await snapshot.restore(); + NativeRebalancer = await ethers.getContractFactory("NativeRebalancer"); + }); + + it("MULTIPLIER", async function () { + expect(await rebalancer.MULTIPLIER()).to.be.eq(e18); + }); + + it("Inception token address", async function () { + expect(await rebalancer.inceptionToken()).to.be.eq(underlyingToken.address); + }); + + it("Lockbox address", async function () { + expect(await rebalancer.lockboxAddress()).to.be.eq(lockboxAddress); + }); + + it("Restaking pool address", async function () { + expect(await rebalancer.liqPool()).to.be.eq(inceptionVault.address); + }); + + it("Default adapter", async function () { + expect(await rebalancer.defaultAdapter()).to.be.eq(adapterL1.address); + }); + + it("Ratio feed address", async function () { + expect(await rebalancer.ratioFeed()).to.be.eq(ratioFeedL1.address); + }); + + it("Operator address", async function () { + expect(await rebalancer.operator()).to.be.eq(operator.address); + }); + + it("Owner", async function () { + expect(await rebalancer.owner()).to.be.eq(owner.address); + }); + + const args = [ + { + name: "invalid iToken address", + args: () => [ + ethers.ZeroAddress, + lockboxAddress, + inceptionVault.address, + adapterL1.address, + ratioFeedL1.address, + operator.address, + ], + }, + { + name: "invalid lockbox address", + args: () => [ + iToken.address, + ethers.ZeroAddress, + inceptionVault.address, + adapterL1.address, + ratioFeedL1.address, + operator.address, + ], + }, + { + name: "invalid restaking pool address", + args: () => [iToken.address, lockboxAddress, ethers.ZeroAddress, adapterL1.address, ratioFeedL1.address, operator.address], + }, + { + name: "invalid adapter address", + args: () => [iToken.address, lockboxAddress, inceptionVault.address, ethers.ZeroAddress, ratioFeedL1.address, operator.address], + }, + { + name: "invalid ratio feed address", + args: () => [iToken.address, lockboxAddress, inceptionVault.address, adapterL1.address, ethers.ZeroAddress, operator.address], + }, + { + name: "invalid operator address", + args: () => [iToken.address, lockboxAddress, inceptionVault.address, adapterL1.address, ratioFeedL1.address, ethers.ZeroAddress], + }, + ]; + + args.forEach(function (arg) { + it(`NativeRebalancer: ${arg.name}`, async function () { + const args = arg.args(); + await expect(upgrades.deployProxy(NativeRebalancer, args)).to.be.reverted; + }); + }); + + it("Synced Supply", async function () { + expect(await rebalancer.syncedSupply()).to.be.eq(0n); + }); + }); + + describe("Getters and setters", function () { + beforeEach(async function () { + await snapshot.restore(); + await rebalancer.connect(owner).addChainId(OPT_ID); + }); + + const setters = [ + { + name: "default adapter address", + setter: "setDefaultAdapter", + getter: "defaultAdapter", + event: "DefaultBridgeChanged", + }, + { + name: "Inception token address", + setter: "setInceptionToken", + getter: "inceptionToken", + event: "InceptionTokenChanged", + }, + { + name: "restaking pool address", + setter: "setLiqPool", + getter: "liqPool", + event: "LiqPoolChanged", + }, + { + name: "lockbox address", + setter: "setLockboxAddress", + getter: "lockboxAddress", + event: "LockboxChanged", + }, + { + name: "operator address", + setter: "setOperator", + getter: "operator", + event: "OperatorChanged", + }, + ]; + + setters.forEach(function (arg) { + it(`Set new ${arg.name}`, async function () { + const prevValue = await rebalancer[arg.getter](); + const newValue = ethers.Wallet.createRandom().address; + await expect(rebalancer[arg.setter](newValue)).to.emit(rebalancer, arg.event).withArgs(prevValue, newValue); + + expect(await rebalancer[arg.getter]()).to.be.eq(newValue); + }); + + it(`Reverts: ${arg.setter} when called by not an owner`, async function () { + const newValue = ethers.Wallet.createRandom().address; + await expect(rebalancer.connect(signer1)[arg.setter](newValue)) + .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") + .withArgs(signer1.address); + }); + + it(`Reverts: ${arg.setter} new value is 0 address`, async function () { + const newValue = ethers.ZeroAddress; + await expect(rebalancer[arg.setter](newValue)).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); + }); + }); + + it("addChainId owner can", async function () { + let chain = randomBI(4); + await expect(rebalancer.connect(owner).addChainId(chain)).to.emit(rebalancer, "ChainIdAdded").withArgs(chain); + expect(await rebalancer.chainIds(2n)).to.be.eq(chain); + }); + + it("addChainId skips if the chain has been added already", async function () { + let chain = randomBI(4); + await rebalancer.connect(owner).addChainId(chain); + await expect(rebalancer.connect(owner).addChainId(chain)).to.not.emit(rebalancer, "ChainIdAdded"); + }); + + it("addChainId reverts when called by not an owner", async function () { + await expect(rebalancer.connect(signer1).addChainId(randomBI(4))) + .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") + .withArgs(signer1.address); + }); + + it("deleteChainId operator can delete the 1st chain in the list", async function () { + const chain = ARB_ID; + await expect(rebalancer.connect(owner).deleteChainId(chain)).to.emit(rebalancer, "ChainIdDeleted").withArgs(chain, 0n); + expect(await rebalancer.chainIds(0n)).to.be.eq(OPT_ID); + await expect(rebalancer.chainIds(1n)).to.be.reverted; + }); + + it("deleteChainId owner can delete the last chain in the list", async function () { + const chain = OPT_ID; + await expect(rebalancer.connect(owner).deleteChainId(chain)).to.emit(rebalancer, "ChainIdDeleted").withArgs(chain, 1n); + expect(await rebalancer.chainIds(0n)).to.be.eq(ARB_ID); + await expect(rebalancer.chainIds(1n)).to.be.reverted; + }); + + it("deleteChainId reverts when chain does not exist", async function () { + let chain = randomBI(4); + await expect(rebalancer.connect(owner).deleteChainId(chain)) + .to.be.revertedWithCustomError(rebalancer, "ChainIdNotFound") + .withArgs(chain); + }); + + it("addChainId reverts when called by not an owner", async function () { + await expect(rebalancer.connect(signer1).deleteChainId(ARB_ID)) + .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") + .withArgs(signer1.address); + }); + + it("addAdapter for a new chain", async function () { + let adapter = ethers.Wallet.createRandom().address; + let chain = randomBI(4); + await expect(rebalancer.connect(owner).addAdapter(chain, adapter)) + .to.emit(rebalancer, "AdapterAdded") + .withArgs(chain, adapter) + .and.to.emit(rebalancer, "ChainIdAdded") + .withArgs(chain); + + const [adapterAddress, isDefault] = await rebalancer.getAdapter(chain); + expect(adapterAddress).to.be.eq(adapter); + expect(isDefault).to.be.false; + }); + + it("addAdapter for existing chain", async function () { + let adapter = ethers.Wallet.createRandom().address; + let chain = ARB_ID; + await expect(rebalancer.connect(owner).addAdapter(chain, adapter)) + .to.emit(rebalancer, "AdapterAdded") + .withArgs(chain, adapter) + .and.to.not.emit(rebalancer, "ChainIdAdded"); + + const [adapterAddress, isDefault] = await rebalancer.getAdapter(chain); + expect(adapterAddress).to.be.eq(adapter); + expect(isDefault).to.be.false; + }); + + it("addAdapter reverts when adapter address is 0", async function () { + let adapter = ethers.ZeroAddress; + let chain = randomBI(4); + await expect(rebalancer.connect(owner).addAdapter(chain, adapter)).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); + }); + + it("addAdapter reverts when called by not an owner", async function () { + let adapter = ethers.Wallet.createRandom().address; + let chain = randomBI(4); + await expect(rebalancer.connect(signer1).addAdapter(chain, adapter)) + .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") + .withArgs(signer1.address); + }); + + it("getAdapter returns default adapter if no other set", async function () { + const [adapterAddress, isDefault] = await rebalancer.getAdapter(ARB_ID); + expect(adapterAddress).to.be.eq(adapterL1.address); + expect(isDefault).to.be.true; + }); + + it("getTransactionData when there is no data for the chain", async function () { + let chain = randomBI(4); + const txData = await rebalancer.getTransactionData(chain); + expect(txData.timestamp).to.be.eq(0n); + expect(txData.ethBalance).to.be.eq(0n); + expect(txData.inceptionTokenBalance).to.be.eq(0n); + }); + + it("Enable and disable update", async function () { + expect(await rebalancer.updateable()).to.be.false; + + await expect(rebalancer.setUpdateable(true)).to.emit(rebalancer, "UpdateableChanged").withArgs(false, true); + expect(await rebalancer.updateable()).to.be.true; + + await expect(rebalancer.setUpdateable(false)).to.emit(rebalancer, "UpdateableChanged").withArgs(true, false); + expect(await rebalancer.updateable()).to.be.false; + }); + + it("setUpdateable reverts when called by not an owner", async function () { + await expect(rebalancer.connect(signer1).setUpdateable(true)) + .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") + .withArgs(signer1.address); + }); + + it("setSyncedSupply owner can", async function () { + const prevValue = await rebalancer.syncedSupply(); + const newValue = randomBI(18); + await expect(rebalancer.setSyncedSupply(newValue)).to.emit(rebalancer, "SyncedSupplyChanged").withArgs(prevValue, newValue); + + expect(await rebalancer.syncedSupply()).to.be.eq(newValue); + }); + + it("setSyncedSupply reverts when called by not an owner", async function () { + const newValue = randomBI(18); + await expect(rebalancer.connect(signer1).setSyncedSupply(newValue)) + .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") + .withArgs(signer1.address); + }); + }); + + describe("Update data", function () { + let currentArbAmount = 0n; + let currentArbSupply = 0n; + let currentOptAmount = 0n; + let currentOptSupply = 0n; + let initialLockBoxBalance; + + before(async function () { + await snapshot.restore(); + await rebalancer.connect(owner).addChainId(OPT_ID); + initialLockBoxBalance = await underlyingToken.balanceOf(lockboxAddress); + await rebalancer.setUpdateable(true); + }); + + it("Reverts when there is no data for one of the chains", async function () { + //Call when there is no data at all + await expect(rebalancer.updateTreasuryData()).to.revertedWithCustomError(rebalancer, "MissingOneOrMoreL2Transactions"); + + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp; + const balance = randomBI(19); + const totalSupply = randomBI(19); + const message = encodePayload(timestamp, balance, totalSupply); + + //Send data for the 1 chain of 2 + const fees = await adapterFrax.quote(message, options); + await adapterFrax.sendDataL1(message, options, { value: fees }); + await expect(rebalancer.updateTreasuryData()) + .to.revertedWithCustomError(rebalancer, "MissingOneOrMoreL2Transactions") + .withArgs(OPT_ID); + }); + + const args = [ + { + name: "Increase amount and supply ARB and OPT", + arb: { + l2BalanceDiff: () => ethers.parseEther("1.5"), + l2TotalSupplyDiff: () => e18, + }, + opt: { + l2BalanceDiff: () => ethers.parseEther("1.5"), + l2TotalSupplyDiff: () => e18, + }, + }, + { + name: "Increase only underlyingToken supply ARB", + arb: { + l2BalanceDiff: () => e18, + l2TotalSupplyDiff: () => ethers.parseEther("1.5"), + }, + }, + { + name: "Increase only underlyingToken supply OPT", + opt: { + l2BalanceDiff: () => e18, + l2TotalSupplyDiff: () => ethers.parseEther("1.5"), + }, + }, + { + name: "Decrease amount and total supply ARB only", + arb: { + l2BalanceDiff: () => -ethers.parseEther("0.5"), + l2TotalSupplyDiff: () => -ethers.parseEther("0.5"), + }, + }, + { + name: "Decrease amount and total supply OPT only", + opt: { + l2BalanceDiff: () => -ethers.parseEther("0.5"), + l2TotalSupplyDiff: () => -ethers.parseEther("0.5"), + }, + }, + { + name: "Decrease only total supply ARB abd OPT", + arb: { + l2BalanceDiff: () => 0n, + l2TotalSupplyDiff: () => -e18, + }, + opt: { + l2BalanceDiff: () => 0n, + l2TotalSupplyDiff: () => -e18, + }, + }, + { + name: "Increase for ARB and decrease for OPT for the same amount", + arb: { + l2BalanceDiff: () => e18, + l2TotalSupplyDiff: () => e18, + }, + opt: { + l2BalanceDiff: () => -ethers.parseEther("0.5"), + l2TotalSupplyDiff: () => -ethers.parseEther("0.5"), + }, + }, + { + name: "Decrease to 0 ARB", + arb: { + l2BalanceDiff: () => -currentArbSupply, + l2TotalSupplyDiff: () => -currentArbSupply, + }, + }, + { + name: "Decrease to 0 OPT", + opt: { + l2BalanceDiff: () => -currentOptSupply, + l2TotalSupplyDiff: () => -currentOptSupply, + }, + }, + ]; + + args.forEach(function (arg) { + it(`updateTreasuryData: ${arg.name}`, async () => { + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp; + let expectedTotalSupplyDiff = 0n; + if (arg.arb) { + expectedTotalSupplyDiff += arg.arb.l2TotalSupplyDiff(); + currentArbAmount += arg.arb.l2BalanceDiff(); + currentArbSupply += arg.arb.l2TotalSupplyDiff(); + await adapterFrax.sendData(timestamp, currentArbAmount, currentArbSupply); + } + if (arg.opt) { + expectedTotalSupplyDiff += arg.opt.l2TotalSupplyDiff(); + currentOptAmount += arg.opt.l2BalanceDiff(); + currentOptSupply += arg.opt.l2TotalSupplyDiff(); + await adapterOpt.sendData(timestamp, currentOptAmount, currentOptSupply); + } + const totalSupplyBefore = await underlyingToken.totalSupply(); + const lockboxBalanceBefore = await underlyingToken.balanceOf(lockboxAddress); + const syncedSupplyBefore = await rebalancer.syncedSupply(); + + let tx = await rebalancer.updateTreasuryData(); + await expect(tx) + .to.emit(rebalancer, "SyncedSupplyChanged") + .withArgs(syncedSupplyBefore, syncedSupplyBefore + expectedTotalSupplyDiff); + + const totalSupplyAfter = await underlyingToken.totalSupply(); + const lockboxBalanceAfter = await underlyingToken.balanceOf(lockboxAddress); + const syncedSupplyAfter = await rebalancer.syncedSupply(); + + console.log("Total supply diff:", (totalSupplyAfter - totalSupplyBefore).format()); + console.log("Lockbox balance diff:", (lockboxBalanceAfter - lockboxBalanceBefore).format()); + console.log("Synced supply diff:", (syncedSupplyAfter - syncedSupplyBefore).format()); + + expect(totalSupplyAfter - totalSupplyBefore).to.be.eq(expectedTotalSupplyDiff); + expect(lockboxBalanceAfter - lockboxBalanceBefore).to.be.eq(expectedTotalSupplyDiff); + expect(syncedSupplyAfter - syncedSupplyBefore).to.be.eq(expectedTotalSupplyDiff); + if (expectedTotalSupplyDiff > 0n) { + console.log("Mint"); + await expect(tx).emit(rebalancer, "TreasuryUpdateMint").withArgs(expectedTotalSupplyDiff); + } + if (expectedTotalSupplyDiff == 0n) { + console.log("No mint, no burn"); + await expect(tx).to.not.emit(rebalancer, "TreasuryUpdateMint").and.to.not.emit(rebalancer, "TreasuryUpdateBurn"); + } + if (expectedTotalSupplyDiff < 0n) { + console.log("Burn"); + await expect(tx).emit(rebalancer, "TreasuryUpdateBurn").withArgs(-expectedTotalSupplyDiff); + } + }); + }); + + it("Lockbox balance is the ame after all", async function () { + expect(await underlyingToken.balanceOf(lockboxAddress)).to.be.eq(initialLockBoxBalance); + }); + + it("updateTreasuryData reverts when total supply is the same", async function () { + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp; + await adapterFrax.sendData(timestamp, e18, e18); + await adapterOpt.sendData(timestamp, e18, e18); + await rebalancer.updateTreasuryData(); + + await expect(rebalancer.updateTreasuryData()).to.be.revertedWithCustomError(rebalancer, "NoRebalancingRequired"); + }); + + it("Reverts when updateable is false", async function () { + await snapshot.restore(); + await expect(rebalancer.updateTreasuryData()).to.revertedWithCustomError(rebalancer, "TreasuryUpdatesPaused"); + }); + + it("underlyingToken leftover on rebalancer will be transferred to the lockbox", async function () { + await snapshot.restore(); + await rebalancer.setUpdateable(true); + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp; + await inceptionVault.connect(signer1)["stake()"]({ value: 2n * e18 }); + + const totalSupplyBefore = await underlyingToken.totalSupply(); + const lockboxBalanceBefore = await underlyingToken.balanceOf(lockboxAddress); + //Report L2 info + const inEthChange = e18; + const supplyChange = e18; + await adapterFrax.sendData(timestamp, inEthChange, supplyChange); + await adapterOpt.sendData(timestamp, inEthChange, supplyChange); + + const amount = randomBI(17); + await underlyingToken.connect(signer1).transfer(rebalancer.address, amount); + + await expect(rebalancer.updateTreasuryData()).to.emit(rebalancer, "InceptionTokenDepositedToLockbox").withArgs(amount); + console.log(`Total supply: ${(await underlyingToken.totalSupply()).format()}`); + + const totalSupplyAfter = await underlyingToken.totalSupply(); + const lockboxBalanceAfter = await underlyingToken.balanceOf(lockboxAddress); + // expect(totalSupplyAfter - totalSupplyBefore).to.be.closeTo(supplyChange * 2n, 1n); + expect(totalSupplyAfter - totalSupplyBefore).to.be.closeTo(supplyChange, 1n); + // expect(lockboxBalanceAfter - lockboxBalanceBefore).to.be.closeTo(supplyChange * 2n + amount, 1n); + expect(lockboxBalanceAfter - lockboxBalanceBefore).to.be.closeTo(supplyChange + amount, 1n); + }); + }); + + describe("Stake", function () { + beforeEach(async function () { + await snapshot.restore(); + await rebalancer.connect(owner).addChainId(OPT_ID); + }); + + const args = [ + { + name: "Part of the balance", + balance: async () => await inceptionVault.availableToStake(), + amount: async (amount) => amount / 2n, + }, + { + name: "All balance", + balance: async () => await inceptionVault.availableToStake(), + amount: async (amount) => amount, + }, + { + name: "Restaking pool min amount", + balance: async () => await inceptionVault.availableToStake(), + amount: async () => await inceptionVault.getMinStake(), + }, + { + name: "Less than restaking pool min amount", + balance: async () => await inceptionVault.availableToStake(), + amount: async () => (await inceptionVault.getMinStake()) - 1n, + }, + ]; + + args.forEach(function (arg) { + it(`${arg.name}`, async function () { + const balance = await arg.balance(); + await signer1.sendTransaction({ value: balance, to: rebalancer.address }); + + const amount = await arg.amount(balance); + const shares = await underlyingToken.convertToShares(amount); + const lockboxInEthBalanceBefore = await underlyingToken.balanceOf(lockboxAddress); + + const tx = await rebalancer.connect(operator).stake(amount); + await expect(tx).emit(inceptionVault, "Received").withArgs(rebalancer.address, amount); + + const lockboxInEthBalanceAfter = await underlyingToken.balanceOf(lockboxAddress); + console.log("Signer eth balance after: ", await ethers.provider.getBalance(signer1.address)); + console.log("Restaking pool eth balance: ", await ethers.provider.getBalance(inceptionVault.address)); + console.log("lockbox underlyingToken balance: ", await underlyingToken.balanceOf(lockboxAddress)); + + //No new shares minted + expect(lockboxInEthBalanceAfter).to.be.eq(lockboxInEthBalanceBefore); + expect(await underlyingToken.balanceOf(rebalancer.address)).to.be.eq(0n); + }); + }); + + it("Reverts when amount > available to stake from restaking pool", async function () { + const amount = (await inceptionVault.availableToStake()) + 1n; + await signer1.sendTransaction({ value: amount, to: rebalancer.address }); + await expect(rebalancer.connect(operator).stake(amount)).to.revertedWithCustomError(rebalancer, "StakeAmountExceedsMaxTVL"); + }); + + it("Reverts when amount > eth balance", async function () { + const amount = (await inceptionVault.availableToStake()) / 2n; + await signer1.sendTransaction({ value: amount, to: rebalancer.address }); + await expect(rebalancer.connect(operator).stake(amount + 1n)).to.revertedWithCustomError( + rebalancer, + "StakeAmountExceedsEthBalance" + ); + }); + + it.skip("Reverts when amount < restaking pool min stake", async function () { + const amount = (await inceptionVault.getMinStake()) - 1n; + await signer1.sendTransaction({ value: amount, to: rebalancer.address }); + await expect(rebalancer.connect(operator).stake(amount)).to.revertedWithCustomError(inceptionVault, "PoolStakeAmLessThanMin"); + }); + + it("Reverts when called by not an operator", async function () { + const amount = (await inceptionVault.availableToStake()) / 2n; + await signer1.sendTransaction({ value: amount, to: rebalancer.address }); + await expect(rebalancer.connect(signer1).stake(amount)).to.revertedWithCustomError(rebalancer, "OnlyOperator"); + }); + }); + + describe("sendEthToL2", function () { + beforeEach(async function () { + await snapshot.restore(); + const balance = await inceptionVault.availableToStake(); + await signer1.sendTransaction({ value: balance, to: rebalancer.address }); + }); + + const args = [ + { + name: "Part of the balance to ARB", + amount: async (amount) => amount / 2n, + chainId: ARB_ID, + adapter: () => adapterFrax, + sender: () => operator, + }, + { + name: "Part of the balance to ARB by owner", + amount: async (amount) => amount / 2n, + chainId: ARB_ID, + adapter: () => adapterFrax, + sender: () => owner, + }, + { + name: "Part of the balance to OPT", + amount: async (amount) => amount / 2n, + chainId: OPT_ID, + adapter: () => adapterOpt, + sender: () => operator, + }, + { + name: "All balance to ARB", + amount: async (amount) => amount, + chainId: ARB_ID, + adapter: () => adapterFrax, + sender: () => operator, + }, + { + name: "All balance to OPT", + amount: async (amount) => amount, + chainId: OPT_ID, + adapter: () => adapterOpt, + sender: () => operator, + }, + ]; + + args.forEach(function (arg) { + it(`${arg.name}`, async function () { + const balance = await ethers.provider.getBalance(rebalancer.address); + const amount = await arg.amount(balance); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await rebalancer.quoteSendEthToL2(arg.chainId, options); + const tx = await rebalancer.connect(arg.sender()).sendEthToL2(arg.chainId, amount, options, { value: fees }); + await expect(tx).to.emit(adapterL1, "CrossChainMessageSent"); + await expect(tx).to.changeEtherBalance(omniVault, amount); + await expect(tx).to.changeEtherBalance(rebalancer, -amount); + await expect(tx).to.changeEtherBalance(arg.sender(), -fees, { includeFee: false }); + }); + }); + + it("Reverts when amount > eth balance", async function () { + const amount = (await ethers.provider.getBalance(rebalancer.address)) + 1n; + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await rebalancer.quoteSendEthToL2(ARB_ID, options); + await expect(rebalancer.connect(operator).sendEthToL2(ARB_ID, amount, options, { value: fees })).to.revertedWithCustomError( + rebalancer, + "SendAmountExceedsEthBalance" + ); + }); + + it("Reverts when called by not an operator", async function () { + const amount = await ethers.provider.getBalance(rebalancer.address); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await rebalancer.quoteSendEthToL2(ARB_ID, options); + await expect(rebalancer.connect(signer1).sendEthToL2(ARB_ID, amount, options, { value: fees })).to.revertedWithCustomError( + rebalancer, + "OnlyOperator" + ); + }); + + it("Reverts when there is no adapter for the chain", async function () { + const amount = await ethers.provider.getBalance(rebalancer.address); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await rebalancer.quoteSendEthToL2(ARB_ID, options); + await expect(rebalancer.connect(operator).sendEthToL2(randomBI(8), amount, options, { value: fees })).to.revertedWithCustomError( + adapterFrax, + "NoPeer" + ); + }); + }); + + describe("handleL2Info", function () { + it("handleL2Info reverts when called by not an adapter", async function () { + const block = await ethers.provider.getBlock("latest"); + const chainId = ARB_ID; + const timestamp = block.timestamp; + const balance = e18; + const totalSupply = e18; + + await expect(rebalancer.connect(owner).handleL2Info(chainId, timestamp, balance, totalSupply)).to.be.revertedWithCustomError( + rebalancer, + "OnlyAdapter" + ); + }); + }); + }); + + describe("Adapters", function () { + before(async function () { + await snapshot.restore(); + }); + + describe("Deployment", function () { + let LZCrossChainAdapterL1; + let LZCrossChainAdapterL2; + before(async function () { + LZCrossChainAdapterL1 = await ethers.getContractFactory("LZCrossChainAdapterL1"); + LZCrossChainAdapterL2 = await ethers.getContractFactory("LZCrossChainAdapterL2"); + }); + + const argsL1 = [ + { + name: "invalid endpoint address", + args: () => [ethers.ZeroAddress, owner.address, eIds, chainIds], + }, + { + name: "invalid delegator address", + args: () => [ethEndpoint.address, ethers.ZeroAddress, eIds, chainIds], + }, + { + name: "Id arrays lengths do not match", + args: () => [ethEndpoint.address, owner.address, [ARB_EID], [ARB_ID, OPT_ID]], + }, + ]; + + argsL1.forEach(function (arg) { + it(`LZCrossChainAdapterL1: ${arg.name}`, async function () { + const args = arg.args(); + await expect(upgrades.deployProxy(LZCrossChainAdapterL1, args)).to.be.reverted; + }); + }); + + const argsL2 = [ + { + name: "invalid endpoint address", + args: () => [ethers.ZeroAddress, owner.address, ETH_ID, eIds, chainIds], + }, + { + name: "invalid delegator address", + args: () => [ethEndpoint.address, ethers.ZeroAddress, ETH_ID, eIds, chainIds], + }, + { + name: "Id arrays lengths do not match", + args: () => [ethEndpoint.address, owner.address, ETH_ID, [ARB_EID], [ARB_ID, OPT_ID]], + }, + ]; + + argsL2.forEach(function (arg) { + it(`LZCrossChainAdapterL2: ${arg.name}`, async function () { + const args = arg.args(); + await expect(upgrades.deployProxy(LZCrossChainAdapterL2, args)).to.be.reverted; + }); + }); + }); + + //=== Getters and setters + const adapters = [ + { + name: "layer1", + adapter: () => adapterL1, + endpoint: () => ethEndpoint, + }, + { + name: "layer2", + adapter: () => adapterFrax, + endpoint: () => arbEndpoint, + }, + ]; + adapters.forEach(function (adapterArg) { + let adapter; + describe(`Getters and setters ${adapterArg.name}`, function () { + beforeEach(async function () { + await snapshot.restore(); + adapter = adapterArg.adapter(); + }); + + const setters = [ + { + name: "receiver address", + setter: "setTargetReceiver", + getter: "targetReceiver", + event: "TargetReceiverChanged", + }, + ]; + + setters.forEach(function (setterArg) { + it(`Set new ${setterArg.name}`, async function () { + const prevValue = await adapter[setterArg.getter](); + const newValue = ethers.Wallet.createRandom().address; + + await expect(adapter[setterArg.setter](newValue)).to.emit(adapter, setterArg.event).withArgs(prevValue, newValue); + expect(await adapter[setterArg.getter]()).to.be.eq(newValue); + }); + + it(`Reverts: ${setterArg.setter} when called by not an owner`, async function () { + const newValue = ethers.Wallet.createRandom().address; + await expect(adapter.connect(signer1)[setterArg.setter](newValue)).to.be.revertedWithCustomError( + adapter, + "OwnableUnauthorizedAccount" + ); + }); + + it(`Reverts: ${setterArg.setter} new value is 0 address`, async function () { + const newValue = ethers.ZeroAddress; + await expect(adapter[setterArg.setter](newValue)).to.be.revertedWithCustomError(adapter, "SettingZeroAddress"); + }); + }); + + it("setPeer sets target address by chain", async function () { + const eid = randomBI(8); + const target = ethers.Wallet.createRandom(); + const peer = ethers.zeroPadValue(target.address, 32); + + await expect(adapter.setPeer(eid, peer)).to.emit(adapter, "PeerSet").withArgs(eid, peer); + expect(await adapter.peers(eid)).to.be.eq(peer); + }); + + it("setPeer reverts when called by not an owner", async function () { + const eid = randomBI(8); + const target = ethers.Wallet.createRandom(); + const peer = ethers.zeroPadValue(target.address, 32); + + await expect(adapter.connect(signer1).setPeer(eid, peer)).to.be.revertedWithCustomError(adapter, "OwnableUnauthorizedAccount"); + }); + + it("setChainIdFromEid maps chaind id by eid", async function () { + const eid = randomBI(8); + const chainId = randomBI(8); + + await expect(adapter.setChainIdFromEid(eid, chainId)).to.emit(adapter, "ChainIdAdded").withArgs(chainId); + expect(await adapter.getChainIdFromEid(eid)).to.be.eq(chainId); + expect(await adapter.getEidFromChainId(chainId)).to.be.eq(eid); + }); + + it("setChainIdFromEid reverts when called by not an owner", async function () { + const eid = randomBI(8); + const chainId = randomBI(8); + + await expect(adapter.connect(signer1).setChainIdFromEid(eid, chainId)).to.be.revertedWithCustomError( + adapter, + "OwnableUnauthorizedAccount" + ); + }); + + it("Owner", async function () { + expect(await adapter.owner()).to.be.eq(owner.address); + }); + + it("Transfer ownership in two steps", async function () { + // Generate a new owner address and connect it to the provider + const newOwner = ethers.Wallet.createRandom().connect(ethers.provider); + + // Fund newOwner with some ETH from the current owner + await owner.sendTransaction({ + to: newOwner.address, + value: ethers.parseEther("1"), // Transfer 1 ETH for gas fees + }); + + // Initiate ownership transfer (step 1) + await expect(adapter.transferOwnership(newOwner.address)) + .to.emit(adapter, "OwnershipTransferStarted") + .withArgs(owner.address, newOwner.address); + + // Ensure that the new owner is set as the pending owner + expect(await adapter.pendingOwner()).to.equal(newOwner.address); + + // Simulate the new owner accepting the ownership (step 2) + await expect(adapter.connect(newOwner).acceptOwnership()) + .to.emit(adapter, "OwnershipTransferred") + .withArgs(owner.address, newOwner.address); + + // Check that the ownership transfer is complete + expect(await adapter.owner()).to.equal(newOwner.address); + }); + + it("Endpoint", async function () { + const endpoint = adapterArg.endpoint(); + expect(await adapter.endpoint()).to.be.eq(endpoint.address); + }); + }); + }); + + //=== Send eth between layers + const directions = [ + { + name: "L2 -> L1", + fromAdapter: () => adapterFrax, + fromEndpoint: () => arbEndpoint, + fromChainID: ARB_ID, + fromChainEID: ARB_EID, + toAdapter: () => adapterL1, + toEndpoint: () => ethEndpoint, + toChainID: ETH_ID, + target: () => rebalancer, + maliciousAdapter: () => maliciousAdapterL2, + }, + { + name: "L1 -> L2", + fromAdapter: () => adapterL1, + fromEndpoint: () => ethEndpoint, + fromChainID: ETH_ID, + fromChainEID: ETH_EID, + toAdapter: () => adapterFrax, + toEndpoint: () => arbEndpoint, + toChainID: ARB_ID, + target: () => omniVault, + maliciousAdapter: () => maliciousAdapterL1, + }, + ]; + directions.forEach(function (direction) { + describe(`Send eth ${direction.name}`, function () { + let fromAdapter; + let fromEndpoint; + let toAdapter; + let toEndpoint; + let target; + + before(async function () { + await snapshot.restore(); + fromAdapter = direction.fromAdapter(); + fromEndpoint = direction.fromEndpoint(); + toAdapter = direction.toAdapter(); + toEndpoint = direction.toEndpoint(); + target = direction.target(); + }); + + const args = [ + { + name: "1eth", + amount: async () => e18, + }, + { + name: "Random amount ~ 1e17", + amount: async () => randomBI(17), + }, + { + name: "1wei", + amount: async () => 1n, + }, + { + name: "Restaking pool min amount", + amount: async () => await inceptionVault.getMinStake(), + }, + { + name: "Greater than available to stake", + amount: async () => (await inceptionVault.availableToStake()) + 1n, + }, + ]; + + args.forEach(function (arg) { + it(arg.name, async function () { + const amount = await arg.amount(); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const amountWithFees = await fromAdapter.quoteSendEth(direction.toChainID, options); + const fee = amountWithFees - amount; + const tx = await fromAdapter.connect(owner).sendEthCrossChain(direction.toChainID, options, { value: amountWithFees }); + + await expect(tx).emit(fromAdapter, "CrossChainMessageSent").withArgs(direction.toChainID, amount, "0x", fee); + await expect(tx).emit(toAdapter, "CrossChainEthDeposit").withArgs(direction.fromChainID, amount); + if (direction.toChainID === ETH_ID) { + await expect(tx).emit(target, "ETHReceived").withArgs(toAdapter.address, amount); + } + await expect(tx).to.changeEtherBalance(target.address, amount); + await expect(tx).to.changeEtherBalance(owner.address, -amountWithFees, { includeFee: false }); + }); + }); + + it(`Send 0th ${direction.name}`, async function () { + const amount = 0n; + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const amountWithFees = await fromAdapter.quoteSendEth(direction.toChainID, options); + const tx = await fromAdapter.connect(owner).sendEthCrossChain(direction.toChainID, options, { value: amountWithFees }); + + await expect(tx).emit(fromAdapter, "CrossChainMessageSent").withArgs(direction.toChainID, 0n, "0x", 3202200000000000n); + await expect(tx).not.emit(toAdapter, "CrossChainEthDeposit"); + await expect(tx).not.emit(rebalancer, "ETHReceived"); + await expect(tx).to.changeEtherBalance(target.address, amount); + await expect(tx).to.changeEtherBalance(owner.address, -amountWithFees, { includeFee: false }); + }); + + it("sendEthCrossChain reverts when called by not a target", async function () { + await snapshot.restore(); + + const amount = randomBI(18); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await fromAdapter.quoteSendEth(direction.toChainID, options); + await expect(fromAdapter.connect(signer1).sendEthCrossChain(direction.toChainID, options, { value: fees })) + .to.revertedWithCustomError(toAdapter, "NotTargetReceiver") + .withArgs(signer1.address); + }); + + it("sendEthCrossChain reverts when caller is not endpoint", async function () { + await snapshot.restore(); + const maliciousEndpoint = await ethers.deployContract("EndpointMock", [direction.toChainID]); + maliciousEndpoint.address = await maliciousEndpoint.getAddress(); + await fromEndpoint.setDestLzEndpoint(toAdapter.address, maliciousEndpoint.address); + + const amount = randomBI(18); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await fromAdapter.quoteSendEth(direction.toChainID, options); + + await expect(fromAdapter.sendEthCrossChain(direction.toChainID, options, { value: fees })) + .to.revertedWithCustomError(toAdapter, "OnlyEndpoint") + .withArgs(maliciousEndpoint.address); + }); + + it("sendEthCrossChain reverts when sent from unknown adapter", async function () { + await snapshot.restore(); + const maliciousAdapter = direction.maliciousAdapter(); + + const amount = randomBI(18); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await maliciousAdapter.quoteSendEth(direction.toChainID, options); + await expect(maliciousAdapter.sendEthCrossChain(direction.toChainID, options, { value: fees })) + .to.be.revertedWithCustomError(toAdapter, "OnlyPeer") + .withArgs(direction.fromChainEID, ethers.zeroPadValue(maliciousAdapter.address, 32)); + }); + + it("sendEthCrossChain reverts when chain is unknown", async function () { + const amount = randomBI(18); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const amountWithFees = await fromAdapter.quoteSendEth(direction.toChainID, options); + await expect( + fromAdapter.connect(owner).sendEthCrossChain(randomBI(4), options, { value: amountWithFees }) + ).to.be.revertedWithCustomError(fromAdapter, "NoPeer"); + }); + + it("sendEthCrossChain reverts there is not enough fee", async function () { + const amount = randomBI(18); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const amountWithFees = await fromAdapter.quoteSendEth(direction.toChainID, options); + await expect( + fromAdapter.connect(owner).sendEthCrossChain(direction.toChainID, options, { value: amountWithFees - 1n }) + ).to.be.revertedWith("LayerZeroMock: not enough native for fees"); + }); + + it("quoteSendEth reverts when chain is unknown", async function () { + const chain = randomBI(4); + const amount = randomBI(18); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + await expect(fromAdapter.quoteSendEth(chain, options)) + .to.be.revertedWithCustomError(fromAdapter, "NoDestEidFoundForChainId") + .withArgs(chain); + }); + + it("quoteSendEth reverts when options value is invalid", async function () { + await expect(fromAdapter.quoteSendEth(direction.toChainID, "0x")) + .to.be.revertedWithCustomError(fromEndpoint, "LZ_ULN_InvalidWorkerOptions") + .withArgs(0n); + }); + }); + }); + + describe("sendDataL1 receiveL2Info", function () { + let lastHandleTime; + before(async function () { + await snapshot.restore(); + }); + + it("sendDataL1 reverts when called by not a target", async function () { + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp; + const balance = randomBI(19); + const totalSupply = randomBI(19); + const message = encodePayload(timestamp, balance, totalSupply); + const fees = await adapterFrax.quote(message, options); + await expect(adapterFrax.connect(signer1).sendDataL1(message, options, { value: fees })) + .to.be.revertedWithCustomError(adapterFrax, "NotTargetReceiver") + .withArgs(signer1.address); + }); + + it("receiveL2Info", async () => { + const block = await ethers.provider.getBlock("latest"); + lastHandleTime = block.timestamp - 1000; + const _balance = 100; + const _totalSupply = 100; + + await expect(adapterFrax.sendData(lastHandleTime, _balance, _totalSupply)) + .to.emit(rebalancer, "L2InfoReceived") + .withArgs(ARB_ID, lastHandleTime, _balance, _totalSupply); + + const chainDataAfter = await rebalancer.getTransactionData(ARB_ID); + expect(chainDataAfter.timestamp).to.be.eq(lastHandleTime); + expect(chainDataAfter.ethBalance).to.be.eq(_balance); + expect(chainDataAfter.inceptionTokenBalance).to.be.eq(_totalSupply); + }); + + it("Reverts when there is a message with this timestamp", async function () { + const balance = 200; + const totalSupply = 200; + + await expect(adapterFrax.sendData(lastHandleTime, balance, totalSupply)) + .to.revertedWithCustomError(rebalancer, "TimeBeforePrevRecord") + .withArgs(lastHandleTime); + }); + + it("Reverts when timestamp is in the future", async function () { + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp + 100; + const balance = 100; + const totalSupply = 100; + + await expect(adapterFrax.sendData(timestamp, balance, totalSupply)) + .to.revertedWithCustomError(rebalancer, "TimeCannotBeInFuture") + .withArgs(timestamp); + }); + + it("Reverts when caller is not endpoint", async function () { + const maliciousEndpoint = await ethers.deployContract("EndpointMock", [ETH_EID]); + maliciousEndpoint.address = await maliciousEndpoint.getAddress(); + await arbEndpoint.setDestLzEndpoint(adapterL1.address, maliciousEndpoint.address); + + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp - 1; + const balance = 300; + const totalSupply = 300; + + await expect(adapterFrax.sendData(timestamp, balance, totalSupply)) + .to.revertedWithCustomError(adapterL1, "OnlyEndpoint") + .withArgs(maliciousEndpoint.address); + }); + + it("Reverts when l2 sender is unknown", async function () { + await snapshot.restore(); + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp + 100; + const balance = 100; + const totalSupply = 100; + const message = encodePayload(timestamp, balance, totalSupply); + + const fees = await maliciousAdapterL2.quote(message, options); + await expect(maliciousAdapterL2.sendDataL1(message, options, { value: fees })) + .to.be.revertedWithCustomError(adapterL1, "OnlyPeer") + .withArgs(ARB_EID, ethers.zeroPadValue(maliciousAdapterL2.address, 32)); + }); + + it("quoteSendEth reverts when options value is invalid", async function () { + await snapshot.restore(); + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp + 100; + const balance = 100; + const totalSupply = 100; + const message = encodePayload(timestamp, balance, totalSupply); + + await expect(adapterFrax.quote(message, "0x")) + .to.be.revertedWithCustomError(arbEndpoint, "LZ_ULN_InvalidWorkerOptions") + .withArgs(0n); + }); + }); + + describe("Recover funds", function () { + it("recoverFunds owner can send funds from adapter to the target", async function () { + const amount = randomBI(18); + await signer1.sendTransaction({ value: amount, to: adapterL1.address }); + expect(await ethers.provider.getBalance(adapterL1.address)).to.be.eq(amount); + + const tx = await adapterL1.connect(owner).recoverFunds(); + await expect(tx).to.emit(adapterL1, "RecoverFundsInitiated").withArgs(amount); + await expect(tx).changeEtherBalance(adapterL1, -amount); + await expect(tx).changeEtherBalance(rebalancer, amount); + }); + + it("recoverFunds reverts when called by not an owner", async function () { + const amount = randomBI(18); + await signer1.sendTransaction({ value: amount, to: adapterL1.address }); + expect(await ethers.provider.getBalance(adapterL1.address)).to.be.eq(amount); + + await expect(adapterL1.connect(signer1).recoverFunds()).to.revertedWithCustomError(adapterL1, "OwnableUnauthorizedAccount"); + }); + }); + }); + + describe("OmniVault", function () { + describe("Base flow", function () { + let deposited, freeBalance, depositFees; + + before(async function () { + await snapshot.restore(); + TARGET = toWei(10); + await omniVault.setTargetFlashCapacity(TARGET); + }); + + it("Initial ratio", async function () { + const ratio = await omniVault.ratio(); + console.log(`Initial ratio:\t\t${ratio.format()}`); + }); + + it("Deposit to vault", async function () { + freeBalance = randomBI(19); + deposited = TARGET + freeBalance; + const expectedShares = (deposited * e18) / (await omniVault.ratio()); + const tx = await omniVault.connect(signer1).deposit(signer1.address, { value: deposited }); + const receipt = await tx.wait(); + const events = receipt?.logs.filter((e) => e.eventName === "Deposit"); + expect(events.length).to.be.eq(1); + expect(events[0].args["sender"]).to.be.eq(signer1.address); + expect(events[0].args["receiver"]).to.be.eq(signer1.address); + expect(events[0].args["amount"]).to.be.eq(deposited); + expect(events[0].args["iShares"]).to.be.closeTo(expectedShares, 1n); + expect(receipt?.logs.find((l) => l.eventName === "DepositBonus")).to.be.undefined; //Because there is no replenish rewards has been collected yet + console.log(`Ratio after:\t\t${(await omniVault.ratio()).format()}`); + + expect(await iToken.balanceOf(signer1.address)).to.be.closeTo(expectedShares, 1n); + expect(await omniVault.totalAssets()).to.be.eq(deposited); + expect(await omniVault.getFlashCapacity()).to.be.eq(deposited); + expect(await omniVault.ratio()).to.be.eq(e18); + }); + + it("Flash withdraw all", async function () { + const sharesBefore = await iToken.balanceOf(signer1); + const senderBalanceBefore = await ethers.provider.getBalance(signer1); + const receiver = signer2; + const receiverBalanceBefore = await ethers.provider.getBalance(receiver); + const treasuryBalanceBefore = await ethers.provider.getBalance(treasury); + const totalAssetsBefore = await omniVault.totalAssets(); + const flashCapacityBefore = await omniVault.getFlashCapacity(); + console.log(`Flash capacity before:\t${flashCapacityBefore.format()}`); + + const amount = await omniVault.convertToAssets(sharesBefore); + const expectedFee = await omniVault.calculateFlashWithdrawFee(amount); + console.log(`Amount:\t\t\t\t\t${amount.format()}`); + console.log(`Shares:\t\t\t\t\t${sharesBefore.format()}`); + console.log(`Expected fee:\t\t\t${expectedFee.format()}`); + + let tx = await omniVault.connect(signer1).flashWithdraw(sharesBefore, receiver.address); + const receipt = await tx.wait(); + const txFee = BigInt(receipt.gasUsed * receipt.gasPrice); + const withdrawEvent = receipt?.logs.filter((e) => e.eventName === "FlashWithdraw"); + expect(withdrawEvent.length).to.be.eq(1); + expect(withdrawEvent[0].args["sender"]).to.be.eq(signer1.address); + expect(withdrawEvent[0].args["receiver"]).to.be.eq(receiver.address); + expect(withdrawEvent[0].args["owner"]).to.be.eq(signer1.address); + expect(withdrawEvent[0].args["amount"]).to.be.closeTo(amount - expectedFee, 1n); + expect(withdrawEvent[0].args["iShares"]).to.be.closeTo(sharesBefore, 1n); + expect(withdrawEvent[0].args["fee"]).to.be.closeTo(expectedFee, 1n); + const collectedFees = withdrawEvent[0].args["fee"]; + depositFees = collectedFees / 2n; + + const sharesAfter = await iToken.balanceOf(signer1); + const senderBalanceAfter = await ethers.provider.getBalance(signer1); + const receiverBalanceAfter = await ethers.provider.getBalance(receiver); + const treasuryBalanceAfter = await ethers.provider.getBalance(treasury); + const totalAssetsAfter = await omniVault.totalAssets(); + const flashCapacityAfter = await omniVault.getFlashCapacity(); + console.log(`Shares balance diff:\t${(sharesBefore - sharesAfter).format()}`); + console.log(`Sender balance diff:\t${(senderBalanceBefore - senderBalanceAfter).format()}`); + console.log(`Receiver balance diff:\t${(receiverBalanceAfter - receiverBalanceBefore).format()}`); + console.log(`Treasury balance diff:\t${(treasuryBalanceAfter - treasuryBalanceBefore).format()}`); + console.log(`Total assets diff:\t\t${(totalAssetsBefore - totalAssetsAfter).format()}`); + console.log(`Flash capacity diff:\t${(flashCapacityBefore - flashCapacityAfter).format()}`); + console.log(`Fee collected:\t\t\t${collectedFees.format()}`); + + expect(sharesBefore - sharesAfter).to.be.eq(sharesBefore); + expect(senderBalanceBefore - senderBalanceAfter).to.be.closeTo(txFee, 1n); + expect(receiverBalanceAfter - receiverBalanceBefore).to.be.closeTo(amount - expectedFee, 1n); + expect(treasuryBalanceAfter - treasuryBalanceBefore).to.be.closeTo(expectedFee / 2n, 1n); + expect(totalAssetsBefore - totalAssetsAfter).to.be.closeTo(amount - expectedFee / 2n, 1n); + expect(flashCapacityBefore - flashCapacityAfter).to.be.closeTo(amount, 1n); + }); + }); + + describe("Deposit", function () { + let TARGET; + + beforeEach(async function () { + await snapshot.restore(); + TARGET = toWei(10); + await omniVault.setTargetFlashCapacity(TARGET); + }); + + const args = [ + { + name: "1st time < TARGET", + predepositAmount: () => 0n, + amount: async () => TARGET / 2n, + withdrawFeeFrom: () => 0n, + receiver: () => signer1.address, + }, + { + name: "1st time > TARGET", + predepositAmount: () => 0n, + amount: async () => randomBIMax(TARGET), + withdrawFeeFrom: () => 0n, + receiver: () => signer1.address, + }, + { + name: "more wo rewards", + predepositAmount: () => TARGET / 3n, + amount: async () => randomBIMax(TARGET / 3n), + withdrawFeeFrom: () => 0n, + receiver: () => signer1.address, + }, + { + name: "more with rewards", + predepositAmount: () => TARGET / 3n, + amount: async () => randomBIMax(TARGET / 3n), + withdrawFeeFrom: () => TARGET, + receiver: () => signer1.address, + }, + { + name: "min amount", + predepositAmount: () => 0n, + amount: async () => await omniVault.minAmount(), + withdrawFeeFrom: () => TARGET, + receiver: () => signer1.address, + }, + { + name: "and redeem all rewards", + predepositAmount: () => TARGET / 10n, + amount: async () => (TARGET * 8n) / 10n, + withdrawFeeFrom: () => TARGET / 10n, + receiver: () => signer1.address, + }, + { + name: "up to target cap and above", + predepositAmount: () => TARGET / 10n, + amount: async () => TARGET, + withdrawFeeFrom: () => TARGET / 2n, + receiver: () => signer1.address, + }, + { + name: "above target cap", + predepositAmount: () => TARGET + 1n, + amount: async () => randomBI(19), + withdrawFeeFrom: () => TARGET, + receiver: () => signer1.address, + }, + { + name: "to another address", + predepositAmount: () => TARGET / 10n, + amount: async () => TARGET, + withdrawFeeFrom: () => TARGET, + receiver: () => signer2.address, + }, + + //Ratio < 1 + { + name: "more wo rewards when ratio < 1", + predepositAmount: () => TARGET / 3n, + amount: async () => randomBIMax(TARGET / 3n), + withdrawFeeFrom: () => 0n, + ratio: toWei(0.9), + receiver: () => signer1.address, + }, + { + name: "more with rewards when ratio < 1", + predepositAmount: () => TARGET / 3n, + amount: async () => randomBIMax(TARGET / 3n), + withdrawFeeFrom: () => TARGET, + ratio: toWei(0.9), + receiver: () => signer1.address, + }, + { + name: "min amount when ratio < 1", + predepositAmount: () => 0n, + amount: async () => await omniVault.minAmount(), + withdrawFeeFrom: () => TARGET, + ratio: toWei(0.9), + receiver: () => signer1.address, + }, + ]; + + args.forEach(function (arg) { + it(`Deposit ${arg.name}`, async function () { + //Predeposit + const predepositAmount = arg.predepositAmount(); + if (predepositAmount > 0n) { + const randomAddress = ethers.Wallet.createRandom().address; + await omniVault.connect(signer3).deposit(randomAddress, { value: predepositAmount }); + expect(await omniVault.getFlashCapacity()).to.be.closeTo(predepositAmount, 2n); + } + + //Add rewards + let availableBonus = await addReplenishBonusToOmniVault(arg.withdrawFeeFrom()); + + if (arg.ratio) { + await ratioFeedL2.updateRatioBatch([await iToken.getAddress()], [arg.ratio]); + console.log(`Ratio updated:\t\t\t${(await omniVault.ratio()).format()}`); + } + + const receiver = arg.receiver(); + const stakerSharesBefore = await iToken.balanceOf(receiver); + const totalAssetsBefore = await omniVault.totalAssets(); + const flashCapacityBefore = await omniVault.getFlashCapacity(); + console.log(`Flash capacity before:\t${flashCapacityBefore.format()}`); + + const amount = await arg.amount(); + console.log(`Amount:\t\t\t\t\t${amount.format()}`); + const calculatedBonus = await omniVault.calculateDepositBonus(amount); + console.log(`Preview bonus:\t\t\t${calculatedBonus.format()}`); + console.log(`Available bonus:\t\t${availableBonus.format()}`); + const expectedBonus = calculatedBonus <= availableBonus ? calculatedBonus : availableBonus; + availableBonus -= expectedBonus; + console.log(`Expected bonus:\t\t\t${expectedBonus.format()}`); + const convertedShares = await omniVault.convertToShares(amount + expectedBonus); + const expectedShares = ((amount + expectedBonus) * (await omniVault.ratio())) / e18; + + const tx = await omniVault.connect(signer1).deposit(receiver, { value: amount }); + const receipt = await tx.wait(); + const depositEvent = receipt?.logs.filter((e) => e.eventName === "Deposit"); + expect(depositEvent.length).to.be.eq(1); + expect(depositEvent[0].args["sender"]).to.be.eq(signer1.address); + expect(depositEvent[0].args["receiver"]).to.be.eq(receiver); + expect(depositEvent[0].args["amount"]).to.be.eq(amount); + expect(depositEvent[0].args["iShares"]).to.be.closeTo(convertedShares, 1n); + //DepositBonus event + const actualBonus = receipt?.logs.find((l) => l.eventName === "DepositBonus")?.args.amount || 0n; + console.log(`Actual bonus:\t\t\t${actualBonus.format()}`); + + const stakerSharesAfter = await iToken.balanceOf(receiver); + const totalAssetsAfter = await omniVault.totalAssets(); + const flashCapacityAfter = await omniVault.getFlashCapacity(); + console.log(`Bonus after:\t\t\t${availableBonus.format()}`); + + expect(stakerSharesAfter - stakerSharesBefore).to.be.closeTo(expectedShares, 1n); + expect(stakerSharesAfter - stakerSharesBefore).to.be.closeTo(convertedShares, 1n); + expect(totalAssetsAfter - totalAssetsBefore).to.be.eq(amount); //omniVault balance is the same + expect(actualBonus).to.be.closeTo(expectedBonus, 1n); + expect(flashCapacityAfter - flashCapacityBefore).to.be.closeTo(amount + expectedBonus, 1n); //rewarded bonus goes to flash capacity + }); + it(`Deposit with referral code ${arg.name}`, async function () { + //Predeposit + const predepositAmount = arg.predepositAmount(); + if (predepositAmount > 0n) { + const randomAddress = ethers.Wallet.createRandom().address; + await omniVault.connect(signer3).deposit(randomAddress, { value: predepositAmount }); + expect(await omniVault.getFlashCapacity()).to.be.closeTo(predepositAmount, 2n); + } + + //Add rewards + let availableBonus = await addReplenishBonusToOmniVault(arg.withdrawFeeFrom()); + + if (arg.ratio) { + await ratioFeedL2.updateRatioBatch([await iToken.getAddress()], [arg.ratio]); + console.log(`Ratio updated:\t\t\t${(await omniVault.ratio()).format()}`); + } + + const receiver = arg.receiver(); + const stakerSharesBefore = await iToken.balanceOf(receiver); + const totalAssetsBefore = await omniVault.totalAssets(); + const flashCapacityBefore = await omniVault.getFlashCapacity(); + console.log(`Flash capacity before:\t${flashCapacityBefore.format()}`); + + const amount = await arg.amount(); + console.log(`Amount:\t\t\t\t\t${amount.format()}`); + const calculatedBonus = await omniVault.calculateDepositBonus(amount); + console.log(`Preview bonus:\t\t\t${calculatedBonus.format()}`); + console.log(`Available bonus:\t\t${availableBonus.format()}`); + const expectedBonus = calculatedBonus <= availableBonus ? calculatedBonus : availableBonus; + availableBonus -= expectedBonus; + console.log(`Expected bonus:\t\t\t${expectedBonus.format()}`); + const convertedShares = await omniVault.convertToShares(amount + expectedBonus); + const expectedShares = ((amount + expectedBonus) * (await omniVault.ratio())) / e18; + + const code = ethers.encodeBytes32String("code"); + const tx = await omniVault.connect(signer1).depositWithReferral(receiver, code, { value: amount }); + const receipt = await tx.wait(); + const depositEvent = receipt?.logs.filter((e) => e.eventName === "Deposit"); + expect(depositEvent.length).to.be.eq(1); + expect(depositEvent[0].args["sender"]).to.be.eq(signer1.address); + expect(depositEvent[0].args["receiver"]).to.be.eq(receiver); + expect(depositEvent[0].args["amount"]).to.be.eq(amount); + expect(depositEvent[0].args["iShares"]).to.be.closeTo(convertedShares, 1n); + await expect(tx).to.emit(omniVault, "ReferralCode").withArgs(signer1.address, code); + + //DepositBonus event + const actualBonus = receipt?.logs.find((l) => l.eventName === "DepositBonus")?.args.amount || 0n; + console.log(`Actual bonus:\t\t\t${actualBonus.format()}`); + + const stakerSharesAfter = await iToken.balanceOf(receiver); + const totalAssetsAfter = await omniVault.totalAssets(); + const flashCapacityAfter = await omniVault.getFlashCapacity(); + console.log(`Bonus after:\t\t\t${availableBonus.format()}`); + + expect(stakerSharesAfter - stakerSharesBefore).to.be.closeTo(expectedShares, 1n); + expect(stakerSharesAfter - stakerSharesBefore).to.be.closeTo(convertedShares, 1n); + expect(totalAssetsAfter - totalAssetsBefore).to.be.eq(amount); //omniVault balance is the same + expect(actualBonus).to.be.closeTo(expectedBonus, 1n); + expect(flashCapacityAfter - flashCapacityBefore).to.be.closeTo(amount + expectedBonus, 1n); //rewarded bonus goes to flash capacity + }); + }); + + const invalidArgs = [ + { + name: "amount is 0", + amount: async () => 0n, + receiver: () => signer1.address, + customError: "LowerMinAmount", + }, + { + name: "amount < min", + amount: async () => (await omniVault.minAmount()) - 1n, + receiver: () => signer1.address, + customError: "LowerMinAmount", + }, + { + name: "to zero address", + amount: async () => randomBI(18), + receiver: () => ethers.ZeroAddress, + customError: "NullParams", + }, + ]; + + invalidArgs.forEach(function (arg) { + it(`Reverts when deposit ${arg.name}`, async function () { + const amount = await arg.amount(); + const receiver = arg.receiver(); + if (arg.customError) { + await expect(omniVault.connect(signer1).deposit(receiver, { value: amount })).to.be.revertedWithCustomError( + omniVault, + arg.customError + ); + } else { + await expect(omniVault.connect(signer1).deposit(receiver, { value: amount })).to.be.revertedWith(arg.error); + } + }); + }); + + it("Reverts when omniVault is paused", async function () { + await omniVault.pause(); + const depositAmount = randomBI(19); + await expect(omniVault.connect(signer1).deposit(signer1.address, { value: depositAmount })).revertedWithCustomError( + omniVault, + "EnforcedPause" + ); + await omniVault.unpause(); + }); + + it("Reverts when shares is 0", async function () { + await omniVault.setMinAmount(0n); + await expect(omniVault.connect(signer1).deposit(signer1.address, { value: 0n })).revertedWithCustomError( + omniVault, + "DepositInconsistentResultedState" + ); + }); + }); + + describe("Deposit bonus params setter and calculation", function () { + let TARGET, MAX_PERCENT, localSnapshot; + before(async function () { + MAX_PERCENT = await omniVault.MAX_PERCENT(); + }); + + const depositBonusSegment = [ + { + fromUtilization: async () => 0n, + fromPercent: async () => await omniVault.maxBonusRate(), + toUtilization: async () => await omniVault.depositUtilizationKink(), + toPercent: async () => await omniVault.optimalBonusRate(), + }, + { + fromUtilization: async () => await omniVault.depositUtilizationKink(), + fromPercent: async () => await omniVault.optimalBonusRate(), + toUtilization: async () => await omniVault.MAX_PERCENT(), + toPercent: async () => await omniVault.optimalBonusRate(), + }, + { + fromUtilization: async () => await omniVault.MAX_PERCENT(), + fromPercent: async () => 0n, + toUtilization: async () => ethers.MaxUint256, + toPercent: async () => 0n, + }, + ]; + + const args = [ + { + name: "Normal bonus rewards profile > 0", + newMaxBonusRate: BigInt(2 * 10 ** 8), //2% + newOptimalBonusRate: BigInt(0.2 * 10 ** 8), //0.2% + newDepositUtilizationKink: BigInt(25 * 10 ** 8), //25% + }, + { + name: "Optimal utilization = 0 => always optimal rate", + newMaxBonusRate: BigInt(2 * 10 ** 8), + newOptimalBonusRate: BigInt(10 ** 8), //1% + newDepositUtilizationKink: 0n, + }, + { + name: "Optimal bonus rate = 0", + newMaxBonusRate: BigInt(2 * 10 ** 8), + newOptimalBonusRate: 0n, + newDepositUtilizationKink: BigInt(25 * 10 ** 8), + }, + { + name: "Optimal bonus rate = max > 0 => rate is constant over utilization", + newMaxBonusRate: BigInt(2 * 10 ** 8), + newOptimalBonusRate: BigInt(2 * 10 ** 8), + newDepositUtilizationKink: BigInt(25 * 10 ** 8), + }, + { + name: "Optimal bonus rate = max = 0 => no bonus", + newMaxBonusRate: 0n, + newOptimalBonusRate: 0n, + newDepositUtilizationKink: BigInt(25 * 10 ** 8), + }, + //Will fail when OptimalBonusRate > MaxBonusRate + ]; + + const amounts = [ + { + name: "min amount from 0", + flashCapacity: () => 0n, + amount: async () => (await omniVault.convertToAssets(await omniVault.minAmount())) + 1n, + }, + { + name: "1 wei from 0", + flashCapacity: () => 0n, + amount: async () => 1n, + }, + { + name: "from 0 to 25% of TARGET", + flashCapacity: () => 0n, + amount: async () => (TARGET * 25n) / 100n, + }, + { + name: "from 0 to 25% + 1wei of TARGET", + flashCapacity: () => 0n, + amount: async () => (TARGET * 25n) / 100n, + }, + { + name: "from 25% to 100% of TARGET", + flashCapacity: () => (TARGET * 25n) / 100n, + amount: async () => (TARGET * 75n) / 100n, + }, + { + name: "from 0% to 100% of TARGET", + flashCapacity: () => 0n, + amount: async () => TARGET, + }, + { + name: "from 0% to 200% of TARGET", + flashCapacity: () => 0n, + amount: async () => TARGET * 2n, + }, + ]; + + args.forEach(function (arg) { + it(`setDepositBonusParams: ${arg.name}`, async function () { + await snapshot.restore(); + TARGET = e18; + await omniVault.connect(owner).setTargetFlashCapacity(TARGET); + + await expect(omniVault.setDepositBonusParams(arg.newMaxBonusRate, arg.newOptimalBonusRate, arg.newDepositUtilizationKink)) + .to.emit(omniVault, "DepositBonusParamsChanged") + .withArgs(arg.newMaxBonusRate, arg.newOptimalBonusRate, arg.newDepositUtilizationKink); + + expect(await omniVault.maxBonusRate()).to.be.eq(arg.newMaxBonusRate); + expect(await omniVault.optimalBonusRate()).to.be.eq(arg.newOptimalBonusRate); + expect(await omniVault.depositUtilizationKink()).to.be.eq(arg.newDepositUtilizationKink); + localSnapshot = await takeSnapshot(); + }); + + amounts.forEach(function (amount) { + it(`calculateDepositBonus for ${amount.name}`, async function () { + await localSnapshot.restore(); + let flashCapacity = amount.flashCapacity(); + if (flashCapacity > 0n) { + await omniVault.connect(signer1).deposit(signer1.address, { value: flashCapacity }); + } + let _amount = await amount.amount(); + let depositBonus = 0n; + while (_amount > 0n) { + for (const feeFunc of depositBonusSegment) { + const utilization = (flashCapacity * MAX_PERCENT) / TARGET; + const fromUtilization = await feeFunc.fromUtilization(); + const toUtilization = await feeFunc.toUtilization(); + if (_amount > 0n && fromUtilization <= utilization && utilization < toUtilization) { + const fromPercent = await feeFunc.fromPercent(); + const toPercent = await feeFunc.toPercent(); + const upperBound = (toUtilization * TARGET) / MAX_PERCENT; + const replenished = upperBound > flashCapacity + _amount ? _amount : upperBound - flashCapacity; + const slope = ((toPercent - fromPercent) * MAX_PERCENT) / (toUtilization - fromUtilization); + const bonusPercent = fromPercent + (slope * (flashCapacity + replenished / 2n)) / TARGET; + const bonus = (replenished * bonusPercent) / MAX_PERCENT; + console.log(`Replenished:\t\t\t${replenished.format()}`); + console.log(`Bonus percent:\t\t\t${bonusPercent.format()}`); + console.log(`Bonus:\t\t\t\t\t${bonus.format()}`); + flashCapacity += replenished; + _amount -= replenished; + depositBonus += bonus; + } + } + } + let contractBonus = await omniVault.calculateDepositBonus(await amount.amount()); + console.log(`Expected deposit bonus:\t${depositBonus.format()}`); + console.log(`Contract deposit bonus:\t${contractBonus.format()}`); + expect(contractBonus).to.be.closeTo(depositBonus, 1n); + }); + }); + }); + + const invalidArgs = [ + { + name: "MaxBonusRate > MAX_PERCENT", + newMaxBonusRate: () => MAX_PERCENT + 1n, + newOptimalBonusRate: () => BigInt(0.2 * 10 ** 8), //0.2% + newDepositUtilizationKink: () => BigInt(25 * 10 ** 8), + customError: "ParameterExceedsLimits", + }, + { + name: "OptimalBonusRate > MAX_PERCENT", + newMaxBonusRate: () => BigInt(2 * 10 ** 8), + newOptimalBonusRate: () => MAX_PERCENT + 1n, + newDepositUtilizationKink: () => BigInt(25 * 10 ** 8), + customError: "ParameterExceedsLimits", + }, + { + name: "DepositUtilizationKink > MAX_PERCENT", + newMaxBonusRate: () => BigInt(2 * 10 ** 8), + newOptimalBonusRate: () => BigInt(0.2 * 10 ** 8), //0.2% + newDepositUtilizationKink: () => MAX_PERCENT + 1n, + customError: "ParameterExceedsLimits", + }, + ]; + invalidArgs.forEach(function (arg) { + it(`setDepositBonusParams reverts when ${arg.name}`, async function () { + await expect( + omniVault.setDepositBonusParams(arg.newMaxBonusRate(), arg.newOptimalBonusRate(), arg.newDepositUtilizationKink()) + ).to.be.revertedWithCustomError(omniVault, arg.customError); + }); + }); + + it("setDepositBonusParams reverts when caller is not an owner", async function () { + await expect( + omniVault.connect(signer1).setDepositBonusParams(BigInt(2 * 10 ** 8), BigInt(0.2 * 10 ** 8), BigInt(25 * 10 ** 8)) + ).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); + }); + }); + + describe("Flash withdraw", function () { + let TARGET, MAX_PERCENT, ratio; + beforeEach(async function () { + await snapshot.restore(); + TARGET = toWei(10); + await omniVault.setTargetFlashCapacity(TARGET); + MAX_PERCENT = await omniVault.MAX_PERCENT(); + }); + + const args = [ + { + name: "some amount when capacity > TARGET", + poolCapacity: () => TARGET * 2n, + amount: async () => randomBIMax(TARGET / 2n), + receiver: () => signer1, + }, + { + name: "all capacity above TARGET", + poolCapacity: () => TARGET * 2n, + amount: async () => (await omniVault.getFlashCapacity()) - TARGET, + receiver: () => signer1, + }, + { + name: "all when pool capacity > TARGET", + poolCapacity: () => TARGET + e18, + amount: async () => await omniVault.getFlashCapacity(), + receiver: () => signer1, + }, + { + name: "partially when pool capacity = TARGET", + poolCapacity: () => TARGET, + amount: async () => (await omniVault.getFlashCapacity()) / 2n, + receiver: () => signer1, + }, + { + name: "all when pool capacity = TARGET", + poolCapacity: () => TARGET, + amount: async () => await omniVault.getFlashCapacity(), + receiver: () => signer1, + }, + { + name: "partially when pool capacity < TARGET", + poolCapacity: () => (TARGET * 3n) / 4n, + amount: async () => (await omniVault.getFlashCapacity()) / 2n, + receiver: () => signer1, + }, + { + name: "all when pool capacity < TARGET", + poolCapacity: () => (TARGET * 3n) / 4n, + amount: async () => await omniVault.getFlashCapacity(), + receiver: () => signer1, + }, + { + name: "to another address", + poolCapacity: () => (TARGET * 3n) / 4n, + amount: async () => (await omniVault.getFlashCapacity()) / 2n, + receiver: () => signer2, + }, + { + name: "after protocol fee has been changed", + poolCapacity: () => TARGET, + amount: async () => await omniVault.getFlashCapacity(), + receiver: () => signer1, + protocolFee: () => BigInt(25 * 10 ** 8), + }, + ]; + + args.forEach(function (arg) { + it(`flashWithdraw: ${arg.name}`, async function () { + ratio = toWei(0.8); + await ratioFeedL2.updateRatioBatch([iToken.address], [ratio]); + //Deposit + const predepositAmount = arg.poolCapacity(); + await omniVault.connect(signer1).deposit(signer1.address, { value: predepositAmount }); + //Set protocol fee + let protocolFee = await omniVault.protocolFee(); + if (arg.protocolFee) { + protocolFee = arg.protocolFee(); + await omniVault.setProtocolFee(protocolFee); + } + //flashWithdraw + const ratioBefore = await omniVault.ratio(); + console.log(`Ratio before:\t\t\t${ratioBefore.format()}`); + + const receiver = await arg.receiver(); + const sharesBefore = await iToken.balanceOf(signer1); + const assetBalanceBefore = await ethers.provider.getBalance(receiver); + const treasuryBalanceBefore = await ethers.provider.getBalance(treasury); + const totalAssetsBefore = await omniVault.totalAssets(); + const flashCapacityBefore = await omniVault.getFlashCapacity(); + console.log(`Flash capacity before:\t${flashCapacityBefore.format()}`); + + const amount = await arg.amount(); + const shares = await omniVault.convertToShares(amount); + const expectedFee = await omniVault.calculateFlashWithdrawFee(amount); + console.log(`Expected fee:\t\t\t${expectedFee.format()}`); + + let tx = await omniVault.connect(signer1).flashWithdraw(shares, receiver.address); + const receipt = await tx.wait(); + const txFee = receiver.address === signer1.address ? BigInt(receipt.gasUsed * receipt.gasPrice) : 0n; + const withdrawEvent = receipt?.logs.filter((e) => e.eventName === "FlashWithdraw"); + expect(withdrawEvent.length).to.be.eq(1); + expect(withdrawEvent[0].args["sender"]).to.be.eq(signer1.address); + expect(withdrawEvent[0].args["receiver"]).to.be.eq(receiver.address); + expect(withdrawEvent[0].args["owner"]).to.be.eq(signer1.address); + expect(withdrawEvent[0].args["amount"]).to.be.closeTo(amount - expectedFee, 2n); + expect(withdrawEvent[0].args["iShares"]).to.be.closeTo(shares, 2n); + const actualFee = withdrawEvent[0].args["fee"]; + console.log(`Actual fee:\t\t\t\t${actualFee.format()}`); + + const sharesAfter = await iToken.balanceOf(signer1); + const assetBalanceAfter = await ethers.provider.getBalance(receiver); + const treasuryBalanceAfter = await ethers.provider.getBalance(treasury); + const totalAssetsAfter = await omniVault.totalAssets(); + const flashCapacityAfter = await omniVault.getFlashCapacity(); + console.log(`Shares diff:\t\t\t${(sharesBefore - sharesAfter).format()}`); + console.log(`Receiver balance diff:\t${(assetBalanceAfter - assetBalanceBefore).format()}`); + console.log(`TotalAssets diff:\t\t${(totalAssetsBefore - totalAssetsAfter).format()}`); + console.log(`Flash capacity diff:\t${(flashCapacityBefore - flashCapacityAfter).format()}`); + + expect(sharesBefore - sharesAfter).to.be.eq(shares); + expect(assetBalanceAfter - assetBalanceBefore).to.be.closeTo(amount - expectedFee - txFee, 2n); + expect(actualFee).to.be.closeTo(expectedFee, 2n); + const toDepositBonus = (expectedFee * (MAX_PERCENT - protocolFee)) / MAX_PERCENT; + const toTreasury = (expectedFee * protocolFee) / MAX_PERCENT; + expect(treasuryBalanceAfter - treasuryBalanceBefore).to.be.closeTo(toTreasury, 2n); + expect(totalAssetsBefore - totalAssetsAfter).to.be.closeTo(amount - toDepositBonus, 2n); + expect(flashCapacityBefore - flashCapacityAfter).to.be.closeTo(amount, 2n); + }); + }); + + it("Reverts when capacity is not sufficient", async function () { + await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); + ratio = toWei(0.8); + await ratioFeedL2.updateRatioBatch([iToken.address], [ratio]); + const shares = await iToken.balanceOf(signer1.address); + const capacity = await omniVault.getFlashCapacity(); + await expect(omniVault.connect(signer1).flashWithdraw(shares, signer1.address)) + .to.be.revertedWithCustomError(omniVault, "InsufficientCapacity") + .withArgs(capacity); + }); + + it("Reverts when amount < min", async function () { + await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); + const minAmount = await omniVault.minAmount(); + const shares = (await omniVault.convertToShares(minAmount)) - 1n; + await expect(omniVault.connect(signer1).flashWithdraw(shares, signer1.address)) + .to.be.revertedWithCustomError(omniVault, "LowerMinAmount") + .withArgs(minAmount); + }); + + it("Reverts when omniVault is paused", async function () { + await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); + await omniVault.pause(); + const shares = await iToken.balanceOf(signer1.address); + await expect(omniVault.connect(signer1).flashWithdraw(shares / 2n, signer1.address)).to.be.revertedWithCustomError( + omniVault, + "EnforcedPause" + ); + }); + + it("Reverts when withdraws to 0 address", async function () { + await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); + const shares = await iToken.balanceOf(signer1.address); + await expect(omniVault.connect(signer1).flashWithdraw(shares / 2n, ethers.ZeroAddress)).to.be.revertedWithCustomError( + omniVault, + "NullParams" + ); + }); + + it("Reverts when shares = 0", async function () { + await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); + await expect(omniVault.connect(signer1).flashWithdraw(0n, signer1.address)).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + }); + + describe("Withdraw fee params setter and calculation", function () { + let TARGET, MAX_PERCENT, localSnapshot; + before(async function () { + MAX_PERCENT = await omniVault.MAX_PERCENT(); + }); + + const withdrawFeeSegment = [ + { + fromUtilization: async () => 0n, + fromPercent: async () => await omniVault.maxFlashFeeRate(), + toUtilization: async () => await omniVault.withdrawUtilizationKink(), + toPercent: async () => await omniVault.optimalWithdrawalRate(), + }, + { + fromUtilization: async () => await omniVault.withdrawUtilizationKink(), + fromPercent: async () => await omniVault.optimalWithdrawalRate(), + toUtilization: async () => await omniVault.MAX_PERCENT(), + toPercent: async () => await omniVault.optimalWithdrawalRate(), + }, + { + fromUtilization: async () => await omniVault.MAX_PERCENT(), + fromPercent: async () => 0n, + toUtilization: async () => ethers.MaxUint256, + toPercent: async () => 0n, + }, + ]; + + const args = [ + { + name: "Normal withdraw fee profile > 0", + newMaxFlashFeeRate: BigInt(2 * 10 ** 8), //2% + newOptimalWithdrawalRate: BigInt(0.2 * 10 ** 8), //0.2% + newWithdrawUtilizationKink: BigInt(25 * 10 ** 8), + }, + { + name: "Optimal utilization = 0 => always optimal rate", + newMaxFlashFeeRate: BigInt(2 * 10 ** 8), + newOptimalWithdrawalRate: BigInt(10 ** 8), //1% + newWithdrawUtilizationKink: 0n, + }, + { + name: "Optimal withdraw rate = 0", + newMaxFlashFeeRate: BigInt(2 * 10 ** 8), + newOptimalWithdrawalRate: 0n, + newWithdrawUtilizationKink: BigInt(25 * 10 ** 8), + }, + { + name: "Optimal withdraw rate = max > 0 => rate is constant over utilization", + newMaxFlashFeeRate: BigInt(2 * 10 ** 8), + newOptimalWithdrawalRate: BigInt(2 * 10 ** 8), + newWithdrawUtilizationKink: BigInt(25 * 10 ** 8), + }, + { + name: "Optimal withdraw rate = max = 0 => no fee", + newMaxFlashFeeRate: 0n, + newOptimalWithdrawalRate: 0n, + newWithdrawUtilizationKink: BigInt(25 * 10 ** 8), + }, + //Will fail when optimalWithdrawalRate > MaxFlashFeeRate + ]; + + const amounts = [ + { + name: "from 200% to 0% of TARGET", + flashCapacity: () => TARGET * 2n, + amount: async () => await omniVault.getFlashCapacity(), + }, + { + name: "from 100% to 0% of TARGET", + flashCapacity: () => TARGET, + amount: async () => await omniVault.getFlashCapacity(), + }, + { + name: "1 wei from 100%", + flashCapacity: () => TARGET, + amount: async () => 1n, + }, + { + name: "min amount from 100%", + flashCapacity: () => TARGET, + amount: async () => (await omniVault.convertToAssets(await omniVault.minAmount())) + 1n, + }, + { + name: "from 100% to 25% of TARGET", + flashCapacity: () => TARGET, + amount: async () => (TARGET * 75n) / 100n, + }, + { + name: "from 100% to 25% - 1wei of TARGET", + flashCapacity: () => TARGET, + amount: async () => (TARGET * 75n) / 100n + 1n, + }, + { + name: "from 25% to 0% of TARGET", + flashCapacity: () => (TARGET * 25n) / 100n, + amount: async () => await omniVault.getFlashCapacity(), + }, + ]; + + args.forEach(function (arg) { + it(`setFlashWithdrawFeeParams: ${arg.name}`, async function () { + await snapshot.restore(); + TARGET = e18; + await omniVault.connect(owner).setTargetFlashCapacity(TARGET); + + await expect( + omniVault.setFlashWithdrawFeeParams(arg.newMaxFlashFeeRate, arg.newOptimalWithdrawalRate, arg.newWithdrawUtilizationKink) + ) + .to.emit(omniVault, "WithdrawFeeParamsChanged") + .withArgs(arg.newMaxFlashFeeRate, arg.newOptimalWithdrawalRate, arg.newWithdrawUtilizationKink); + + expect(await omniVault.maxFlashFeeRate()).to.be.eq(arg.newMaxFlashFeeRate); + expect(await omniVault.optimalWithdrawalRate()).to.be.eq(arg.newOptimalWithdrawalRate); + expect(await omniVault.withdrawUtilizationKink()).to.be.eq(arg.newWithdrawUtilizationKink); + localSnapshot = await takeSnapshot(); + }); + + amounts.forEach(function (amount) { + it(`calculateFlashWithdrawFee for: ${amount.name}`, async function () { + await localSnapshot.restore(); + if (amount.flashCapacity() > 0n) { + await omniVault.connect(signer1).deposit(signer1.address, { value: amount.flashCapacity() }); + } + let flashCapacity = await omniVault.getFlashCapacity(); + console.log(`flash capacity: ${flashCapacity.format()}`); + let _amount = await amount.amount(); + let withdrawFee = 0n; + while (_amount > 0n) { + for (const feeFunc of withdrawFeeSegment) { + const utilization = (flashCapacity * MAX_PERCENT) / TARGET; + const fromUtilization = await feeFunc.fromUtilization(); + const toUtilization = await feeFunc.toUtilization(); + if (_amount > 0n && fromUtilization < utilization && utilization <= toUtilization) { + console.log(`Utilization:\t\t\t${utilization.format()}`); + const fromPercent = await feeFunc.fromPercent(); + const toPercent = await feeFunc.toPercent(); + const lowerBound = (fromUtilization * TARGET) / MAX_PERCENT; + const replenished = lowerBound > flashCapacity - _amount ? flashCapacity - lowerBound : _amount; + const slope = ((toPercent - fromPercent) * MAX_PERCENT) / (toUtilization - fromUtilization); + const withdrawFeePercent = fromPercent + (slope * (flashCapacity - replenished / 2n)) / TARGET; + const fee = (replenished * withdrawFeePercent) / MAX_PERCENT; + console.log(`Replenished:\t\t\t${replenished.format()}`); + console.log(`Fee percent:\t\t\t${withdrawFeePercent.format()}`); + console.log(`Fee:\t\t\t\t\t${fee.format()}`); + flashCapacity -= replenished; + _amount -= replenished; + withdrawFee += fee; + } + } + } + let contractFee = await omniVault.calculateFlashWithdrawFee(await amount.amount()); + console.log(`Expected withdraw fee:\t${withdrawFee.format()}`); + console.log(`Contract withdraw fee:\t${contractFee.format()}`); + expect(contractFee).to.be.closeTo(withdrawFee, 1n); + }); + }); + }); + + const invalidArgs = [ + { + name: "MaxBonusRate > MAX_PERCENT", + newMaxFlashFeeRate: () => MAX_PERCENT + 1n, + newOptimalWithdrawalRate: () => BigInt(0.2 * 10 ** 8), //0.2% + newWithdrawUtilizationKink: () => BigInt(25 * 10 ** 8), + customError: "ParameterExceedsLimits", + }, + { + name: "OptimalBonusRate > MAX_PERCENT", + newMaxFlashFeeRate: () => BigInt(2 * 10 ** 8), + newOptimalWithdrawalRate: () => MAX_PERCENT + 1n, + newWithdrawUtilizationKink: () => BigInt(25 * 10 ** 8), + customError: "ParameterExceedsLimits", + }, + { + name: "DepositUtilizationKink > MAX_PERCENT", + newMaxFlashFeeRate: () => BigInt(2 * 10 ** 8), + newOptimalWithdrawalRate: () => BigInt(0.2 * 10 ** 8), //0.2% + newWithdrawUtilizationKink: () => MAX_PERCENT + 1n, + customError: "ParameterExceedsLimits", + }, + ]; + invalidArgs.forEach(function (arg) { + it(`setFlashWithdrawFeeParams reverts when ${arg.name}`, async function () { + await expect( + omniVault.setFlashWithdrawFeeParams(arg.newMaxFlashFeeRate(), arg.newOptimalWithdrawalRate(), arg.newWithdrawUtilizationKink()) + ).to.be.revertedWithCustomError(omniVault, arg.customError); + }); + }); + + it("calculateFlashWithdrawFee reverts when capacity is not sufficient", async function () { + await snapshot.restore(); + await omniVault.connect(signer1).deposit(signer1.address, { value: randomBI(19) }); + const capacity = await omniVault.getFlashCapacity(); + await expect(omniVault.calculateFlashWithdrawFee(capacity + 1n)) + .to.be.revertedWithCustomError(omniVault, "InsufficientCapacity") + .withArgs(capacity); + }); + + it("setFlashWithdrawFeeParams reverts when caller is not an owner", async function () { + await expect( + omniVault.connect(signer1).setFlashWithdrawFeeParams(BigInt(2 * 10 ** 8), BigInt(0.2 * 10 ** 8), BigInt(25 * 10 ** 8)) + ).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); + }); + }); + + describe("Setters", function () { + beforeEach(async function () { + await snapshot.restore(); + }); + + it("setTreasuryAddress(): only owner can", async function () { + const newTreasury = ethers.Wallet.createRandom().address; + + const currentTreasury = await omniVault.treasury(); + + await expect(omniVault.setTreasuryAddress(newTreasury)) + .to.emit(omniVault, "TreasuryUpdated") + .withArgs(currentTreasury, newTreasury); + + expect(await omniVault.treasury()).to.be.eq(newTreasury); + }); + + it("setTreasuryAddress(): reverts when set to zero address", async function () { + await expect(omniVault.setTreasuryAddress(ethers.ZeroAddress)).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + + it("setTreasuryAddress(): reverts when caller is not an owner", async function () { + await expect(omniVault.connect(signer1).setTreasuryAddress(signer1.address)).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setRatioFeed(): only owner can", async function () { + const ratioFeed = await omniVault.ratioFeed(); + const iRatioFeedFactory = await ethers.getContractFactory("InceptionRatioFeed"); + const newRatioFeed = await upgrades.deployProxy(iRatioFeedFactory, []); + newRatioFeed.address = await newRatioFeed.getAddress(); + await expect(omniVault.setRatioFeed(newRatioFeed.address)) + .to.emit(omniVault, "RatioFeedChanged") + .withArgs(ratioFeed, newRatioFeed.address); + expect(await omniVault.ratioFeed()).to.be.eq(newRatioFeed.address); + + const ratio = randomBI(18); + await newRatioFeed.updateRatioBatch([await iToken.getAddress()], [ratio]); + expect(await omniVault.ratio()).to.be.eq(ratio); + }); + + it("setRatioFeed(): reverts when new value is zero address", async function () { + await expect(omniVault.setRatioFeed(ethers.ZeroAddress)).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + + it("setRatioFeed(): reverts when caller is not an owner", async function () { + const newRatioFeed = ethers.Wallet.createRandom().address; + await expect(omniVault.connect(signer1).setRatioFeed(newRatioFeed)).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setOperator(): only owner can", async function () { + const newValue = ethers.Wallet.createRandom().address; + await expect(omniVault.setOperator(newValue)).to.emit(omniVault, "OperatorChanged").withArgs(operator.address, newValue); + expect(await omniVault.operator()).to.be.eq(newValue); + }); + + it("setOperator(): reverts when caller is not an owner", async function () { + await expect(omniVault.connect(signer1).setOperator(signer1.address)).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setOperator(): reverts when set to 0 address", async function () { + await expect(omniVault.setOperator(ethers.ZeroAddress)).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + + it("ratio() reverts when ratioFeed is 0 address", async function () { + const omniVaultFactory = await ethers.getContractFactory("InceptionERC20OmniVault"); + const omniVault = await upgrades.deployProxy( + omniVaultFactory, + ["Omnivault", operator.address, iToken.address, ethers.ZeroAddress], + { initializer: "initialize" } + ); + omniVault.address = await omniVault.getAddress(); + await iToken.setVault(omniVault.address); + await expect(omniVault.ratio()).to.be.reverted; + }); + + it("setCrossChainAdapter(): only owner can", async function () { + const newValue = ethers.Wallet.createRandom().address; + + // Capture the current cross-chain adapter address before making the change + const currentAdapter = await omniVault.crossChainAdapter(); + + // Expect the event to include both the previous and new cross-chain adapter addresses + await expect(omniVault.setCrossChainAdapter(newValue)) + .to.emit(omniVault, "CrossChainAdapterChanged") + .withArgs(currentAdapter, newValue); + + // Verify the cross-chain adapter address has been updated + expect(await omniVault.crossChainAdapter()).to.be.eq(newValue); + }); + + it("setCrossChainAdapter(): reverts when set to zero address", async function () { + await expect(omniVault.setCrossChainAdapter(ethers.ZeroAddress)).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + + it("setCrossChainAdapter(): reverts when caller is not an owner", async function () { + await expect(omniVault.connect(signer1).setCrossChainAdapter(signer1.address)).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setMinAmount(): only owner can", async function () { + const prevValue = await omniVault.minAmount(); + const newMinAmount = randomBI(4); + await expect(omniVault.setMinAmount(newMinAmount)).to.emit(omniVault, "MinAmountChanged").withArgs(prevValue, newMinAmount); + expect(await omniVault.minAmount()).to.be.eq(newMinAmount); + await expect(omniVault.connect(signer1).deposit(signer1.address, { value: newMinAmount - 1n })) + .to.be.revertedWithCustomError(omniVault, "LowerMinAmount") + .withArgs(newMinAmount); + }); + + it("setMinAmount(): reverts when called by not an owner", async function () { + await expect(omniVault.connect(signer1).setMinAmount(randomBI(3))).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setTargetFlashCapacity(): only owner can", async function () { + const prevValue = await omniVault.targetCapacity(); + const newValue = randomBI(18); + await expect(omniVault.setTargetFlashCapacity(newValue)).to.emit(omniVault, "TargetCapacityChanged").withArgs(prevValue, newValue); + expect(await omniVault.targetCapacity()).to.be.eq(newValue); + }); + + it("setTargetFlashCapacity(): reverts when called by not an owner", async function () { + const newValue = randomBI(18); + await expect(omniVault.connect(signer1).setTargetFlashCapacity(newValue)).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setTargetFlashCapacity(): reverts when sets to 0", async function () { + await expect(omniVault.setTargetFlashCapacity(0n)).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + + it("setProtocolFee(): sets share of flashWithdrawFee that goes to treasury", async function () { + const prevValue = await omniVault.protocolFee(); + const newValue = randomBI(10); + await expect(omniVault.setProtocolFee(newValue)).to.emit(omniVault, "ProtocolFeeChanged").withArgs(prevValue, newValue); + expect(await omniVault.protocolFee()).to.be.eq(newValue); + }); + + it("setProtocolFee(): reverts when > MAX_PERCENT", async function () { + const newValue = (await omniVault.MAX_PERCENT()) + 1n; + await expect(omniVault.setProtocolFee(newValue)) + .to.be.revertedWithCustomError(omniVault, "ParameterExceedsLimits") + .withArgs(newValue); + }); + + it("setProtocolFee(): reverts when caller is not an owner", async function () { + const newValue = randomBI(10); + await expect(omniVault.connect(signer1).setProtocolFee(newValue)).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setName(): only owner can", async function () { + const prevValue = await omniVault.name(); + const newValue = "New name"; + await expect(omniVault.setName(newValue)).to.emit(omniVault, "NameChanged").withArgs(prevValue, newValue); + expect(await omniVault.name()).to.be.eq(newValue); + }); + + it("setName(): reverts when new name is blank", async function () { + await expect(omniVault.setName("")).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + + it("setName(): reverts when called by not an owner", async function () { + await expect(omniVault.connect(signer1).setName("New name")).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); + }); + + it("pause(): only owner can", async function () { + expect(await omniVault.paused()).is.false; + await expect(omniVault.pause()).to.emit(omniVault, "Paused").withArgs(owner.address); + expect(await omniVault.paused()).is.true; + }); + + it("pause(): reverts when called by not an owner", async function () { + await expect(omniVault.connect(signer1).pause()).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); + }); + + it("pause(): reverts when already paused", async function () { + await omniVault.pause(); + await expect(omniVault.pause()).revertedWithCustomError(omniVault, "EnforcedPause"); + }); + + it("unpause(): only owner can", async function () { + await omniVault.pause(); + expect(await omniVault.paused()).is.true; + + await expect(omniVault.unpause()).to.emit(omniVault, "Unpaused").withArgs(owner.address); + expect(await omniVault.paused()).is.false; + }); + + it("unpause(): reverts when called by not an owner", async function () { + await omniVault.pause(); + expect(await omniVault.paused()).is.true; + await expect(omniVault.connect(signer1).unpause()).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); + }); + }); + + describe("Bridge", function () { + describe("Send eth", function () { + let TARGET = e18; + + beforeEach(async function () { + await snapshot.restore(); + await omniVault.setTargetFlashCapacity(TARGET); + }); + + const args = [ + { + name: "without extra value", + extraValue: 0n, + sender: () => operator, + amount: async () => await omniVault.getFreeBalance(), + }, + { + name: "with extra value by operator", + extraValue: randomBI(16), + sender: () => operator, + amount: async () => await omniVault.getFreeBalance(), + }, + { + name: "with extra value by owner", + extraValue: randomBI(16), + sender: () => owner, + amount: async () => await omniVault.getFreeBalance(), + }, + { + name: "options amount < freeBalance", + extraValue: 0n, + sender: () => operator, + amount: async () => 1n, + }, + ]; + args.forEach(function (arg) { + it(`sendEthToL1 ${arg.name}`, async function () { + await omniVault.connect(signer1).deposit(signer1, { value: TARGET + e18 }); + const freeBalance = await omniVault.getFreeBalance(); + const amount = await arg.amount(); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const sender = arg.sender(); + + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + console.log("fee", fee.format()); + const extraValue = arg.extraValue; + const tx = await omniVault.connect(sender).sendEthCrossChain(ETH_ID, options, { value: fee + extraValue }); + + await expect(tx).emit(omniVault, "EthCrossChainSent").withArgs(amount, ETH_ID); + await expect(tx).to.changeEtherBalance(rebalancer.address, amount); + await expect(tx).to.changeEtherBalance(sender.address, -fee, { includeFee: false }); + await expect(tx).to.changeEtherBalance(omniVault.address, -amount); //Extra value returned to sender + + if (extraValue > 0n) { + await expect(tx).to.emit(omniVault, "UnusedFeesSentBackToOperator").withArgs(extraValue); + } + }); + }); + + it("Reverts freeBalance < options amount", async function () { + await omniVault.connect(signer1).deposit(signer1, { value: TARGET + e18 }); + const amount = await omniVault.getFreeBalance(); + const options = Options.newOptions() + .addExecutorLzReceiveOption(200_000n, amount + 1n) + .toHex() + .toString(); + + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + await expect(omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee })).to.be.revertedWith( + "LayerZeroMock: not enough native for fees" + ); + }); + + it("Reverts when fee is not enough", async function () { + await omniVault.connect(signer1).deposit(signer1, { value: TARGET + e18 }); + const amount = await omniVault.getFreeBalance(); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + await expect(omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee - 1n })) + .to.revertedWithCustomError(omniVault, "FeesAboveMsgValue") + .withArgs(fee - 1n); + }); + + it("Reverts when there is no free balance", async function () { + await omniVault.connect(signer1).deposit(signer1, { value: TARGET - 10n }); + expect(await omniVault.getFreeBalance()).to.be.eq(0n); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + await expect(omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: 0n })).to.revertedWithCustomError( + omniVault, + "FreeBalanceTooLow" + ); + }); + + it("Reverts when called by not an operator", async function () { + await omniVault.connect(signer1).deposit(signer1, { value: TARGET * 2n }); + const amount = await omniVault.getFreeBalance(); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + await expect(omniVault.connect(signer1).sendEthCrossChain(ETH_ID, options, { value: fee })).to.revertedWithCustomError( + omniVault, + "OnlyOwnerOrOperator" + ); + }); + }); + + describe("Send info", function () { + let TARGET = e18; + + beforeEach(async function () { + await snapshot.restore(); + await omniVault.setTargetFlashCapacity(TARGET); + }); + + const args = [ + { + name: "When there are no eth and shares", + depositedEthAmount: () => 0n, + msgSender: () => operator, + }, + { + name: "After deposit", + depositedEthAmount: () => randomBI(18), + msgSender: () => operator, + }, + { + name: "After deposit when deposit bonus > 0", + depositedEthAmount: () => e18, + depositBonus: true, + msgSender: () => operator, + }, + { + name: "When there are shares, but eth was sent to L1", + depositedEthAmount: () => TARGET + e18, + depositBonus: true, + sentToL1EthAmount: (amount) => amount - TARGET, + msgSender: () => operator, + }, + { + name: "Owner can call", + depositedEthAmount: () => TARGET + randomBI(18), + depositBonus: true, + sentToL1EthAmount: (amount) => amount - TARGET, + msgSender: () => owner, + }, + { + name: "With extra fee operator", + depositedEthAmount: () => TARGET + randomBI(18), + depositBonus: true, + sentToL1EthAmount: (amount) => amount - TARGET, + msgSender: () => operator, + extra: randomBI(16), + }, + { + name: "With extra fee owner", + depositedEthAmount: () => TARGET + randomBI(18), + depositBonus: true, + sentToL1EthAmount: (amount) => amount - TARGET, + msgSender: () => owner, + extra: randomBI(16), + }, + ]; + args.forEach(function (arg) { + it(`sendAssetsInfoToL1 ${arg.name}`, async function () { + let amount = arg.depositedEthAmount(); + if (amount > 0n) { + await omniVault.connect(signer1).deposit(signer1, { value: amount }); + } + + if (arg.depositBonus) { + await addReplenishBonusToOmniVault(TARGET); + } + const depositBonus = await omniVault.depositBonusAmount(); + + let sentToL1Amount = 0n; + if (arg.sentToL1EthAmount) { + sentToL1Amount = arg.sentToL1EthAmount(amount); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, sentToL1Amount).toHex().toString(); + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + await omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee }); + } + + const vaultBalance = await ethers.provider.getBalance(omniVault.address); + const freeBalance = await omniVault.getFreeBalance(); + const totalSupply = await iToken.totalSupply(); + const expectedVaultBalance = amount + depositBonus - sentToL1Amount; + console.log("Vault balance:\t\t", vaultBalance.format()); + console.log("Free balance:\t\t", freeBalance.format()); + console.log("Deposit bonus:\t\t", depositBonus.format()); + console.log("Sent to L1 eth:\t\t", sentToL1Amount.format()); + console.log("Total deposited:\t", (await omniVault.getFlashCapacity()).format()); + expect(vaultBalance).to.be.eq(expectedVaultBalance); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + let extraValue = 0n; + if (arg.extra) { + extraValue = arg.extra; + } + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + const sender = arg.msgSender(); + const tx = await omniVault.connect(sender).sendAssetsInfoToL1(options, { value: fee + extraValue }); + const rec = await tx.wait(); + const block = await ethers.provider.getBlock(rec?.blockNumber); + await expect(tx) + .emit(omniVault, "MessageToL1Sent") + .withArgs(totalSupply, amount - sentToL1Amount); + + const txData = await rebalancer.getTransactionData(ARB_ID); + expect(txData.timestamp).to.be.eq(block?.timestamp); + expect(txData.ethBalance).to.be.eq(amount - sentToL1Amount); + expect(txData.inceptionTokenBalance).to.be.eq(totalSupply); + await expect(tx).to.changeEtherBalance(sender.address, -fee, { includeFee: false }); + if (extraValue > 0n) { + await expect(tx).to.emit(omniVault, "UnusedFeesSentBackToOperator").withArgs(extraValue); + } + }); + }); + + it("Reverts when called by not an operator", async function () { + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + await expect(omniVault.connect(signer1).sendAssetsInfoToL1(options, { value: fee })).to.revertedWithCustomError( + omniVault, + "OnlyOwnerOrOperator" + ); + }); + + it("Reverts when fee is not enough", async function () { + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + await expect(omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee - 1n })) + .to.revertedWithCustomError(omniVault, "FeesAboveMsgValue") + .withArgs(fee - 1n); + }); + + it("Reverts when crosschain adapter is 0 address", async function () { + const omniVaultFactory = await ethers.getContractFactory("InceptionERC20OmniVault"); + const newOmniVault = await upgrades.deployProxy( + omniVaultFactory, + ["Omnivault", operator.address, iToken.address, ethers.ZeroAddress], + { initializer: "initialize" } + ); + newOmniVault.address = await newOmniVault.getAddress(); + await newOmniVault.setRatioFeed(ratioFeedL2.address); + await iToken.setVault(newOmniVault.address); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + await expect(newOmniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee })).to.revertedWithCustomError( + newOmniVault, + "CrossChainAdapterNotSet" + ); + }); + }); + }); + }); +}); diff --git a/projects/tests/omnivault-rebalancer/test/NewERC20Omnitest.test.ts b/projects/tests/omnivault-rebalancer/test/NewERC20Omnitest.test.ts new file mode 100644 index 00000000..c09d51d9 --- /dev/null +++ b/projects/tests/omnivault-rebalancer/test/NewERC20Omnitest.test.ts @@ -0,0 +1,584 @@ +import { ethers, network, upgrades } from "hardhat"; +import { expect } from "chai"; +import { takeSnapshot, time } from "@nomicfoundation/hardhat-network-helpers"; +import { e18, getSlotByName, impersonateWithEth, randomBI, randomBIMax, toWei, approx } from "./helpers/utils.js"; +import { SnapshotRestorer } from "@nomicfoundation/hardhat-network-helpers/src/helpers/takeSnapshot"; +import { AbiCoder, Signer } from "ethers"; +import { Options } from "@layerzerolabs/lz-v2-utilities"; +import { + EndpointMock, + ERC20, + InceptionERC20OmniVault, + InceptionRatioFeed, + InceptionToken, + FerryAdapter, + LZCrossChainAdapterL1, + LZCrossChainAdapterL2, + ERC20Rebalancer, + RatioFeed, + RestakingPool, + InceptionVault, + IERC20Mintable, + MockFraxferry, + FraxFerryLZCrossChainAdapterL2, +} from "../typechain-types"; +import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; +import { min } from "hardhat/internal/util/bigint"; +import { text } from "stream/consumers"; +import { zeroAddress } from "ethereumjs-util"; + +BigInt.prototype.format = function () { + return this.toLocaleString("de-DE"); +}; + +const FRAX_ID = 252n; +const ETH_ID = 1n; +const FRAX_EID = 30255n; +const FRAX_TESTNET_EID = 40255n; +const ETH_EID = 30111n; +const eIds = [ETH_EID, FRAX_EID]; +const chainIds = [ETH_ID, FRAX_ID]; +const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + +describe("Omnivault integration tests", function () { + this.timeout(150000); + let underlyingL1, underlyingL2: IERC20Mintable; + let ferryL2: MockFraxferry; + let adapterFrax: FraxFerryLZCrossChainAdapterL2; + // end new + //Adapters + let adapterL1: LZCrossChainAdapterL1; + //let maliciousAdapterL1: LZCrossChainAdapterL1; + //let adapterFrax: LZCrossChainAdapterL2; + let ethEndpoint: EndpointMock; + let fraxEndpoint: EndpointMock; + + //let maliciousAdapterL2: LZCrossChainAdapterL2; + + // ============ L1 ============ + let ratioFeedL1: RatioFeed; + let iTokenL1: InceptionToken; + let rebalancer: ERC20Rebalancer; + let inceptionVault: InceptionVault; + + // ============ L2 ============ + let iTokenL2: InceptionToken; + //let fraxToken: ERC20; + let omniVault: InceptionERC20OmniVault; // Frax chain + let ratioFeedL2: InceptionRatioFeed; + + let owner: Signer; + let operator: Signer; + let treasury: Signer; + let signer1: Signer; + let signer2: Signer; + let signer3: Signer; + let target: Signer; + + let snapshot: SnapshotRestorer; + let lockboxAddress: String; + + let TARGET = toWei(10); + + async function init(owner: Signer, operator: Signer) { + const block = await ethers.provider.getBlock("latest"); + console.log(`Starting at block number: ${block.number}`); + lockboxAddress = network.config.addresses.lockbox; + + // Deploy fake ERC20 and Ferries + // then deploy L1 incToken + // L1 reb + // L2 CCA + // L2 incToken + // deploy and set ratio feeds + // set target receivers + // set reb in L1it + // set reb delays + // set ratios + + console.log("=== Underlying asset mocks"); + const DummyTokenFactory = await ethers.getContractFactory("DummyToken"); + underlyingL1 = await DummyTokenFactory.deploy(); + (underlyingL1 as any).address = await underlyingL1.getAddress(); + + underlyingL2 = await DummyTokenFactory.deploy(); + (underlyingL2 as any).address = await underlyingL2.getAddress(); + await underlyingL2.mint(signer1, 2n * e18) + + console.log("=== Ferry mocks"); + const MockFerryFactory = await ethers.getContractFactory("MockFraxferry"); + ferryL2 = await MockFerryFactory.deploy(underlyingL2); + (ferryL2 as any).address = await ferryL2.getAddress(); + + console.log("=== CrossChainAdapterL1"); + const ethEndpoint = await ethers.deployContract("EndpointMock", [ETH_EID]); + (ethEndpoint as any).address = await ethEndpoint.getAddress(); + const LZCrossChainAdapterL1 = await ethers.getContractFactory("LZCrossChainAdapterL1"); + const adapterL1 = await upgrades.deployProxy(LZCrossChainAdapterL1, [ + (ethEndpoint as any).address, + (ethEndpoint as any).address, + eIds, + chainIds, + ]); + (adapterL1 as any).address = await adapterL1.getAddress(); + + console.log("=== Frax LZCrossChainAdapterL2"); + const fraxEndpoint = await ethers.deployContract("EndpointMock", [FRAX_EID]); + (fraxEndpoint as any).address = await fraxEndpoint.getAddress(); + const FraxFerryLZCrossChainAdapterL2 = await ethers.getContractFactory("FraxFerryLZCrossChainAdapterL2"); + const adapterFrax = await upgrades.deployProxy(FraxFerryLZCrossChainAdapterL2, [ + (underlyingL2 as any).address, // underlying token + (ferryL2 as any).address, // ferry mock bridge (actually set later) + (fraxEndpoint as any).address, // endpoint + (owner as any).address, // delegate + ETH_ID, // chainID + eIds, + chainIds, + ]); + (adapterFrax as any).address = await adapterFrax.getAddress(); + await fraxEndpoint.setDestLzEndpoint(await adapterL1.getAddress(), await ethEndpoint.getAddress()) + + + + // TODO malicious adapters + + console.log("============ FraxETH ============"); + const sfrxETH = await ethers.getContractAt("ERC20", (network.config as any).addresses.sfrxETH); + + console.log("============ InceptionVault Layer1 ============"); + + console.log("=== InceptionVault"); + console.log((network.config as any).addresses.inceptionVault); + const restakingPoolAdminAddress = await upgrades.erc1967.getAdminAddress((network.config as any).addresses.inceptionVault); + let slot = "0x" + (0).toString(16); + let value = ethers.zeroPadValue((owner as any).address, 32); + await network.provider.send("hardhat_setStorageAt", [restakingPoolAdminAddress, slot, value]); + + const InceptionVaultFactory = await ethers.getContractFactory("InceptionVault_EL", { + signer: owner, + libraries: { InceptionLibrary: network.config.addresses.lib }, + }); + await upgrades.forceImport(network.config.addresses.inceptionVault, InceptionVaultFactory); + const inceptionVault = await upgrades.upgradeProxy(network.config.addresses.inceptionVault, InceptionVaultFactory, { + unsafeAllowLinkedLibraries: true, + }); + inceptionVault.address = await inceptionVault.getAddress(); + + console.log("=== InceptionToken"); + /* + const inceptionTokenAdminAddress = await upgrades.erc1967.getAdminAddress(network.config.addresses.inceptionToken); + console.log(inceptionTokenAdminAddress); + slot = "0x" + (0).toString(16); + value = ethers.zeroPadValue(owner.address, 32); + await network.provider.send("hardhat_setStorageAt", [inceptionTokenAdminAddress, slot, value]); + const InceptionTokenFactory = await ethers.getContractFactory("InceptionToken", owner); + await upgrades.forceImport(network.config.addresses.inceptionToken, InceptionTokenFactory); + const inceptionToken = await upgrades.upgradeProxy(network.config.addresses.inceptionToken, InceptionTokenFactory); + */ + const iTokenFactoryL1 = await ethers.getContractFactory("InceptionToken"); + const inceptionToken = await upgrades.deployProxy(iTokenFactoryL1, ["InsfrxETH", "InsfrxETH"], { kind: "transparent" }); + await inceptionToken.waitForDeployment(); + inceptionToken.address = await inceptionToken.getAddress(); + + // 3. set the vault + let tx = await inceptionToken.setVault(inceptionVault.address); + await tx.wait(); + + + console.log("=== RatioFeed"); + /* + const ratioFeedAdminAddress = await upgrades.erc1967.getAdminAddress(network.config.addresses.ratioFeed); + slot = "0x" + (0).toString(16); + value = ethers.zeroPadValue(owner.address, 32); + await network.provider.send("hardhat_setStorageAt", [ratioFeedAdminAddress, slot, value]); + const RatioFeed = await ethers.getContractFactory("RatioFeed", owner); + const ratioFeedL1 = await upgrades.upgradeProxy(network.config.addresses.ratioFeed, RatioFeed); + ratioFeedL1.address = await ratioFeedL1.getAddress(); +*/ + const iRatioFeedFactory = await ethers.getContractFactory("InceptionRatioFeed", owner); + const ratioFeedL1 = await upgrades.deployProxy(iRatioFeedFactory, []); + await ratioFeedL1.waitForDeployment(); + ratioFeedL1.address = await ratioFeedL1.getAddress(); + await (await ratioFeedL1.updateRatioBatch([await inceptionToken.getAddress()], [e18])).wait(); + + console.log("=== ERC20Rebalancer"); + const Rebalancer = await ethers.getContractFactory("ERC20Rebalancer"); + const rebalancer = await upgrades.deployProxy(Rebalancer, [ + // def chainid + // incToken + // underlying asset + // lockbox + // ivault + // adapter + // operator + 31337, + inceptionToken.address, + underlyingL1.address, + lockboxAddress, + inceptionVault.address, + adapterL1.address, + //ratioFeedL1.address, + operator.address, + ]); + rebalancer.address = await rebalancer.getAddress(); + await rebalancer.connect(owner).setDefaultChainId(FRAX_ID); + await rebalancer.connect(owner).setInfoMaxDelay(3600n); + + tx = await inceptionToken.setRebalancer(rebalancer.address); + await tx.wait(); + + ///////////// end layer 1 ///////////// + + console.log("============ OmniVault Layer2 ============"); + console.log("=== iToken"); + const iTokenFactory = await ethers.getContractFactory("InceptionToken", owner); + const iToken = await upgrades.deployProxy(iTokenFactory, ["TEST InceptionLRT Token", "tINt"]); + await iToken.waitForDeployment(); + iToken.address = await iToken.getAddress(); + + console.log("=== InceptionRatioFeed"); + //const iRatioFeedFactory = await ethers.getContractFactory("InceptionRatioFeed", owner); + const ratioFeedL2 = await upgrades.deployProxy(iRatioFeedFactory, []); + await ratioFeedL2.waitForDeployment(); + ratioFeedL2.address = await ratioFeedL2.getAddress(); + await (await ratioFeedL2.updateRatioBatch([iToken.address], [e18])).wait(); + + console.log("=== OmniVault"); + const omniVaultFactory = await ethers.getContractFactory("ERC20OmniVault_E2", owner); + const omniVault = await upgrades.deployProxy(omniVaultFactory, [ + "OmniVault", + operator.address, + iToken.address, + await underlyingL2.getAddress(), + adapterFrax.address, + ]); + omniVault.address = await omniVault.getAddress(); + await omniVault.setRatioFeed(ratioFeedL2.address); + await omniVault.setTreasuryAddress(treasury.address); + await iToken.setVault(omniVault.address); + + // Adapters final setup + await adapterL1.setTargetReceiver(rebalancer.address); + await adapterL1.setPeer(FRAX_EID, ethers.zeroPadValue(adapterFrax.address, 32)); + await adapterFrax.setTargetReceiver(omniVault.address); + await adapterFrax.setPeer(ETH_EID, ethers.zeroPadValue(adapterL1.address, 32)); + await adapterFrax.setDestination(await rebalancer.getAddress()) + + await ratioFeedL1.updateRatioBatch([inceptionToken.address], [e18]); + await ratioFeedL2.updateRatioBatch([iToken.address], [e18]); + + return [ + adapterL1, // l1 receiver adapter + ethEndpoint, + adapterFrax, // l2 adapter + fraxEndpoint, + inceptionToken, // l1 token + rebalancer, + ratioFeedL1, + inceptionVault, // l1 + iToken, // l2 + ratioFeedL2, + omniVault, // l2 + // maliciousAdapterL1, + // maliciousAdapterL2, + ]; + } + + + before(async function () { + [owner, operator, treasury, signer1, signer2, signer3, target] = await ethers.getSigners(); + [ + adapterL1, // l1 receiver adapter + ethEndpoint, + adapterFrax, // l2 adapter + fraxEndpoint, + iTokenL1, // l1 token + rebalancer, + ratioFeedL1, + inceptionVault, // l1 + iTokenL2, // l2 + ratioFeedL2, + omniVault, + ] = await init(owner, operator); + + snapshot = await takeSnapshot(); + }); + + describe("InceptionVault", function () { + describe("After deployments checks", function () { + before(async function () { + await snapshot.restore(); + }); + + it("Signer can stake", async function () { + await underlyingL2.connect(signer1).approve(omniVault.getAddress(), 2n * e18) + await omniVault.connect(signer1).deposit(2n * e18, signer1); + }); + + it("Get min stake amount", async function () { + console.log("Min stake amount: ", await omniVault.minAmount()); + }); + }); + }); + + + + + + + + describe("Bridge base flow", function () { + const TARGET = e18 / 10n; + let iTokenOpt: InceptionToken; + let omniVaultOpt: InceptionERC20OmniVault; + let ratioFeedL2Opt: InceptionRatioFeed; + before(async function () { + await snapshot.restore(); + }) + + + it("Sync ratio from ETH to FRAX", async function () { + const l1Ratio = await inceptionVault.ratio(); + console.log("L1 ratio:", l1Ratio.format()); + await ratioFeedL2.updateRatioBatch([iTokenL2.address], [l1Ratio]); + console.log("Frax ratio:", (await omniVault.ratio()).format()); + }); + + let sharesReceived = 0n; + it("Stake on FRAX", async function () { + await underlyingL2.mint(signer1, TARGET + e18); + await underlyingL2.mint(signer2, e18); + await underlyingL2.connect(signer1).approve(omniVault, TARGET + e18); + await omniVault.connect(signer1).deposit(TARGET + e18, signer1); + await underlyingL2.connect(signer2).approve(omniVault, e18); + await omniVault.connect(signer2).deposit(e18, signer2); + expect(await omniVault.getFreeBalance()).to.be.approximately(TARGET + e18 + e18, 10n); + console.log(await iTokenL2.totalSupply()); + console.log(await omniVault.getFlashCapacity()); + console.log(await omniVault.getFreeBalance()); + console.log(await ethers.provider.getBalance(omniVault.getAddress())); + }); + + it("updateTreasuryData reverts when nothing was ever received", async function () { + await expect(rebalancer.connect(signer1).updateTreasuryData()).to.be.reverted; + }); + + let mintShares = 0n; + let l2Balance = 0n; + it("Send info from FRAX", async function () { + const totalSupply = await iTokenL2.totalSupply(); + mintShares += totalSupply; + const ethBalance = await omniVault.getFlashCapacity(); + l2Balance = ethBalance; + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + const timestamp = (await time.latest()) + 1; + const tx = await omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee }); + + const txData = await rebalancer.getTransactionData(); + await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(FRAX_ID, timestamp, ethBalance, totalSupply); + expect(txData.inceptionTokenSupply).to.be.eq(totalSupply); + expect(txData.underlyingBalance).to.be.eq(ethBalance); + expect(txData.timestamp).to.be.eq(timestamp); + }); + + it("Update data and mint", async function () { + const inEthSupplyBefore = await iTokenL1.totalSupply(); + + const tx = await rebalancer.connect(signer1).updateTreasuryData(); + + const inEthSupplyAfter = await iTokenL1.totalSupply(); + await expect(tx).to.emit(rebalancer, "SyncedSupplyChanged").withArgs(0n, mintShares); + await expect(tx).to.emit(rebalancer, "TreasuryUpdateMint").withArgs(mintShares); + await expect(tx).changeTokenBalance(iTokenL1, lockboxAddress, mintShares); + expect(inEthSupplyAfter - inEthSupplyBefore).to.be.eq(mintShares); + }); + + it("updateTreasuryData reverts when there are no changes", async function () { + await expect(rebalancer.connect(signer1).updateTreasuryData()).to.be.revertedWithCustomError(rebalancer, "NoRebalancingRequired"); + }); + + it("updateTreasuryData reverts when the data packet is expired", async function () { + await time.increase(3601); + await expect(rebalancer.connect(signer1).updateTreasuryData()).to.be.revertedWithCustomError(rebalancer, "OutdatedAssetInfo");; + }); + + it("Flash withdraw on FRAX", async function () { + let iBalance = await iTokenL2.balanceOf(signer2); + let underPreBal = await underlyingL2.balanceOf(signer2); + await omniVault.connect(signer2).flashWithdraw(iBalance, await signer2.getAddress()) + expect(await iTokenL2.balanceOf(signer2)).to.be.eq(0n); + expect(await underlyingL2.balanceOf(signer2)).to.be.above(underPreBal) + }); + + it("Burn tokens on L1 after the withdrawal on L2", async () => { + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + const timestamp = (await time.latest()) + 1; + let tx = await omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee }); + + const txData = await rebalancer.getTransactionData(); + await expect(tx).to.emit(rebalancer, "L2InfoReceived"); + + const inEthSupplyBefore = await iTokenL1.totalSupply(); + + tx = await rebalancer.connect(signer1).updateTreasuryData(); + + const inEthSupplyAfter = await iTokenL1.totalSupply(); + await expect(tx).to.emit(rebalancer, "SyncedSupplyChanged")//.withArgs(mintShares, mintShares-e18); + await expect(tx).to.emit(rebalancer, "TreasuryUpdateBurn")//.withArgs(approx(e18, 100n)); + await expect(tx).changeTokenBalance(iTokenL1, lockboxAddress, -e18+1n); + expect(inEthSupplyBefore- inEthSupplyAfter).to.be.approximately(e18, 100n); + }) + + let amountFerried = 0n; + let snap2; + it("Move tokens from L2 to L1 and stake immediately", async function () { + snap2 = await takeSnapshot(); + + await underlyingL2.mint(signer1, TARGET + e18); + await underlyingL2.mint(signer2, e18); + await underlyingL2.connect(signer1).approve(omniVault, TARGET + e18); + await omniVault.connect(signer1).deposit(TARGET + e18, signer1); + await underlyingL2.connect(signer2).approve(omniVault, e18); + await omniVault.connect(signer2).deposit(e18, signer2); + + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + const timestamp = (await time.latest()) + 1; + await omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee }); + + + await expect(omniVault.sendERC20ToL1(1n)).to.emit(ferryL2, "Embark").withArgs( + anyValue, + anyValue, + anyValue, + (v: bigint) => { + amountFerried = v; + console.log(v); + return true; + }, + anyValue); + // just mint ferried tokens to L1 rebalancer without emulating the actual disembark + await underlyingL1.mint(await rebalancer.getAddress(), amountFerried) + expect(await rebalancer.connect(signer1).updateTreasuryData()).to.emit(rebalancer, "TransferToInceptionVault").withArgs(amountFerried); + await snap2.restore(); + }) + + it("Won't stake by non-op and other negative scenarios", async () => { + const oldAF = amountFerried; + const s = await takeSnapshot(); + + expect(rebalancer.connect(owner).setInceptionToken(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); + + await expect(omniVault.sendERC20ToL1(1n)).to.emit(ferryL2, "Embark").withArgs( + anyValue, + anyValue, + anyValue, + (v: bigint) => { + amountFerried = v; + console.log(v); + return true; + }, + anyValue); + // just mint ferried tokens to L1 rebalancer without emulating the actual disembark + await underlyingL1.mint(await rebalancer.getAddress(), amountFerried) + const s2 = await takeSnapshot(); + await expect(rebalancer.connect(owner).setInceptionVault(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); + //await expect(rebalancer.connect(operator).stake(amountFerried)).to.be.revertedWithCustomError(rebalancer, "InceptionVaultNotSet"); + await s2.restore(); + await expect(rebalancer.connect(signer3).stake(amountFerried)).to.be.revertedWithCustomError(rebalancer, "OnlyOperator"); + + await s.restore(); + amountFerried = oldAF; + }) + + it("Separate stake() by rebalancer", async function () { + await expect(omniVault.sendERC20ToL1(1n)).to.emit(ferryL2, "Embark").withArgs( + anyValue, + anyValue, + anyValue, + (v: bigint) => { + amountFerried = v; + console.log(v); + return true; + }, + anyValue); + // just mint ferried tokens to L1 rebalancer without emulating the actual disembark + await underlyingL1.mint(await rebalancer.getAddress(), amountFerried) + + const beforeDepo = await underlyingL1.balanceOf(inceptionVault.address); + //console.log(beforeDepo); + await expect(rebalancer.connect(operator).stake(amountFerried*4n)).to.be.revertedWithCustomError(rebalancer, "StakeAmountExceedsBalance"); + let tx = await rebalancer.connect(operator).stake(amountFerried) + await tx.wait(); + expect(tx).to.emit(rebalancer, "TransferToInceptionVault").withArgs(amountFerried); + const afterDepo = await await underlyingL1.balanceOf(inceptionVault.address); + //console.log(afterDepo); + expect(afterDepo - beforeDepo).to.be.eq(amountFerried); + }); + + it("Rebalancer access control and validation", async () => { + const sn = await takeSnapshot(); + await expect(rebalancer.connect(operator).setDefaultAdapter(adapterL1.address)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(owner).setDefaultAdapter(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); + expect(await rebalancer.connect(owner).setDefaultAdapter(adapterL1.address)).to.emit(rebalancer, "DefaultAdapterChanged").withArgs(adapterL1.address); + + await expect(rebalancer.connect(operator).setInceptionToken(adapterL1.address)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(owner).setInceptionToken(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); + expect(await rebalancer.connect(owner).setInceptionToken(iTokenL1.address)).to.emit(rebalancer, "InceptionTokenChanged").withArgs(iTokenL1.address); + + await expect(rebalancer.connect(operator).setUnderlyingAsset(adapterL1.address)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(owner).setUnderlyingAsset(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); + expect(await rebalancer.connect(owner).setUnderlyingAsset(underlyingL1.address)).to.emit(rebalancer, "UnderlyingAssetChanged").withArgs(underlyingL1.address); + + await expect(rebalancer.connect(operator).setLockbox(adapterL1.address)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(owner).setLockbox(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); + expect(await rebalancer.connect(owner).setLockbox(lockboxAddress)).to.emit(rebalancer, "LockboxChanged").withArgs(lockboxAddress); + + await expect(rebalancer.connect(operator).setInceptionVault(adapterL1.address)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(owner).setInceptionVault(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); + expect(await rebalancer.connect(owner).setInceptionVault(inceptionVault.address)).to.emit(rebalancer, "LiqPoolChanged").withArgs(inceptionVault.address); + + await expect(rebalancer.connect(operator).setOperator(adapterL1.address)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(owner).setOperator(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); + expect(await rebalancer.connect(owner).setOperator(operator)).to.emit(rebalancer, "OperatorChanged").withArgs(operator); + + await expect(rebalancer.connect(operator).setDefaultChainId(228n)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(owner).setDefaultChainId(0n)).to.be.revertedWithCustomError(rebalancer, "SettingZeroChainId"); + + await expect(rebalancer.connect(operator).setInfoMaxDelay(228n)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(owner).setInfoMaxDelay(0n)).to.be.revertedWithCustomError(rebalancer, "SettingZeroDelay"); + await sn.restore(); + }) + + it("L2 adapter access control and validation", async () => { + const sn = await takeSnapshot(); + + await expect(adapterFrax.connect(operator).setFerry(adapterL1.address)).to.be.revertedWithCustomError(adapterFrax, "OwnableUnauthorizedAccount"); + await expect(adapterFrax.connect(owner).setFerry(zeroAddress())).to.be.revertedWithCustomError(adapterFrax, "errNullFerry"); + expect(await adapterFrax.connect(owner).setFerry(ferryL2.address)).to.emit(adapterFrax, "DefaultAdapterChanged").withArgs(ferryL2.address); + + await expect(adapterFrax.connect(operator).setDestination(adapterL1.address)).to.be.revertedWithCustomError(adapterFrax, "OwnableUnauthorizedAccount"); + await expect(adapterFrax.connect(owner).setDestination(zeroAddress())).to.be.revertedWithCustomError(adapterFrax, "errNullDestination"); + expect(await adapterFrax.connect(owner).setDestination(rebalancer.address)).to.emit(adapterFrax, "DestinationChanged").withArgs(rebalancer.address); + + await expect(adapterFrax.connect(operator).sendDataL1( + "0x000000000000000000000000c671A6a4bF4Dcd0EE94d8D5558cD8B6EAdFD5A19", + "0x000000000000000000000000c671A6a4bF4Dcd0EE94d8D5558cD8B6EAdFD5A19" + )).to.be.revertedWithCustomError(adapterFrax, "NotTargetReceiver"); + + await expect(adapterFrax.connect(operator).recoverFunds()).to.be.revertedWithCustomError(adapterFrax, "OwnableUnauthorizedAccount"); + expect(await adapterFrax.connect(owner).recoverFunds()).to.emit("IERC20", "Transfer"); + + await expect(adapterFrax.connect(operator).sendEthCrossChain(0n, "0x0001")).to.be.revertedWithCustomError(adapterFrax, "NotAllowedInThisAdapterType"); + + await expect(adapterFrax.connect(operator).quoteSendEth(0n, "0x0001")).to.be.revertedWithCustomError(adapterFrax, "NotAllowedInThisAdapterType"); + + await sn.restore(); + }) + }) +}) + diff --git a/projects/tests/omnivault-rebalancer/test/Rebalancer.test.ts b/projects/tests/omnivault-rebalancer/test/Rebalancer.test.ts new file mode 100644 index 00000000..c830b3cb --- /dev/null +++ b/projects/tests/omnivault-rebalancer/test/Rebalancer.test.ts @@ -0,0 +1,3175 @@ +import { ethers, network, upgrades } from "hardhat"; +import { expect } from "chai"; +import { takeSnapshot, time } from "@nomicfoundation/hardhat-network-helpers"; +import { e18, getSlotByName, randomBI, randomBIMax, toWei } from "./helpers/utils.js"; +import { SnapshotRestorer } from "@nomicfoundation/hardhat-network-helpers/src/helpers/takeSnapshot"; +import { AbiCoder, Signer } from "ethers"; +import { Options } from "@layerzerolabs/lz-v2-utilities"; +import { + CToken, + EndpointMock, + InceptionOmniVault, + InceptionRatioFeed, + InceptionToken, + LZCrossChainAdapterL1, + LZCrossChainAdapterL2, + NativeRebalancer, + ProtocolConfig, + RatioFeed, + RestakingPool, +} from "../typechain-types"; +import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; +import { min } from "hardhat/internal/util/bigint"; + +BigInt.prototype.format = function () { + return this.toLocaleString("de-DE"); +}; + +const ARB_ID = 42161n; +const OPT_ID = 10n; +const ETH_ID = 1n; +const ARB_EID = 30101n; +const OPT_EID = 30110n; +const ETH_EID = 30111n; +const eIds = [ETH_EID, ARB_EID, OPT_EID]; +const chainIds = [ETH_ID, ARB_ID, OPT_ID]; +const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + +describe("Omnivault integration tests", function () { + this.timeout(150000); + //Adapters + let adapterEth: LZCrossChainAdapterL1; + let maliciousAdapterL1: LZCrossChainAdapterL1; + let adapterArb: LZCrossChainAdapterL2; + let adapterOpt: LZCrossChainAdapterL2; + let ethEndpoint: EndpointMock; + let arbEndpoint: EndpointMock; + let optEndpoint: EndpointMock; + let maliciousAdapterL2: LZCrossChainAdapterL2; + //L1 + let ratioFeedL1: RatioFeed; + let inEth: CToken; + let rebalancer: NativeRebalancer; + let restakingPool: RestakingPool; + let restakingPoolConfig: ProtocolConfig; + //L2 + let iToken: InceptionToken; + let omniVault: InceptionOmniVault; //Arbitrum + let ratioFeedL2: InceptionRatioFeed; + + let owner: Signer; + let operator: Signer; + let treasury: Signer; + let signer1: Signer; + let signer2: Signer; + let signer3: Signer; + let target: Signer; + + let snapshot: SnapshotRestorer; + let lockboxAddress: String; + + let TARGET = toWei(10); + + async function init(owner: Signer, operator: Signer) { + const block = await ethers.provider.getBlock("latest"); + console.log(`Starting at block number: ${block.number}`); + lockboxAddress = network.config.addresses.lockbox; + + // ____ _ _ _ _ + // / ___|_ __ ___ ___ ___ ___| |__ __ _(_)_ __ __ _ __| | __ _ _ __ | |_ ___ _ __ ___ + // | | | '__/ _ \/ __/ __|/ __| '_ \ / _` | | '_ \ / _` |/ _` |/ _` | '_ \| __/ _ \ '__/ __| + // | |___| | | (_) \__ \__ \ (__| | | | (_| | | | | | | (_| | (_| | (_| | |_) | || __/ | \__ \ + // \____|_| \___/|___/___/\___|_| |_|\__,_|_|_| |_| \__,_|\__,_|\__,_| .__/ \__\___|_| |___/ + // |_| + console.log("============ Crosschain adapters ============"); + console.log("=== CrossChainAdapterL1"); + const ethEndpoint = await ethers.deployContract("EndpointMock", [ETH_EID]); + ethEndpoint.address = await ethEndpoint.getAddress(); + const LZCrossChainAdapterL1 = await ethers.getContractFactory("LZCrossChainAdapterL1"); + const adapterEth = await upgrades.deployProxy(LZCrossChainAdapterL1, [ethEndpoint.address, owner.address, eIds, chainIds]); + adapterEth.address = await adapterEth.getAddress(); + + console.log("=== Arbitrum LZCrossChainAdapterL2"); + const arbEndpoint = await ethers.deployContract("EndpointMock", [ARB_EID]); + arbEndpoint.address = await arbEndpoint.getAddress(); + const LZCrossChainAdapterL2 = await ethers.getContractFactory("LZCrossChainAdapterL2"); + const adapterArb = await upgrades.deployProxy(LZCrossChainAdapterL2, [arbEndpoint.address, owner.address, ETH_ID, eIds, chainIds]); + adapterArb.address = await adapterArb.getAddress(); + adapterArb.sendData = async function (timestamp, vaultBalance, totalSupply) { + const message = encodePayload(timestamp, vaultBalance, totalSupply); + const fees = await this.quote(message, options); + return await this.sendDataL1(message, options, { value: fees }); + }; + + console.log("=== Optimism LZCrossChainAdapterL2"); + const optEndpoint = await ethers.deployContract("EndpointMock", [OPT_EID]); + optEndpoint.address = await optEndpoint.getAddress(); + const adapterOpt = await upgrades.deployProxy(LZCrossChainAdapterL2, [optEndpoint.address, owner.address, ETH_ID, eIds, chainIds]); + adapterOpt.address = await adapterOpt.getAddress(); + adapterOpt.sendData = async function (timestamp, vaultBalance, totalSupply) { + const message = encodePayload(timestamp, vaultBalance, totalSupply); + const fees = await this.quote(message, options); + return await this.sendDataL1(message, options, { value: fees }); + }; + + //Connect endpoints + await arbEndpoint.setDestLzEndpoint(adapterEth.address, ethEndpoint.address); + await optEndpoint.setDestLzEndpoint(adapterEth.address, ethEndpoint.address); + await ethEndpoint.setDestLzEndpoint(adapterArb.address, arbEndpoint.address); + await ethEndpoint.setDestLzEndpoint(adapterOpt.address, optEndpoint.address); + + //Malicious adapters + const maliciousAdapterL1 = await upgrades.deployProxy(LZCrossChainAdapterL1, [ethEndpoint.address, owner.address, eIds, chainIds]); + maliciousAdapterL1.address = await maliciousAdapterL1.getAddress(); + + const maliciousAdapterL2 = await upgrades.deployProxy(LZCrossChainAdapterL2, [ + arbEndpoint.address, + owner.address, + ETH_ID, + eIds, + chainIds, + ]); + maliciousAdapterL2.address = await maliciousAdapterL2.getAddress(); + + // ____ _ _ _ _ _ _ + // | _ \ ___ ___| |_ __ _| | _(_)_ __ __ _ _ __ ___ ___ | | | | / | + // | |_) / _ \/ __| __/ _` | |/ / | '_ \ / _` | | '_ \ / _ \ / _ \| | | | | | + // | _ < __/\__ \ || (_| | <| | | | | (_| | | |_) | (_) | (_) | | | |___| | + // |_| \_\___||___/\__\__,_|_|\_\_|_| |_|\__, | | .__/ \___/ \___/|_| |_____|_| + // |___/ |_| + console.log("============ Restaking Pool Layer1 ============"); + console.log("=== ProtocolConfig"); + const protocolConfigAdminAddress = await upgrades.erc1967.getAdminAddress(network.config.addresses.restakingPoolConfig); + let slot = "0x" + (0).toString(16); + let value = ethers.zeroPadValue(owner.address, 32); + await network.provider.send("hardhat_setStorageAt", [protocolConfigAdminAddress, slot, value]); + + const ProtocolConfig = await ethers.getContractFactory("ProtocolConfig", owner); + const restakingPoolConfig = await upgrades.upgradeProxy(network.config.addresses.restakingPoolConfig, ProtocolConfig); + //Updating governance address + slot = "0x" + getSlotByName("genesis.config.Governance"); + value = ethers.zeroPadValue(owner.address, 32); + await network.provider.send("hardhat_setStorageAt", [network.config.addresses.restakingPoolConfig, slot, value]); + + console.log("=== RestakingPool"); + const restakingPoolAdminAddress = await upgrades.erc1967.getAdminAddress(network.config.addresses.restakingPool); + slot = "0x" + (0).toString(16); + value = ethers.zeroPadValue(owner.address, 32); + await network.provider.send("hardhat_setStorageAt", [restakingPoolAdminAddress, slot, value]); + const RestakingPool = await ethers.getContractFactory("RestakingPool", { + signer: owner, + libraries: { InceptionLibrary: network.config.addresses.lib }, + }); + await upgrades.forceImport(network.config.addresses.restakingPool, RestakingPool); + const restakingPool = await upgrades.upgradeProxy(network.config.addresses.restakingPool, RestakingPool, { + unsafeAllowLinkedLibraries: true, + }); + restakingPool.address = await restakingPool.getAddress(); + + console.log("=== cToken"); + const cTokenAdminAddress = await upgrades.erc1967.getAdminAddress(network.config.addresses.cToken); + slot = "0x" + (0).toString(16); + value = ethers.zeroPadValue(owner.address, 32); + await network.provider.send("hardhat_setStorageAt", [cTokenAdminAddress, slot, value]); + const CToken = await ethers.getContractFactory("cToken", owner); + const cToken = await upgrades.upgradeProxy(network.config.addresses.cToken, CToken); + cToken.address = await cToken.getAddress(); + + console.log("=== RatioFeed"); + const ratioFeedAdminAddress = await upgrades.erc1967.getAdminAddress(network.config.addresses.ratioFeed); + slot = "0x" + (0).toString(16); + value = ethers.zeroPadValue(owner.address, 32); + await network.provider.send("hardhat_setStorageAt", [ratioFeedAdminAddress, slot, value]); + const RatioFeed = await ethers.getContractFactory("RatioFeed", owner); + const ratioFeedL1 = await upgrades.upgradeProxy(network.config.addresses.ratioFeed, RatioFeed); + ratioFeedL1.address = await ratioFeedL1.getAddress(); + + console.log("=== NativeRebalancer"); + const Rebalancer = await ethers.getContractFactory("NativeRebalancer"); + const rebalancer = await upgrades.deployProxy(Rebalancer, [ + cToken.address, + lockboxAddress, + restakingPool.address, + adapterEth.address, + ratioFeedL1.address, + operator.address, + ]); + rebalancer.address = await rebalancer.getAddress(); + await rebalancer.connect(owner).addChainId(ARB_ID); + // await rebalancer.connect(owner).addChainId(OPT_ID); + await restakingPoolConfig.connect(owner).setRebalancer(rebalancer.address); + + // ___ ___ __ _ _ _ ____ + // / _ \ _ __ ___ _ __ (_) \ / /_ _ _ _| | |_ | | |___ \ + // | | | | '_ ` _ \| '_ \| |\ \ / / _` | | | | | __| | | __) | + // | |_| | | | | | | | | | | \ V / (_| | |_| | | |_ | |___ / __/ + // \___/|_| |_| |_|_| |_|_| \_/ \__,_|\__,_|_|\__| |_____|_____| + // + console.log("============ OmniVault Layer2 ============"); + console.log("=== iToken"); + const iTokenFactory = await ethers.getContractFactory("InceptionToken", owner); + const iToken = await upgrades.deployProxy(iTokenFactory, ["TEST InceptionLRT Token", "tINt"]); + await iToken.waitForDeployment(); + iToken.address = await iToken.getAddress(); + + console.log("=== InceptionRatioFeed"); + const iRatioFeedFactory = await ethers.getContractFactory("InceptionRatioFeed", owner); + const ratioFeedL2 = await upgrades.deployProxy(iRatioFeedFactory, []); + await ratioFeedL2.waitForDeployment(); + ratioFeedL2.address = await ratioFeedL2.getAddress(); + await (await ratioFeedL2.updateRatioBatch([iToken.address], [e18])).wait(); + + console.log("=== OmniVault"); + const omniVaultFactory = await ethers.getContractFactory("InceptionOmniVault", owner); + const omniVault = await upgrades.deployProxy(omniVaultFactory, ["OmniVault", operator.address, iToken.address, adapterArb.address], { + initializer: "initialize", + }); + omniVault.address = await omniVault.getAddress(); + await omniVault.setRatioFeed(ratioFeedL2.address); + await omniVault.setTreasuryAddress(treasury.address); + await iToken.setVault(omniVault.address); + + //Adapters final setup + await adapterEth.setTargetReceiver(rebalancer.address); + await adapterEth.setPeer(ARB_EID, ethers.zeroPadValue(adapterArb.address, 32)); + await adapterEth.setPeer(OPT_EID, ethers.zeroPadValue(adapterOpt.address, 32)); + await adapterArb.setTargetReceiver(omniVault.address); + await adapterArb.setPeer(ETH_EID, ethers.zeroPadValue(adapterEth.address, 32)); + await adapterOpt.setTargetReceiver(omniVault.address); + await adapterOpt.setPeer(ETH_EID, ethers.zeroPadValue(adapterEth.address, 32)); + await maliciousAdapterL1.setPeer(ARB_EID, ethers.zeroPadValue(adapterArb.address, 32)); + await maliciousAdapterL2.setPeer(ETH_EID, ethers.zeroPadValue(adapterEth.address, 32)); + + return [ + adapterEth, + ethEndpoint, + adapterArb, + arbEndpoint, + adapterOpt, + optEndpoint, + cToken, + rebalancer, + ratioFeedL1, + restakingPool, + restakingPoolConfig, + iToken, + ratioFeedL2, + omniVault, + maliciousAdapterL1, + maliciousAdapterL2, + ]; + } + + async function addReplenishBonusToOmniVault(amount) { + if (amount > 0n) { + expect(await iToken.balanceOf(signer3.address)).to.be.eq(0n); + await omniVault.connect(signer3).deposit(signer3.address, { value: amount }); + const shares = await iToken.balanceOf(signer3.address); + await omniVault.connect(signer3).flashWithdraw(shares, signer3.address); + } + return await omniVault.depositBonusAmount(); + } + + function encodePayload(timestamp, ethAmount, totalSupply) { + const abiCoder = new AbiCoder(); + return abiCoder.encode(["uint256", "uint256", "uint256"], [timestamp, totalSupply, ethAmount]); + } + + before(async function () { + [owner, operator, treasury, signer1, signer2, signer3, target] = await ethers.getSigners(); + [ + adapterEth, + ethEndpoint, + adapterArb, + arbEndpoint, + adapterOpt, + optEndpoint, + inEth, + rebalancer, + ratioFeedL1, + restakingPool, + restakingPoolConfig, + iToken, + ratioFeedL2, + omniVault, + maliciousAdapterL1, + maliciousAdapterL2, + ] = await init(owner, operator); + + snapshot = await takeSnapshot(); + }); + + describe("Restaking pool", function () { + describe("After deployments checks", function () { + before(async function () { + await snapshot.restore(); + }); + + it("Signer can stake", async function () { + await restakingPool.connect(signer1)["stake()"]({ value: 2n * e18 }); + }); + + it("Get min stake amount", async function () { + console.log("Min stake amount: ", await restakingPool.getMinStake()); + }); + }); + }); + + describe("Bridge base flow", function () { + const TARGET = e18 / 10n; + let iTokenOpt: InceptionToken; + let omniVaultOpt: InceptionOmniVault; + let ratioFeedL2Opt: InceptionRatioFeed; + before(async function () { + await snapshot.restore(); + + console.log("============ OmniVault Layer2 Optimism============"); + console.log("=== iTokenOpt"); + const iTokenFactory = await ethers.getContractFactory("InceptionToken", owner); + iTokenOpt = await upgrades.deployProxy(iTokenFactory, ["TEST InceptionLRT Token", "tINt"]); + await iTokenOpt.waitForDeployment(); + iTokenOpt.address = await iTokenOpt.getAddress(); + + console.log("=== InceptionRatioFeed"); + const iRatioFeedFactory = await ethers.getContractFactory("InceptionRatioFeed", owner); + ratioFeedL2Opt = await upgrades.deployProxy(iRatioFeedFactory, []); + ratioFeedL2Opt.waitForDeployment(); + ratioFeedL2Opt.address = await ratioFeedL2Opt.getAddress(); + await (await ratioFeedL2Opt.updateRatioBatch([iTokenOpt.address], [e18])).wait(); + + console.log("=== OmniVault"); + const omniVaultFactory = await ethers.getContractFactory("InceptionOmniVault", owner); + omniVaultOpt = await upgrades.deployProxy( + omniVaultFactory, + ["omniVaultOpt", operator.address, iTokenOpt.address, adapterOpt.address], + { initializer: "initialize" } + ); + omniVaultOpt.address = await omniVaultOpt.getAddress(); + await omniVaultOpt.setRatioFeed(ratioFeedL2Opt.address); + await omniVaultOpt.setTreasuryAddress(treasury.address); + await iTokenOpt.setVault(omniVaultOpt.address); + + await omniVault.setTargetFlashCapacity(TARGET); + await omniVaultOpt.setTargetFlashCapacity(TARGET); + + await rebalancer.setUpdateable(true); + }); + + it("Sync ratio from ETH to ARB and OPT", async function () { + const l1Ratio = await inEth.ratio(); + console.log("L1 ratio:", l1Ratio.format()); + await ratioFeedL2.updateRatioBatch([iToken.address], [l1Ratio]); + await ratioFeedL2Opt.updateRatioBatch([iTokenOpt.address], [l1Ratio]); + console.log("ARB ratio:", (await omniVault.ratio()).format()); + console.log("OPT ratio:", (await omniVaultOpt.ratio()).format()); + console.log("Available to stake:", (await restakingPool.availableToStake()).format()); + }); + + it("Stake on ARB", async function () { + await omniVault.connect(signer1).deposit(signer1, { value: TARGET + e18 }); + await omniVault.connect(signer2).deposit(signer2, { value: e18 }); + expect(await omniVault.getFreeBalance()).to.be.eq(e18 + e18); + console.log(await iToken.totalSupply()); + console.log(await omniVault.getFlashCapacity()); + console.log(await omniVault.getFreeBalance()); + console.log(await ethers.provider.getBalance(omniVault.address)); + }); + + it("Stake on OPT", async function () { + await omniVaultOpt.connect(signer1).deposit(signer1, { value: TARGET + e18 }); + expect(await omniVaultOpt.getFreeBalance()).to.be.eq(e18); + console.log(await iTokenOpt.totalSupply()); + console.log(await omniVaultOpt.getFlashCapacity()); + console.log(await omniVaultOpt.getFreeBalance()); + console.log(await ethers.provider.getBalance(omniVaultOpt.address)); + }); + + let mintShares = 0n; + it("Send info from ARB", async function () { + const totalSupply = await iToken.totalSupply(); + mintShares += totalSupply; + const ethBalance = await omniVault.getFlashCapacity(); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + const timestamp = (await time.latest()) + 1; + const tx = await omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee }); + + const txData = await rebalancer.getTransactionData(ARB_ID); + await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(ARB_ID, timestamp, ethBalance, totalSupply); + expect(txData.inceptionTokenBalance).to.be.eq(totalSupply); + expect(txData.ethBalance).to.be.eq(ethBalance); + expect(txData.timestamp).to.be.eq(timestamp); + }); + + it("Add OPT and send data from OPT", async function () { + await rebalancer.connect(owner).addChainId(OPT_ID); + await adapterOpt.connect(owner).setTargetReceiver(omniVaultOpt.address); + + const totalSupply = await iTokenOpt.totalSupply(); + mintShares += totalSupply; + const ethBalance = await omniVaultOpt.getFlashCapacity(); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVaultOpt.quoteSendAssetsInfoToL1(options); + const timestamp = (await time.latest()) + 1; + const tx = await omniVaultOpt.connect(operator).sendAssetsInfoToL1(options, { value: fee }); + + const txData = await rebalancer.getTransactionData(OPT_ID); + await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(OPT_ID, timestamp, ethBalance, totalSupply); + expect(txData.inceptionTokenBalance).to.be.eq(totalSupply); + expect(txData.ethBalance).to.be.eq(ethBalance); + expect(txData.timestamp).to.be.eq(timestamp); + }); + + it("Update data and mint", async function () { + const inEthSupplyBefore = await inEth.totalSupply(); + + const tx = await rebalancer.connect(signer1).updateTreasuryData(); + + const inEthSupplyAfter = await inEth.totalSupply(); + await expect(tx).to.emit(rebalancer, "SyncedSupplyChanged").withArgs(0n, mintShares); + await expect(tx).to.emit(rebalancer, "TreasuryUpdateMint").withArgs(mintShares); + await expect(tx).changeTokenBalance(inEth, lockboxAddress, mintShares); + expect(inEthSupplyAfter - inEthSupplyBefore).to.be.eq(mintShares); + }); + + it("updateTreasuryData reverts when there are no changes", async function () { + await expect(rebalancer.connect(signer1).updateTreasuryData()).to.be.revertedWithCustomError(rebalancer, "NoRebalancingRequired"); + }); + + it("Send free balance from ARB", async function () { + const inEthSupplyBefore = await inEth.totalSupply(); + + const freeBalance = await omniVault.getFreeBalance(); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, freeBalance).toHex().toString(); + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + const tx = await omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee }); + + const inEthSupplyAfter = await inEth.totalSupply(); + console.log(await omniVault.getFlashCapacity()); + console.log(await omniVault.getFreeBalance()); + console.log(await ethers.provider.getBalance(omniVault.address)); + + await expect(tx).changeEtherBalance(rebalancer, freeBalance); + expect(inEthSupplyAfter).to.be.eq(inEthSupplyBefore); + }); + + /** + * Stake() only transfers Eth to restakingPool without minting new shares, + * as the number of shares managed separately by updateTreasuryData() + */ + it("Stake eth by rebalancer", async function () { + const inEthSupplyBefore = await inEth.totalSupply(); + const pendingBefore = await restakingPool.getPending(); + + const amount = await ethers.provider.getBalance(rebalancer.address); + const tx = await rebalancer.connect(operator).stake(amount); + + const pendingAfter = await restakingPool.getPending(); + + await expect(tx).changeEtherBalance(restakingPool, amount); + const inEthSupplyAfter = await inEth.totalSupply(); + expect(inEthSupplyAfter).to.be.eq(inEthSupplyBefore); + expect(pendingAfter - pendingBefore).to.be.eq(amount); + }); + + let burntShares; + it("Flash withdraw on ARB", async function () { + const iTokenSupplyBefore = await iToken.totalSupply(); + + burntShares = await omniVault.convertToShares(await omniVault.getFlashCapacity()); + await omniVault.connect(signer2).flashWithdraw(burntShares, signer2.address); + + console.log(await omniVault.getFlashCapacity()); + console.log(await omniVault.getFreeBalance()); + console.log(await ethers.provider.getBalance(omniVault.address)); + + const iTokenSupplyAfter = await iToken.totalSupply(); + expect(iTokenSupplyBefore - iTokenSupplyAfter).to.be.eq(burntShares); + }); + + it("Update data and burn", async function () { + mintShares = await iToken.totalSupply(); + const ethBalance = await omniVault.getFlashCapacity(); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + const timestamp = (await time.latest()) + 1; + let tx = await omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee }); + await expect(tx).to.emit(omniVault, "MessageToL1Sent").withArgs(mintShares, ethBalance); + + const txData = await rebalancer.getTransactionData(ARB_ID); + await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(ARB_ID, timestamp, ethBalance, mintShares); + expect(txData.inceptionTokenBalance).to.be.eq(mintShares); + expect(txData.ethBalance).to.be.eq(ethBalance); + expect(txData.timestamp).to.be.eq(timestamp); + + const inEthSupplyBefore = await inEth.totalSupply(); + const syncBefore = await rebalancer.syncedSupply(); + tx = await rebalancer.connect(signer1).updateTreasuryData(); + + const inEthSupplyAfter = await inEth.totalSupply(); + await expect(tx) + .to.emit(rebalancer, "SyncedSupplyChanged") + .withArgs(syncBefore, syncBefore - burntShares); + await expect(tx).to.emit(rebalancer, "TreasuryUpdateBurn").withArgs(burntShares); + await expect(tx).changeTokenBalance(inEth, lockboxAddress, -burntShares); + expect(inEthSupplyBefore - inEthSupplyAfter).to.be.eq(burntShares); + }); + + it("Deposit on ARB", async function () { + const depositBonus = await omniVault.depositBonusAmount(); + const amount = e18 * 2n; + const expectedShars = await omniVault.convertToShares(amount + depositBonus); + const balanceBefore = await iToken.balanceOf(signer2); + + let tx = await omniVault.connect(signer2).deposit(signer2, { value: amount }); + + const balanceAfter = await iToken.balanceOf(signer2); + + expect(balanceAfter - balanceBefore).to.be.closeTo(expectedShars, 1n); + mintShares = balanceAfter - balanceBefore; + console.log(await omniVault.getFlashCapacity()); + console.log(await omniVault.getFreeBalance()); + console.log(await ethers.provider.getBalance(omniVault.address)); + }); + + it("Send free balance from ARB", async function () { + const freeBalance = await omniVault.getFreeBalance(); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, freeBalance).toHex().toString(); + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + let tx = await omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee }); + + await expect(tx).changeEtherBalance(rebalancer, freeBalance); + console.log(await omniVault.getFlashCapacity()); + console.log(await omniVault.getFreeBalance()); + console.log(await ethers.provider.getBalance(omniVault.address)); + + const inEthSupplyBefore = await inEth.totalSupply(); + const amount = await ethers.provider.getBalance(rebalancer.address); + tx = await rebalancer.connect(operator).stake(amount); + + await expect(tx).changeEtherBalance(restakingPool, amount); + const inEthSupplyAfter = await inEth.totalSupply(); + expect(inEthSupplyAfter).to.be.eq(inEthSupplyBefore); + }); + + it("Send info and update data", async function () { + const totalSupplyArb = await iToken.totalSupply(); + const ethBalance = await omniVault.getFlashCapacity(); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + const timestamp = (await time.latest()) + 1; + let tx = await omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee }); + + const txData = await rebalancer.getTransactionData(ARB_ID); + await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(ARB_ID, timestamp, ethBalance, totalSupplyArb); + expect(txData.inceptionTokenBalance).to.be.eq(totalSupplyArb); + expect(txData.ethBalance).to.be.eq(ethBalance); + expect(txData.timestamp).to.be.eq(timestamp); + + const inEthSupplyBefore = await inEth.totalSupply(); + const syncBefore = await rebalancer.syncedSupply(); + tx = await rebalancer.connect(signer1).updateTreasuryData(); + + const inEthSupplyAfter = await inEth.totalSupply(); + const syncAfter = await rebalancer.syncedSupply(); + await expect(tx) + .to.emit(rebalancer, "SyncedSupplyChanged") + .withArgs(syncBefore, syncBefore + mintShares); + await expect(tx).to.emit(rebalancer, "TreasuryUpdateMint").withArgs(mintShares); + await expect(tx).changeTokenBalance(inEth, lockboxAddress, mintShares); + expect(inEthSupplyAfter - inEthSupplyBefore).to.be.eq(mintShares); + expect(syncAfter - syncBefore).to.be.eq(mintShares); + }); + + it("Stake to restaking pool", async function () { + const amount = await restakingPool.availableToStake(); + const expectedShares = await inEth.convertToShares(amount); + const totalSupplyBefore = await inEth.totalSupply(); + const pendingBefore = await restakingPool.getPending(); + + let tx = await restakingPool.connect(signer1)["stake()"]({ value: amount }); + + const totalSupplyAfter = await inEth.totalSupply(); + const pendingAfter = await restakingPool.getPending(); + + await expect(tx).changeEtherBalance(restakingPool, amount); + await expect(tx).changeTokenBalance(inEth, signer1, expectedShares); + expect(totalSupplyAfter - totalSupplyBefore).to.be.eq(expectedShares); + expect(pendingAfter - pendingBefore).to.be.eq(amount); + }); + }); + + describe("Rebalancer", function () { + describe("Deployments checks", function () { + let NativeRebalancer; + before(async function () { + await snapshot.restore(); + NativeRebalancer = await ethers.getContractFactory("NativeRebalancer"); + }); + + it("MULTIPLIER", async function () { + expect(await rebalancer.MULTIPLIER()).to.be.eq(e18); + }); + + it("Inception token address", async function () { + expect(await rebalancer.inceptionToken()).to.be.eq(inEth.address); + }); + + it("Lockbox address", async function () { + expect(await rebalancer.lockboxAddress()).to.be.eq(lockboxAddress); + }); + + it("Restaking pool address", async function () { + expect(await rebalancer.liqPool()).to.be.eq(restakingPool.address); + }); + + it("Default adapter", async function () { + expect(await rebalancer.defaultAdapter()).to.be.eq(adapterEth.address); + }); + + it("Ratio feed address", async function () { + expect(await rebalancer.ratioFeed()).to.be.eq(ratioFeedL1.address); + }); + + it("Operator address", async function () { + expect(await rebalancer.operator()).to.be.eq(operator.address); + }); + + it("Owner", async function () { + expect(await rebalancer.owner()).to.be.eq(owner.address); + }); + + const args = [ + { + name: "invalid iToken address", + args: () => [ + ethers.ZeroAddress, + lockboxAddress, + restakingPool.address, + adapterEth.address, + ratioFeedL1.address, + operator.address, + ], + }, + { + name: "invalid lockbox address", + args: () => [ + iToken.address, + ethers.ZeroAddress, + restakingPool.address, + adapterEth.address, + ratioFeedL1.address, + operator.address, + ], + }, + { + name: "invalid restaking pool address", + args: () => [iToken.address, lockboxAddress, ethers.ZeroAddress, adapterEth.address, ratioFeedL1.address, operator.address], + }, + { + name: "invalid adapter address", + args: () => [iToken.address, lockboxAddress, restakingPool.address, ethers.ZeroAddress, ratioFeedL1.address, operator.address], + }, + { + name: "invalid ratio feed address", + args: () => [iToken.address, lockboxAddress, restakingPool.address, adapterEth.address, ethers.ZeroAddress, operator.address], + }, + { + name: "invalid operator address", + args: () => [iToken.address, lockboxAddress, restakingPool.address, adapterEth.address, ratioFeedL1.address, ethers.ZeroAddress], + }, + ]; + + args.forEach(function (arg) { + it(`NativeRebalancer: ${arg.name}`, async function () { + const args = arg.args(); + await expect(upgrades.deployProxy(NativeRebalancer, args)).to.be.reverted; + }); + }); + + it("Synced Supply", async function () { + expect(await rebalancer.syncedSupply()).to.be.eq(0n); + }); + }); + + describe("Getters and setters", function () { + beforeEach(async function () { + await snapshot.restore(); + await rebalancer.connect(owner).addChainId(OPT_ID); + }); + + const setters = [ + { + name: "default adapter address", + setter: "setDefaultAdapter", + getter: "defaultAdapter", + event: "DefaultBridgeChanged", + }, + { + name: "Inception token address", + setter: "setInceptionToken", + getter: "inceptionToken", + event: "InceptionTokenChanged", + }, + { + name: "restaking pool address", + setter: "setLiqPool", + getter: "liqPool", + event: "LiqPoolChanged", + }, + { + name: "lockbox address", + setter: "setLockboxAddress", + getter: "lockboxAddress", + event: "LockboxChanged", + }, + { + name: "operator address", + setter: "setOperator", + getter: "operator", + event: "OperatorChanged", + }, + ]; + + setters.forEach(function (arg) { + it(`Set new ${arg.name}`, async function () { + const prevValue = await rebalancer[arg.getter](); + const newValue = ethers.Wallet.createRandom().address; + await expect(rebalancer[arg.setter](newValue)).to.emit(rebalancer, arg.event).withArgs(prevValue, newValue); + + expect(await rebalancer[arg.getter]()).to.be.eq(newValue); + }); + + it(`Reverts: ${arg.setter} when called by not an owner`, async function () { + const newValue = ethers.Wallet.createRandom().address; + await expect(rebalancer.connect(signer1)[arg.setter](newValue)) + .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") + .withArgs(signer1.address); + }); + + it(`Reverts: ${arg.setter} new value is 0 address`, async function () { + const newValue = ethers.ZeroAddress; + await expect(rebalancer[arg.setter](newValue)).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); + }); + }); + + it("addChainId owner can", async function () { + let chain = randomBI(4); + await expect(rebalancer.connect(owner).addChainId(chain)).to.emit(rebalancer, "ChainIdAdded").withArgs(chain); + expect(await rebalancer.chainIds(2n)).to.be.eq(chain); + }); + + it("addChainId skips if the chain has been added already", async function () { + let chain = randomBI(4); + await rebalancer.connect(owner).addChainId(chain); + await expect(rebalancer.connect(owner).addChainId(chain)).to.not.emit(rebalancer, "ChainIdAdded"); + }); + + it("addChainId reverts when called by not an owner", async function () { + await expect(rebalancer.connect(signer1).addChainId(randomBI(4))) + .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") + .withArgs(signer1.address); + }); + + it("deleteChainId operator can delete the 1st chain in the list", async function () { + const chain = ARB_ID; + await expect(rebalancer.connect(owner).deleteChainId(chain)).to.emit(rebalancer, "ChainIdDeleted").withArgs(chain, 0n); + expect(await rebalancer.chainIds(0n)).to.be.eq(OPT_ID); + await expect(rebalancer.chainIds(1n)).to.be.reverted; + }); + + it("deleteChainId owner can delete the last chain in the list", async function () { + const chain = OPT_ID; + await expect(rebalancer.connect(owner).deleteChainId(chain)).to.emit(rebalancer, "ChainIdDeleted").withArgs(chain, 1n); + expect(await rebalancer.chainIds(0n)).to.be.eq(ARB_ID); + await expect(rebalancer.chainIds(1n)).to.be.reverted; + }); + + it("deleteChainId reverts when chain does not exist", async function () { + let chain = randomBI(4); + await expect(rebalancer.connect(owner).deleteChainId(chain)) + .to.be.revertedWithCustomError(rebalancer, "ChainIdNotFound") + .withArgs(chain); + }); + + it("addChainId reverts when called by not an owner", async function () { + await expect(rebalancer.connect(signer1).deleteChainId(ARB_ID)) + .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") + .withArgs(signer1.address); + }); + + it("addAdapter for a new chain", async function () { + let adapter = ethers.Wallet.createRandom().address; + let chain = randomBI(4); + await expect(rebalancer.connect(owner).addAdapter(chain, adapter)) + .to.emit(rebalancer, "AdapterAdded") + .withArgs(chain, adapter) + .and.to.emit(rebalancer, "ChainIdAdded") + .withArgs(chain); + + const [adapterAddress, isDefault] = await rebalancer.getAdapter(chain); + expect(adapterAddress).to.be.eq(adapter); + expect(isDefault).to.be.false; + }); + + it("addAdapter for existing chain", async function () { + let adapter = ethers.Wallet.createRandom().address; + let chain = ARB_ID; + await expect(rebalancer.connect(owner).addAdapter(chain, adapter)) + .to.emit(rebalancer, "AdapterAdded") + .withArgs(chain, adapter) + .and.to.not.emit(rebalancer, "ChainIdAdded"); + + const [adapterAddress, isDefault] = await rebalancer.getAdapter(chain); + expect(adapterAddress).to.be.eq(adapter); + expect(isDefault).to.be.false; + }); + + it("addAdapter reverts when adapter address is 0", async function () { + let adapter = ethers.ZeroAddress; + let chain = randomBI(4); + await expect(rebalancer.connect(owner).addAdapter(chain, adapter)).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); + }); + + it("addAdapter reverts when called by not an owner", async function () { + let adapter = ethers.Wallet.createRandom().address; + let chain = randomBI(4); + await expect(rebalancer.connect(signer1).addAdapter(chain, adapter)) + .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") + .withArgs(signer1.address); + }); + + it("getAdapter returns default adapter if no other set", async function () { + const [adapterAddress, isDefault] = await rebalancer.getAdapter(ARB_ID); + expect(adapterAddress).to.be.eq(adapterEth.address); + expect(isDefault).to.be.true; + }); + + it("getTransactionData when there is no data for the chain", async function () { + let chain = randomBI(4); + const txData = await rebalancer.getTransactionData(chain); + expect(txData.timestamp).to.be.eq(0n); + expect(txData.ethBalance).to.be.eq(0n); + expect(txData.inceptionTokenBalance).to.be.eq(0n); + }); + + it("Enable and disable update", async function () { + expect(await rebalancer.updateable()).to.be.false; + + await expect(rebalancer.setUpdateable(true)).to.emit(rebalancer, "UpdateableChanged").withArgs(false, true); + expect(await rebalancer.updateable()).to.be.true; + + await expect(rebalancer.setUpdateable(false)).to.emit(rebalancer, "UpdateableChanged").withArgs(true, false); + expect(await rebalancer.updateable()).to.be.false; + }); + + it("setUpdateable reverts when called by not an owner", async function () { + await expect(rebalancer.connect(signer1).setUpdateable(true)) + .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") + .withArgs(signer1.address); + }); + + it("setSyncedSupply owner can", async function () { + const prevValue = await rebalancer.syncedSupply(); + const newValue = randomBI(18); + await expect(rebalancer.setSyncedSupply(newValue)).to.emit(rebalancer, "SyncedSupplyChanged").withArgs(prevValue, newValue); + + expect(await rebalancer.syncedSupply()).to.be.eq(newValue); + }); + + it("setSyncedSupply reverts when called by not an owner", async function () { + const newValue = randomBI(18); + await expect(rebalancer.connect(signer1).setSyncedSupply(newValue)) + .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") + .withArgs(signer1.address); + }); + }); + + describe("Update data", function () { + let currentArbAmount = 0n; + let currentArbSupply = 0n; + let currentOptAmount = 0n; + let currentOptSupply = 0n; + let initialLockBoxBalance; + + before(async function () { + await snapshot.restore(); + await rebalancer.connect(owner).addChainId(OPT_ID); + initialLockBoxBalance = await inEth.balanceOf(lockboxAddress); + await rebalancer.setUpdateable(true); + }); + + it("Reverts when there is no data for one of the chains", async function () { + //Call when there is no data at all + await expect(rebalancer.updateTreasuryData()).to.revertedWithCustomError(rebalancer, "MissingOneOrMoreL2Transactions"); + + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp; + const balance = randomBI(19); + const totalSupply = randomBI(19); + const message = encodePayload(timestamp, balance, totalSupply); + + //Send data for the 1 chain of 2 + const fees = await adapterArb.quote(message, options); + await adapterArb.sendDataL1(message, options, { value: fees }); + await expect(rebalancer.updateTreasuryData()) + .to.revertedWithCustomError(rebalancer, "MissingOneOrMoreL2Transactions") + .withArgs(OPT_ID); + }); + + const args = [ + { + name: "Increase amount and supply ARB and OPT", + arb: { + l2BalanceDiff: () => ethers.parseEther("1.5"), + l2TotalSupplyDiff: () => e18, + }, + opt: { + l2BalanceDiff: () => ethers.parseEther("1.5"), + l2TotalSupplyDiff: () => e18, + }, + }, + { + name: "Increase only inEth supply ARB", + arb: { + l2BalanceDiff: () => e18, + l2TotalSupplyDiff: () => ethers.parseEther("1.5"), + }, + }, + { + name: "Increase only inEth supply OPT", + opt: { + l2BalanceDiff: () => e18, + l2TotalSupplyDiff: () => ethers.parseEther("1.5"), + }, + }, + { + name: "Decrease amount and total supply ARB only", + arb: { + l2BalanceDiff: () => -ethers.parseEther("0.5"), + l2TotalSupplyDiff: () => -ethers.parseEther("0.5"), + }, + }, + { + name: "Decrease amount and total supply OPT only", + opt: { + l2BalanceDiff: () => -ethers.parseEther("0.5"), + l2TotalSupplyDiff: () => -ethers.parseEther("0.5"), + }, + }, + { + name: "Decrease only total supply ARB abd OPT", + arb: { + l2BalanceDiff: () => 0n, + l2TotalSupplyDiff: () => -e18, + }, + opt: { + l2BalanceDiff: () => 0n, + l2TotalSupplyDiff: () => -e18, + }, + }, + { + name: "Increase for ARB and decrease for OPT for the same amount", + arb: { + l2BalanceDiff: () => e18, + l2TotalSupplyDiff: () => e18, + }, + opt: { + l2BalanceDiff: () => -ethers.parseEther("0.5"), + l2TotalSupplyDiff: () => -ethers.parseEther("0.5"), + }, + }, + { + name: "Decrease to 0 ARB", + arb: { + l2BalanceDiff: () => -currentArbSupply, + l2TotalSupplyDiff: () => -currentArbSupply, + }, + }, + { + name: "Decrease to 0 OPT", + opt: { + l2BalanceDiff: () => -currentOptSupply, + l2TotalSupplyDiff: () => -currentOptSupply, + }, + }, + ]; + + args.forEach(function (arg) { + it(`updateTreasuryData: ${arg.name}`, async () => { + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp; + let expectedTotalSupplyDiff = 0n; + if (arg.arb) { + expectedTotalSupplyDiff += arg.arb.l2TotalSupplyDiff(); + currentArbAmount += arg.arb.l2BalanceDiff(); + currentArbSupply += arg.arb.l2TotalSupplyDiff(); + await adapterArb.sendData(timestamp, currentArbAmount, currentArbSupply); + } + if (arg.opt) { + expectedTotalSupplyDiff += arg.opt.l2TotalSupplyDiff(); + currentOptAmount += arg.opt.l2BalanceDiff(); + currentOptSupply += arg.opt.l2TotalSupplyDiff(); + await adapterOpt.sendData(timestamp, currentOptAmount, currentOptSupply); + } + const totalSupplyBefore = await inEth.totalSupply(); + const lockboxBalanceBefore = await inEth.balanceOf(lockboxAddress); + const syncedSupplyBefore = await rebalancer.syncedSupply(); + + let tx = await rebalancer.updateTreasuryData(); + await expect(tx) + .to.emit(rebalancer, "SyncedSupplyChanged") + .withArgs(syncedSupplyBefore, syncedSupplyBefore + expectedTotalSupplyDiff); + + const totalSupplyAfter = await inEth.totalSupply(); + const lockboxBalanceAfter = await inEth.balanceOf(lockboxAddress); + const syncedSupplyAfter = await rebalancer.syncedSupply(); + + console.log("Total supply diff:", (totalSupplyAfter - totalSupplyBefore).format()); + console.log("Lockbox balance diff:", (lockboxBalanceAfter - lockboxBalanceBefore).format()); + console.log("Synced supply diff:", (syncedSupplyAfter - syncedSupplyBefore).format()); + + expect(totalSupplyAfter - totalSupplyBefore).to.be.eq(expectedTotalSupplyDiff); + expect(lockboxBalanceAfter - lockboxBalanceBefore).to.be.eq(expectedTotalSupplyDiff); + expect(syncedSupplyAfter - syncedSupplyBefore).to.be.eq(expectedTotalSupplyDiff); + if (expectedTotalSupplyDiff > 0n) { + console.log("Mint"); + await expect(tx).emit(rebalancer, "TreasuryUpdateMint").withArgs(expectedTotalSupplyDiff); + } + if (expectedTotalSupplyDiff == 0n) { + console.log("No mint, no burn"); + await expect(tx).to.not.emit(rebalancer, "TreasuryUpdateMint").and.to.not.emit(rebalancer, "TreasuryUpdateBurn"); + } + if (expectedTotalSupplyDiff < 0n) { + console.log("Burn"); + await expect(tx).emit(rebalancer, "TreasuryUpdateBurn").withArgs(-expectedTotalSupplyDiff); + } + }); + }); + + it("Lockbox balance is the ame after all", async function () { + expect(await inEth.balanceOf(lockboxAddress)).to.be.eq(initialLockBoxBalance); + }); + + it("updateTreasuryData reverts when total supply is the same", async function () { + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp; + await adapterArb.sendData(timestamp, e18, e18); + await adapterOpt.sendData(timestamp, e18, e18); + await rebalancer.updateTreasuryData(); + + await expect(rebalancer.updateTreasuryData()).to.be.revertedWithCustomError(rebalancer, "NoRebalancingRequired"); + }); + + it("Reverts when updateable is false", async function () { + await snapshot.restore(); + await expect(rebalancer.updateTreasuryData()).to.revertedWithCustomError(rebalancer, "TreasuryUpdatesPaused"); + }); + + it("inEth leftover on rebalancer will be transferred to the lockbox", async function () { + await snapshot.restore(); + await rebalancer.setUpdateable(true); + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp; + await restakingPool.connect(signer1)["stake()"]({ value: 2n * e18 }); + + const totalSupplyBefore = await inEth.totalSupply(); + const lockboxBalanceBefore = await inEth.balanceOf(lockboxAddress); + //Report L2 info + const inEthChange = e18; + const supplyChange = e18; + await adapterArb.sendData(timestamp, inEthChange, supplyChange); + await adapterOpt.sendData(timestamp, inEthChange, supplyChange); + + const amount = randomBI(17); + await inEth.connect(signer1).transfer(rebalancer.address, amount); + + await expect(rebalancer.updateTreasuryData()).to.emit(rebalancer, "InceptionTokenDepositedToLockbox").withArgs(amount); + console.log(`Total supply: ${(await inEth.totalSupply()).format()}`); + + const totalSupplyAfter = await inEth.totalSupply(); + const lockboxBalanceAfter = await inEth.balanceOf(lockboxAddress); + // expect(totalSupplyAfter - totalSupplyBefore).to.be.closeTo(supplyChange * 2n, 1n); + expect(totalSupplyAfter - totalSupplyBefore).to.be.closeTo(supplyChange, 1n); + // expect(lockboxBalanceAfter - lockboxBalanceBefore).to.be.closeTo(supplyChange * 2n + amount, 1n); + expect(lockboxBalanceAfter - lockboxBalanceBefore).to.be.closeTo(supplyChange + amount, 1n); + }); + }); + + describe("Stake", function () { + beforeEach(async function () { + await snapshot.restore(); + await rebalancer.connect(owner).addChainId(OPT_ID); + }); + + const args = [ + { + name: "Part of the balance", + balance: async () => await restakingPool.availableToStake(), + amount: async (amount) => amount / 2n, + }, + { + name: "All balance", + balance: async () => await restakingPool.availableToStake(), + amount: async (amount) => amount, + }, + { + name: "Restaking pool min amount", + balance: async () => await restakingPool.availableToStake(), + amount: async () => await restakingPool.getMinStake(), + }, + { + name: "Less than restaking pool min amount", + balance: async () => await restakingPool.availableToStake(), + amount: async () => (await restakingPool.getMinStake()) - 1n, + }, + ]; + + args.forEach(function (arg) { + it(`${arg.name}`, async function () { + const balance = await arg.balance(); + await signer1.sendTransaction({ value: balance, to: rebalancer.address }); + + const amount = await arg.amount(balance); + const shares = await inEth.convertToShares(amount); + const lockboxInEthBalanceBefore = await inEth.balanceOf(lockboxAddress); + + const tx = await rebalancer.connect(operator).stake(amount); + await expect(tx).emit(restakingPool, "Received").withArgs(rebalancer.address, amount); + + const lockboxInEthBalanceAfter = await inEth.balanceOf(lockboxAddress); + console.log("Signer eth balance after: ", await ethers.provider.getBalance(signer1.address)); + console.log("Restaking pool eth balance: ", await ethers.provider.getBalance(restakingPool.address)); + console.log("lockbox inEth balance: ", await inEth.balanceOf(lockboxAddress)); + + //No new shares minted + expect(lockboxInEthBalanceAfter).to.be.eq(lockboxInEthBalanceBefore); + expect(await inEth.balanceOf(rebalancer.address)).to.be.eq(0n); + }); + }); + + it("Reverts when amount > available to stake from restaking pool", async function () { + const amount = (await restakingPool.availableToStake()) + 1n; + await signer1.sendTransaction({ value: amount, to: rebalancer.address }); + await expect(rebalancer.connect(operator).stake(amount)).to.revertedWithCustomError(rebalancer, "StakeAmountExceedsMaxTVL"); + }); + + it("Reverts when amount > eth balance", async function () { + const amount = (await restakingPool.availableToStake()) / 2n; + await signer1.sendTransaction({ value: amount, to: rebalancer.address }); + await expect(rebalancer.connect(operator).stake(amount + 1n)).to.revertedWithCustomError( + rebalancer, + "StakeAmountExceedsEthBalance" + ); + }); + + it.skip("Reverts when amount < restaking pool min stake", async function () { + const amount = (await restakingPool.getMinStake()) - 1n; + await signer1.sendTransaction({ value: amount, to: rebalancer.address }); + await expect(rebalancer.connect(operator).stake(amount)).to.revertedWithCustomError(restakingPool, "PoolStakeAmLessThanMin"); + }); + + it("Reverts when called by not an operator", async function () { + const amount = (await restakingPool.availableToStake()) / 2n; + await signer1.sendTransaction({ value: amount, to: rebalancer.address }); + await expect(rebalancer.connect(signer1).stake(amount)).to.revertedWithCustomError(rebalancer, "OnlyOperator"); + }); + }); + + describe("sendEthToL2", function () { + beforeEach(async function () { + await snapshot.restore(); + const balance = await restakingPool.availableToStake(); + await signer1.sendTransaction({ value: balance, to: rebalancer.address }); + }); + + const args = [ + { + name: "Part of the balance to ARB", + amount: async (amount) => amount / 2n, + chainId: ARB_ID, + adapter: () => adapterArb, + sender: () => operator, + }, + { + name: "Part of the balance to ARB by owner", + amount: async (amount) => amount / 2n, + chainId: ARB_ID, + adapter: () => adapterArb, + sender: () => owner, + }, + { + name: "Part of the balance to OPT", + amount: async (amount) => amount / 2n, + chainId: OPT_ID, + adapter: () => adapterOpt, + sender: () => operator, + }, + { + name: "All balance to ARB", + amount: async (amount) => amount, + chainId: ARB_ID, + adapter: () => adapterArb, + sender: () => operator, + }, + { + name: "All balance to OPT", + amount: async (amount) => amount, + chainId: OPT_ID, + adapter: () => adapterOpt, + sender: () => operator, + }, + ]; + + args.forEach(function (arg) { + it(`${arg.name}`, async function () { + const balance = await ethers.provider.getBalance(rebalancer.address); + const amount = await arg.amount(balance); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await rebalancer.quoteSendEthToL2(arg.chainId, options); + const tx = await rebalancer.connect(arg.sender()).sendEthToL2(arg.chainId, amount, options, { value: fees }); + await expect(tx).to.emit(adapterEth, "CrossChainMessageSent"); + await expect(tx).to.changeEtherBalance(omniVault, amount); + await expect(tx).to.changeEtherBalance(rebalancer, -amount); + await expect(tx).to.changeEtherBalance(arg.sender(), -fees, { includeFee: false }); + }); + }); + + it("Reverts when amount > eth balance", async function () { + const amount = (await ethers.provider.getBalance(rebalancer.address)) + 1n; + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await rebalancer.quoteSendEthToL2(ARB_ID, options); + await expect(rebalancer.connect(operator).sendEthToL2(ARB_ID, amount, options, { value: fees })).to.revertedWithCustomError( + rebalancer, + "SendAmountExceedsEthBalance" + ); + }); + + it("Reverts when called by not an operator", async function () { + const amount = await ethers.provider.getBalance(rebalancer.address); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await rebalancer.quoteSendEthToL2(ARB_ID, options); + await expect(rebalancer.connect(signer1).sendEthToL2(ARB_ID, amount, options, { value: fees })).to.revertedWithCustomError( + rebalancer, + "OnlyOperator" + ); + }); + + it("Reverts when there is no adapter for the chain", async function () { + const amount = await ethers.provider.getBalance(rebalancer.address); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await rebalancer.quoteSendEthToL2(ARB_ID, options); + await expect(rebalancer.connect(operator).sendEthToL2(randomBI(8), amount, options, { value: fees })).to.revertedWithCustomError( + adapterArb, + "NoPeer" + ); + }); + }); + + describe("handleL2Info", function () { + it("handleL2Info reverts when called by not an adapter", async function () { + const block = await ethers.provider.getBlock("latest"); + const chainId = ARB_ID; + const timestamp = block.timestamp; + const balance = e18; + const totalSupply = e18; + + await expect(rebalancer.connect(owner).handleL2Info(chainId, timestamp, balance, totalSupply)).to.be.revertedWithCustomError( + rebalancer, + "OnlyAdapter" + ); + }); + }); + }); + + describe("Adapters", function () { + before(async function () { + await snapshot.restore(); + }); + + describe("Deployment", function () { + let LZCrossChainAdapterL1; + let LZCrossChainAdapterL2; + before(async function () { + LZCrossChainAdapterL1 = await ethers.getContractFactory("LZCrossChainAdapterL1"); + LZCrossChainAdapterL2 = await ethers.getContractFactory("LZCrossChainAdapterL2"); + }); + + const argsL1 = [ + { + name: "invalid endpoint address", + args: () => [ethers.ZeroAddress, owner.address, eIds, chainIds], + }, + { + name: "invalid delegator address", + args: () => [ethEndpoint.address, ethers.ZeroAddress, eIds, chainIds], + }, + { + name: "Id arrays lengths do not match", + args: () => [ethEndpoint.address, owner.address, [ARB_EID], [ARB_ID, OPT_ID]], + }, + ]; + + argsL1.forEach(function (arg) { + it(`LZCrossChainAdapterL1: ${arg.name}`, async function () { + const args = arg.args(); + await expect(upgrades.deployProxy(LZCrossChainAdapterL1, args)).to.be.reverted; + }); + }); + + const argsL2 = [ + { + name: "invalid endpoint address", + args: () => [ethers.ZeroAddress, owner.address, ETH_ID, eIds, chainIds], + }, + { + name: "invalid delegator address", + args: () => [ethEndpoint.address, ethers.ZeroAddress, ETH_ID, eIds, chainIds], + }, + { + name: "Id arrays lengths do not match", + args: () => [ethEndpoint.address, owner.address, ETH_ID, [ARB_EID], [ARB_ID, OPT_ID]], + }, + ]; + + argsL2.forEach(function (arg) { + it(`LZCrossChainAdapterL2: ${arg.name}`, async function () { + const args = arg.args(); + await expect(upgrades.deployProxy(LZCrossChainAdapterL2, args)).to.be.reverted; + }); + }); + }); + + //=== Getters and setters + const adapters = [ + { + name: "layer1", + adapter: () => adapterEth, + endpoint: () => ethEndpoint, + }, + { + name: "layer2", + adapter: () => adapterArb, + endpoint: () => arbEndpoint, + }, + ]; + adapters.forEach(function (adapterArg) { + let adapter; + describe(`Getters and setters ${adapterArg.name}`, function () { + beforeEach(async function () { + await snapshot.restore(); + adapter = adapterArg.adapter(); + }); + + const setters = [ + { + name: "receiver address", + setter: "setTargetReceiver", + getter: "targetReceiver", + event: "TargetReceiverChanged", + }, + ]; + + setters.forEach(function (setterArg) { + it(`Set new ${setterArg.name}`, async function () { + const prevValue = await adapter[setterArg.getter](); + const newValue = ethers.Wallet.createRandom().address; + + await expect(adapter[setterArg.setter](newValue)).to.emit(adapter, setterArg.event).withArgs(prevValue, newValue); + expect(await adapter[setterArg.getter]()).to.be.eq(newValue); + }); + + it(`Reverts: ${setterArg.setter} when called by not an owner`, async function () { + const newValue = ethers.Wallet.createRandom().address; + await expect(adapter.connect(signer1)[setterArg.setter](newValue)).to.be.revertedWithCustomError( + adapter, + "OwnableUnauthorizedAccount" + ); + }); + + it(`Reverts: ${setterArg.setter} new value is 0 address`, async function () { + const newValue = ethers.ZeroAddress; + await expect(adapter[setterArg.setter](newValue)).to.be.revertedWithCustomError(adapter, "SettingZeroAddress"); + }); + }); + + it("setPeer sets target address by chain", async function () { + const eid = randomBI(8); + const target = ethers.Wallet.createRandom(); + const peer = ethers.zeroPadValue(target.address, 32); + + await expect(adapter.setPeer(eid, peer)).to.emit(adapter, "PeerSet").withArgs(eid, peer); + expect(await adapter.peers(eid)).to.be.eq(peer); + }); + + it("setPeer reverts when called by not an owner", async function () { + const eid = randomBI(8); + const target = ethers.Wallet.createRandom(); + const peer = ethers.zeroPadValue(target.address, 32); + + await expect(adapter.connect(signer1).setPeer(eid, peer)).to.be.revertedWithCustomError(adapter, "OwnableUnauthorizedAccount"); + }); + + it("setChainIdFromEid maps chaind id by eid", async function () { + const eid = randomBI(8); + const chainId = randomBI(8); + + await expect(adapter.setChainIdFromEid(eid, chainId)).to.emit(adapter, "ChainIdAdded").withArgs(chainId); + expect(await adapter.getChainIdFromEid(eid)).to.be.eq(chainId); + expect(await adapter.getEidFromChainId(chainId)).to.be.eq(eid); + }); + + it("setChainIdFromEid reverts when called by not an owner", async function () { + const eid = randomBI(8); + const chainId = randomBI(8); + + await expect(adapter.connect(signer1).setChainIdFromEid(eid, chainId)).to.be.revertedWithCustomError( + adapter, + "OwnableUnauthorizedAccount" + ); + }); + + it("Owner", async function () { + expect(await adapter.owner()).to.be.eq(owner.address); + }); + + it("Transfer ownership in two steps", async function () { + // Generate a new owner address and connect it to the provider + const newOwner = ethers.Wallet.createRandom().connect(ethers.provider); + + // Fund newOwner with some ETH from the current owner + await owner.sendTransaction({ + to: newOwner.address, + value: ethers.parseEther("1"), // Transfer 1 ETH for gas fees + }); + + // Initiate ownership transfer (step 1) + await expect(adapter.transferOwnership(newOwner.address)) + .to.emit(adapter, "OwnershipTransferStarted") + .withArgs(owner.address, newOwner.address); + + // Ensure that the new owner is set as the pending owner + expect(await adapter.pendingOwner()).to.equal(newOwner.address); + + // Simulate the new owner accepting the ownership (step 2) + await expect(adapter.connect(newOwner).acceptOwnership()) + .to.emit(adapter, "OwnershipTransferred") + .withArgs(owner.address, newOwner.address); + + // Check that the ownership transfer is complete + expect(await adapter.owner()).to.equal(newOwner.address); + }); + + it("Endpoint", async function () { + const endpoint = adapterArg.endpoint(); + expect(await adapter.endpoint()).to.be.eq(endpoint.address); + }); + }); + }); + + //=== Send eth between layers + const directions = [ + { + name: "L2 -> L1", + fromAdapter: () => adapterArb, + fromEndpoint: () => arbEndpoint, + fromChainID: ARB_ID, + fromChainEID: ARB_EID, + toAdapter: () => adapterEth, + toEndpoint: () => ethEndpoint, + toChainID: ETH_ID, + target: () => rebalancer, + maliciousAdapter: () => maliciousAdapterL2, + }, + { + name: "L1 -> L2", + fromAdapter: () => adapterEth, + fromEndpoint: () => ethEndpoint, + fromChainID: ETH_ID, + fromChainEID: ETH_EID, + toAdapter: () => adapterArb, + toEndpoint: () => arbEndpoint, + toChainID: ARB_ID, + target: () => omniVault, + maliciousAdapter: () => maliciousAdapterL1, + }, + ]; + directions.forEach(function (direction) { + describe(`Send eth ${direction.name}`, function () { + let fromAdapter; + let fromEndpoint; + let toAdapter; + let toEndpoint; + let target; + + before(async function () { + await snapshot.restore(); + fromAdapter = direction.fromAdapter(); + fromEndpoint = direction.fromEndpoint(); + toAdapter = direction.toAdapter(); + toEndpoint = direction.toEndpoint(); + target = direction.target(); + }); + + const args = [ + { + name: "1eth", + amount: async () => e18, + }, + { + name: "Random amount ~ 1e17", + amount: async () => randomBI(17), + }, + { + name: "1wei", + amount: async () => 1n, + }, + { + name: "Restaking pool min amount", + amount: async () => await restakingPool.getMinStake(), + }, + { + name: "Greater than available to stake", + amount: async () => (await restakingPool.availableToStake()) + 1n, + }, + ]; + + args.forEach(function (arg) { + it(arg.name, async function () { + const amount = await arg.amount(); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const amountWithFees = await fromAdapter.quoteSendEth(direction.toChainID, options); + const fee = amountWithFees - amount; + const tx = await fromAdapter.connect(owner).sendEthCrossChain(direction.toChainID, options, { value: amountWithFees }); + + await expect(tx).emit(fromAdapter, "CrossChainMessageSent").withArgs(direction.toChainID, amount, "0x", fee); + await expect(tx).emit(toAdapter, "CrossChainEthDeposit").withArgs(direction.fromChainID, amount); + if (direction.toChainID === ETH_ID) { + await expect(tx).emit(target, "ETHReceived").withArgs(toAdapter.address, amount); + } + await expect(tx).to.changeEtherBalance(target.address, amount); + await expect(tx).to.changeEtherBalance(owner.address, -amountWithFees, { includeFee: false }); + }); + }); + + it(`Send 0th ${direction.name}`, async function () { + const amount = 0n; + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const amountWithFees = await fromAdapter.quoteSendEth(direction.toChainID, options); + const tx = await fromAdapter.connect(owner).sendEthCrossChain(direction.toChainID, options, { value: amountWithFees }); + + await expect(tx).emit(fromAdapter, "CrossChainMessageSent").withArgs(direction.toChainID, 0n, "0x", 3202200000000000n); + await expect(tx).not.emit(toAdapter, "CrossChainEthDeposit"); + await expect(tx).not.emit(rebalancer, "ETHReceived"); + await expect(tx).to.changeEtherBalance(target.address, amount); + await expect(tx).to.changeEtherBalance(owner.address, -amountWithFees, { includeFee: false }); + }); + + it("sendEthCrossChain reverts when called by not a target", async function () { + await snapshot.restore(); + + const amount = randomBI(18); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await fromAdapter.quoteSendEth(direction.toChainID, options); + await expect(fromAdapter.connect(signer1).sendEthCrossChain(direction.toChainID, options, { value: fees })) + .to.revertedWithCustomError(toAdapter, "NotTargetReceiver") + .withArgs(signer1.address); + }); + + it("sendEthCrossChain reverts when caller is not endpoint", async function () { + await snapshot.restore(); + const maliciousEndpoint = await ethers.deployContract("EndpointMock", [direction.toChainID]); + maliciousEndpoint.address = await maliciousEndpoint.getAddress(); + await fromEndpoint.setDestLzEndpoint(toAdapter.address, maliciousEndpoint.address); + + const amount = randomBI(18); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await fromAdapter.quoteSendEth(direction.toChainID, options); + + await expect(fromAdapter.sendEthCrossChain(direction.toChainID, options, { value: fees })) + .to.revertedWithCustomError(toAdapter, "OnlyEndpoint") + .withArgs(maliciousEndpoint.address); + }); + + it("sendEthCrossChain reverts when sent from unknown adapter", async function () { + await snapshot.restore(); + const maliciousAdapter = direction.maliciousAdapter(); + + const amount = randomBI(18); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fees = await maliciousAdapter.quoteSendEth(direction.toChainID, options); + await expect(maliciousAdapter.sendEthCrossChain(direction.toChainID, options, { value: fees })) + .to.be.revertedWithCustomError(toAdapter, "OnlyPeer") + .withArgs(direction.fromChainEID, ethers.zeroPadValue(maliciousAdapter.address, 32)); + }); + + it("sendEthCrossChain reverts when chain is unknown", async function () { + const amount = randomBI(18); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const amountWithFees = await fromAdapter.quoteSendEth(direction.toChainID, options); + await expect( + fromAdapter.connect(owner).sendEthCrossChain(randomBI(4), options, { value: amountWithFees }) + ).to.be.revertedWithCustomError(fromAdapter, "NoPeer"); + }); + + it("sendEthCrossChain reverts there is not enough fee", async function () { + const amount = randomBI(18); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const amountWithFees = await fromAdapter.quoteSendEth(direction.toChainID, options); + await expect( + fromAdapter.connect(owner).sendEthCrossChain(direction.toChainID, options, { value: amountWithFees - 1n }) + ).to.be.revertedWith("LayerZeroMock: not enough native for fees"); + }); + + it("quoteSendEth reverts when chain is unknown", async function () { + const chain = randomBI(4); + const amount = randomBI(18); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + await expect(fromAdapter.quoteSendEth(chain, options)) + .to.be.revertedWithCustomError(fromAdapter, "NoDestEidFoundForChainId") + .withArgs(chain); + }); + + it("quoteSendEth reverts when options value is invalid", async function () { + await expect(fromAdapter.quoteSendEth(direction.toChainID, "0x")) + .to.be.revertedWithCustomError(fromEndpoint, "LZ_ULN_InvalidWorkerOptions") + .withArgs(0n); + }); + }); + }); + + describe("sendDataL1 receiveL2Info", function () { + let lastHandleTime; + before(async function () { + await snapshot.restore(); + }); + + it("sendDataL1 reverts when called by not a target", async function () { + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp; + const balance = randomBI(19); + const totalSupply = randomBI(19); + const message = encodePayload(timestamp, balance, totalSupply); + const fees = await adapterArb.quote(message, options); + await expect(adapterArb.connect(signer1).sendDataL1(message, options, { value: fees })) + .to.be.revertedWithCustomError(adapterArb, "NotTargetReceiver") + .withArgs(signer1.address); + }); + + it("receiveL2Info", async () => { + const block = await ethers.provider.getBlock("latest"); + lastHandleTime = block.timestamp - 1000; + const _balance = 100; + const _totalSupply = 100; + + await expect(adapterArb.sendData(lastHandleTime, _balance, _totalSupply)) + .to.emit(rebalancer, "L2InfoReceived") + .withArgs(ARB_ID, lastHandleTime, _balance, _totalSupply); + + const chainDataAfter = await rebalancer.getTransactionData(ARB_ID); + expect(chainDataAfter.timestamp).to.be.eq(lastHandleTime); + expect(chainDataAfter.ethBalance).to.be.eq(_balance); + expect(chainDataAfter.inceptionTokenBalance).to.be.eq(_totalSupply); + }); + + it("Reverts when there is a message with this timestamp", async function () { + const balance = 200; + const totalSupply = 200; + + await expect(adapterArb.sendData(lastHandleTime, balance, totalSupply)) + .to.revertedWithCustomError(rebalancer, "TimeBeforePrevRecord") + .withArgs(lastHandleTime); + }); + + it("Reverts when timestamp is in the future", async function () { + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp + 100; + const balance = 100; + const totalSupply = 100; + + await expect(adapterArb.sendData(timestamp, balance, totalSupply)) + .to.revertedWithCustomError(rebalancer, "TimeCannotBeInFuture") + .withArgs(timestamp); + }); + + it("Reverts when caller is not endpoint", async function () { + const maliciousEndpoint = await ethers.deployContract("EndpointMock", [ETH_EID]); + maliciousEndpoint.address = await maliciousEndpoint.getAddress(); + await arbEndpoint.setDestLzEndpoint(adapterEth.address, maliciousEndpoint.address); + + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp - 1; + const balance = 300; + const totalSupply = 300; + + await expect(adapterArb.sendData(timestamp, balance, totalSupply)) + .to.revertedWithCustomError(adapterEth, "OnlyEndpoint") + .withArgs(maliciousEndpoint.address); + }); + + it("Reverts when l2 sender is unknown", async function () { + await snapshot.restore(); + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp + 100; + const balance = 100; + const totalSupply = 100; + const message = encodePayload(timestamp, balance, totalSupply); + + const fees = await maliciousAdapterL2.quote(message, options); + await expect(maliciousAdapterL2.sendDataL1(message, options, { value: fees })) + .to.be.revertedWithCustomError(adapterEth, "OnlyPeer") + .withArgs(ARB_EID, ethers.zeroPadValue(maliciousAdapterL2.address, 32)); + }); + + it("quoteSendEth reverts when options value is invalid", async function () { + await snapshot.restore(); + const block = await ethers.provider.getBlock("latest"); + const timestamp = block.timestamp + 100; + const balance = 100; + const totalSupply = 100; + const message = encodePayload(timestamp, balance, totalSupply); + + await expect(adapterArb.quote(message, "0x")) + .to.be.revertedWithCustomError(arbEndpoint, "LZ_ULN_InvalidWorkerOptions") + .withArgs(0n); + }); + }); + + describe("Recover funds", function () { + it("recoverFunds owner can send funds from adapter to the target", async function () { + const amount = randomBI(18); + await signer1.sendTransaction({ value: amount, to: adapterEth.address }); + expect(await ethers.provider.getBalance(adapterEth.address)).to.be.eq(amount); + + const tx = await adapterEth.connect(owner).recoverFunds(); + await expect(tx).to.emit(adapterEth, "RecoverFundsInitiated").withArgs(amount); + await expect(tx).changeEtherBalance(adapterEth, -amount); + await expect(tx).changeEtherBalance(rebalancer, amount); + }); + + it("recoverFunds reverts when called by not an owner", async function () { + const amount = randomBI(18); + await signer1.sendTransaction({ value: amount, to: adapterEth.address }); + expect(await ethers.provider.getBalance(adapterEth.address)).to.be.eq(amount); + + await expect(adapterEth.connect(signer1).recoverFunds()).to.revertedWithCustomError(adapterEth, "OwnableUnauthorizedAccount"); + }); + }); + }); + + describe("OmniVault", function () { + describe("Base flow", function () { + let deposited, freeBalance, depositFees; + + before(async function () { + await snapshot.restore(); + TARGET = toWei(10); + await omniVault.setTargetFlashCapacity(TARGET); + }); + + it("Initial ratio", async function () { + const ratio = await omniVault.ratio(); + console.log(`Initial ratio:\t\t${ratio.format()}`); + }); + + it("Deposit to vault", async function () { + freeBalance = randomBI(19); + deposited = TARGET + freeBalance; + const expectedShares = (deposited * e18) / (await omniVault.ratio()); + const tx = await omniVault.connect(signer1).deposit(signer1.address, { value: deposited }); + const receipt = await tx.wait(); + const events = receipt?.logs.filter((e) => e.eventName === "Deposit"); + expect(events.length).to.be.eq(1); + expect(events[0].args["sender"]).to.be.eq(signer1.address); + expect(events[0].args["receiver"]).to.be.eq(signer1.address); + expect(events[0].args["amount"]).to.be.eq(deposited); + expect(events[0].args["iShares"]).to.be.closeTo(expectedShares, 1n); + expect(receipt?.logs.find((l) => l.eventName === "DepositBonus")).to.be.undefined; //Because there is no replenish rewards has been collected yet + console.log(`Ratio after:\t\t${(await omniVault.ratio()).format()}`); + + expect(await iToken.balanceOf(signer1.address)).to.be.closeTo(expectedShares, 1n); + expect(await omniVault.totalAssets()).to.be.eq(deposited); + expect(await omniVault.getFlashCapacity()).to.be.eq(deposited); + expect(await omniVault.ratio()).to.be.eq(e18); + }); + + it("Flash withdraw all", async function () { + const sharesBefore = await iToken.balanceOf(signer1); + const senderBalanceBefore = await ethers.provider.getBalance(signer1); + const receiver = signer2; + const receiverBalanceBefore = await ethers.provider.getBalance(receiver); + const treasuryBalanceBefore = await ethers.provider.getBalance(treasury); + const totalAssetsBefore = await omniVault.totalAssets(); + const flashCapacityBefore = await omniVault.getFlashCapacity(); + console.log(`Flash capacity before:\t${flashCapacityBefore.format()}`); + + const amount = await omniVault.convertToAssets(sharesBefore); + const expectedFee = await omniVault.calculateFlashWithdrawFee(amount); + console.log(`Amount:\t\t\t\t\t${amount.format()}`); + console.log(`Shares:\t\t\t\t\t${sharesBefore.format()}`); + console.log(`Expected fee:\t\t\t${expectedFee.format()}`); + + let tx = await omniVault.connect(signer1).flashWithdraw(sharesBefore, receiver.address); + const receipt = await tx.wait(); + const txFee = BigInt(receipt.gasUsed * receipt.gasPrice); + const withdrawEvent = receipt?.logs.filter((e) => e.eventName === "FlashWithdraw"); + expect(withdrawEvent.length).to.be.eq(1); + expect(withdrawEvent[0].args["sender"]).to.be.eq(signer1.address); + expect(withdrawEvent[0].args["receiver"]).to.be.eq(receiver.address); + expect(withdrawEvent[0].args["owner"]).to.be.eq(signer1.address); + expect(withdrawEvent[0].args["amount"]).to.be.closeTo(amount - expectedFee, 1n); + expect(withdrawEvent[0].args["iShares"]).to.be.closeTo(sharesBefore, 1n); + expect(withdrawEvent[0].args["fee"]).to.be.closeTo(expectedFee, 1n); + const collectedFees = withdrawEvent[0].args["fee"]; + depositFees = collectedFees / 2n; + + const sharesAfter = await iToken.balanceOf(signer1); + const senderBalanceAfter = await ethers.provider.getBalance(signer1); + const receiverBalanceAfter = await ethers.provider.getBalance(receiver); + const treasuryBalanceAfter = await ethers.provider.getBalance(treasury); + const totalAssetsAfter = await omniVault.totalAssets(); + const flashCapacityAfter = await omniVault.getFlashCapacity(); + console.log(`Shares balance diff:\t${(sharesBefore - sharesAfter).format()}`); + console.log(`Sender balance diff:\t${(senderBalanceBefore - senderBalanceAfter).format()}`); + console.log(`Receiver balance diff:\t${(receiverBalanceAfter - receiverBalanceBefore).format()}`); + console.log(`Treasury balance diff:\t${(treasuryBalanceAfter - treasuryBalanceBefore).format()}`); + console.log(`Total assets diff:\t\t${(totalAssetsBefore - totalAssetsAfter).format()}`); + console.log(`Flash capacity diff:\t${(flashCapacityBefore - flashCapacityAfter).format()}`); + console.log(`Fee collected:\t\t\t${collectedFees.format()}`); + + expect(sharesBefore - sharesAfter).to.be.eq(sharesBefore); + expect(senderBalanceBefore - senderBalanceAfter).to.be.closeTo(txFee, 1n); + expect(receiverBalanceAfter - receiverBalanceBefore).to.be.closeTo(amount - expectedFee, 1n); + expect(treasuryBalanceAfter - treasuryBalanceBefore).to.be.closeTo(expectedFee / 2n, 1n); + expect(totalAssetsBefore - totalAssetsAfter).to.be.closeTo(amount - expectedFee / 2n, 1n); + expect(flashCapacityBefore - flashCapacityAfter).to.be.closeTo(amount, 1n); + }); + }); + + describe("Deposit", function () { + let TARGET; + + beforeEach(async function () { + await snapshot.restore(); + TARGET = toWei(10); + await omniVault.setTargetFlashCapacity(TARGET); + }); + + const args = [ + { + name: "1st time < TARGET", + predepositAmount: () => 0n, + amount: async () => TARGET / 2n, + withdrawFeeFrom: () => 0n, + receiver: () => signer1.address, + }, + { + name: "1st time > TARGET", + predepositAmount: () => 0n, + amount: async () => randomBIMax(TARGET), + withdrawFeeFrom: () => 0n, + receiver: () => signer1.address, + }, + { + name: "more wo rewards", + predepositAmount: () => TARGET / 3n, + amount: async () => randomBIMax(TARGET / 3n), + withdrawFeeFrom: () => 0n, + receiver: () => signer1.address, + }, + { + name: "more with rewards", + predepositAmount: () => TARGET / 3n, + amount: async () => randomBIMax(TARGET / 3n), + withdrawFeeFrom: () => TARGET, + receiver: () => signer1.address, + }, + { + name: "min amount", + predepositAmount: () => 0n, + amount: async () => await omniVault.minAmount(), + withdrawFeeFrom: () => TARGET, + receiver: () => signer1.address, + }, + { + name: "and redeem all rewards", + predepositAmount: () => TARGET / 10n, + amount: async () => (TARGET * 8n) / 10n, + withdrawFeeFrom: () => TARGET / 10n, + receiver: () => signer1.address, + }, + { + name: "up to target cap and above", + predepositAmount: () => TARGET / 10n, + amount: async () => TARGET, + withdrawFeeFrom: () => TARGET / 2n, + receiver: () => signer1.address, + }, + { + name: "above target cap", + predepositAmount: () => TARGET + 1n, + amount: async () => randomBI(19), + withdrawFeeFrom: () => TARGET, + receiver: () => signer1.address, + }, + { + name: "to another address", + predepositAmount: () => TARGET / 10n, + amount: async () => TARGET, + withdrawFeeFrom: () => TARGET, + receiver: () => signer2.address, + }, + + //Ratio < 1 + { + name: "more wo rewards when ratio < 1", + predepositAmount: () => TARGET / 3n, + amount: async () => randomBIMax(TARGET / 3n), + withdrawFeeFrom: () => 0n, + ratio: toWei(0.9), + receiver: () => signer1.address, + }, + { + name: "more with rewards when ratio < 1", + predepositAmount: () => TARGET / 3n, + amount: async () => randomBIMax(TARGET / 3n), + withdrawFeeFrom: () => TARGET, + ratio: toWei(0.9), + receiver: () => signer1.address, + }, + { + name: "min amount when ratio < 1", + predepositAmount: () => 0n, + amount: async () => await omniVault.minAmount(), + withdrawFeeFrom: () => TARGET, + ratio: toWei(0.9), + receiver: () => signer1.address, + }, + ]; + + args.forEach(function (arg) { + it(`Deposit ${arg.name}`, async function () { + //Predeposit + const predepositAmount = arg.predepositAmount(); + if (predepositAmount > 0n) { + const randomAddress = ethers.Wallet.createRandom().address; + await omniVault.connect(signer3).deposit(randomAddress, { value: predepositAmount }); + expect(await omniVault.getFlashCapacity()).to.be.closeTo(predepositAmount, 2n); + } + + //Add rewards + let availableBonus = await addReplenishBonusToOmniVault(arg.withdrawFeeFrom()); + + if (arg.ratio) { + await ratioFeedL2.updateRatioBatch([await iToken.getAddress()], [arg.ratio]); + console.log(`Ratio updated:\t\t\t${(await omniVault.ratio()).format()}`); + } + + const receiver = arg.receiver(); + const stakerSharesBefore = await iToken.balanceOf(receiver); + const totalAssetsBefore = await omniVault.totalAssets(); + const flashCapacityBefore = await omniVault.getFlashCapacity(); + console.log(`Flash capacity before:\t${flashCapacityBefore.format()}`); + + const amount = await arg.amount(); + console.log(`Amount:\t\t\t\t\t${amount.format()}`); + const calculatedBonus = await omniVault.calculateDepositBonus(amount); + console.log(`Preview bonus:\t\t\t${calculatedBonus.format()}`); + console.log(`Available bonus:\t\t${availableBonus.format()}`); + const expectedBonus = calculatedBonus <= availableBonus ? calculatedBonus : availableBonus; + availableBonus -= expectedBonus; + console.log(`Expected bonus:\t\t\t${expectedBonus.format()}`); + const convertedShares = await omniVault.convertToShares(amount + expectedBonus); + const expectedShares = ((amount + expectedBonus) * (await omniVault.ratio())) / e18; + + const tx = await omniVault.connect(signer1).deposit(receiver, { value: amount }); + const receipt = await tx.wait(); + const depositEvent = receipt?.logs.filter((e) => e.eventName === "Deposit"); + expect(depositEvent.length).to.be.eq(1); + expect(depositEvent[0].args["sender"]).to.be.eq(signer1.address); + expect(depositEvent[0].args["receiver"]).to.be.eq(receiver); + expect(depositEvent[0].args["amount"]).to.be.eq(amount); + expect(depositEvent[0].args["iShares"]).to.be.closeTo(convertedShares, 1n); + //DepositBonus event + const actualBonus = receipt?.logs.find((l) => l.eventName === "DepositBonus")?.args.amount || 0n; + console.log(`Actual bonus:\t\t\t${actualBonus.format()}`); + + const stakerSharesAfter = await iToken.balanceOf(receiver); + const totalAssetsAfter = await omniVault.totalAssets(); + const flashCapacityAfter = await omniVault.getFlashCapacity(); + console.log(`Bonus after:\t\t\t${availableBonus.format()}`); + + expect(stakerSharesAfter - stakerSharesBefore).to.be.closeTo(expectedShares, 1n); + expect(stakerSharesAfter - stakerSharesBefore).to.be.closeTo(convertedShares, 1n); + expect(totalAssetsAfter - totalAssetsBefore).to.be.eq(amount); //omniVault balance is the same + expect(actualBonus).to.be.closeTo(expectedBonus, 1n); + expect(flashCapacityAfter - flashCapacityBefore).to.be.closeTo(amount + expectedBonus, 1n); //rewarded bonus goes to flash capacity + }); + it(`Deposit with referral code ${arg.name}`, async function () { + //Predeposit + const predepositAmount = arg.predepositAmount(); + if (predepositAmount > 0n) { + const randomAddress = ethers.Wallet.createRandom().address; + await omniVault.connect(signer3).deposit(randomAddress, { value: predepositAmount }); + expect(await omniVault.getFlashCapacity()).to.be.closeTo(predepositAmount, 2n); + } + + //Add rewards + let availableBonus = await addReplenishBonusToOmniVault(arg.withdrawFeeFrom()); + + if (arg.ratio) { + await ratioFeedL2.updateRatioBatch([await iToken.getAddress()], [arg.ratio]); + console.log(`Ratio updated:\t\t\t${(await omniVault.ratio()).format()}`); + } + + const receiver = arg.receiver(); + const stakerSharesBefore = await iToken.balanceOf(receiver); + const totalAssetsBefore = await omniVault.totalAssets(); + const flashCapacityBefore = await omniVault.getFlashCapacity(); + console.log(`Flash capacity before:\t${flashCapacityBefore.format()}`); + + const amount = await arg.amount(); + console.log(`Amount:\t\t\t\t\t${amount.format()}`); + const calculatedBonus = await omniVault.calculateDepositBonus(amount); + console.log(`Preview bonus:\t\t\t${calculatedBonus.format()}`); + console.log(`Available bonus:\t\t${availableBonus.format()}`); + const expectedBonus = calculatedBonus <= availableBonus ? calculatedBonus : availableBonus; + availableBonus -= expectedBonus; + console.log(`Expected bonus:\t\t\t${expectedBonus.format()}`); + const convertedShares = await omniVault.convertToShares(amount + expectedBonus); + const expectedShares = ((amount + expectedBonus) * (await omniVault.ratio())) / e18; + + const code = ethers.encodeBytes32String("code"); + const tx = await omniVault.connect(signer1).depositWithReferral(receiver, code, { value: amount }); + const receipt = await tx.wait(); + const depositEvent = receipt?.logs.filter((e) => e.eventName === "Deposit"); + expect(depositEvent.length).to.be.eq(1); + expect(depositEvent[0].args["sender"]).to.be.eq(signer1.address); + expect(depositEvent[0].args["receiver"]).to.be.eq(receiver); + expect(depositEvent[0].args["amount"]).to.be.eq(amount); + expect(depositEvent[0].args["iShares"]).to.be.closeTo(convertedShares, 1n); + await expect(tx).to.emit(omniVault, "ReferralCode").withArgs(signer1.address, code); + + //DepositBonus event + const actualBonus = receipt?.logs.find((l) => l.eventName === "DepositBonus")?.args.amount || 0n; + console.log(`Actual bonus:\t\t\t${actualBonus.format()}`); + + const stakerSharesAfter = await iToken.balanceOf(receiver); + const totalAssetsAfter = await omniVault.totalAssets(); + const flashCapacityAfter = await omniVault.getFlashCapacity(); + console.log(`Bonus after:\t\t\t${availableBonus.format()}`); + + expect(stakerSharesAfter - stakerSharesBefore).to.be.closeTo(expectedShares, 1n); + expect(stakerSharesAfter - stakerSharesBefore).to.be.closeTo(convertedShares, 1n); + expect(totalAssetsAfter - totalAssetsBefore).to.be.eq(amount); //omniVault balance is the same + expect(actualBonus).to.be.closeTo(expectedBonus, 1n); + expect(flashCapacityAfter - flashCapacityBefore).to.be.closeTo(amount + expectedBonus, 1n); //rewarded bonus goes to flash capacity + }); + }); + + const invalidArgs = [ + { + name: "amount is 0", + amount: async () => 0n, + receiver: () => signer1.address, + customError: "LowerMinAmount", + }, + { + name: "amount < min", + amount: async () => (await omniVault.minAmount()) - 1n, + receiver: () => signer1.address, + customError: "LowerMinAmount", + }, + { + name: "to zero address", + amount: async () => randomBI(18), + receiver: () => ethers.ZeroAddress, + customError: "NullParams", + }, + ]; + + invalidArgs.forEach(function (arg) { + it(`Reverts when deposit ${arg.name}`, async function () { + const amount = await arg.amount(); + const receiver = arg.receiver(); + if (arg.customError) { + await expect(omniVault.connect(signer1).deposit(receiver, { value: amount })).to.be.revertedWithCustomError( + omniVault, + arg.customError + ); + } else { + await expect(omniVault.connect(signer1).deposit(receiver, { value: amount })).to.be.revertedWith(arg.error); + } + }); + }); + + it("Reverts when omniVault is paused", async function () { + await omniVault.pause(); + const depositAmount = randomBI(19); + await expect(omniVault.connect(signer1).deposit(signer1.address, { value: depositAmount })).revertedWithCustomError( + omniVault, + "EnforcedPause" + ); + await omniVault.unpause(); + }); + + it("Reverts when shares is 0", async function () { + await omniVault.setMinAmount(0n); + await expect(omniVault.connect(signer1).deposit(signer1.address, { value: 0n })).revertedWithCustomError( + omniVault, + "DepositInconsistentResultedState" + ); + }); + }); + + describe("Deposit bonus params setter and calculation", function () { + let TARGET, MAX_PERCENT, localSnapshot; + before(async function () { + MAX_PERCENT = await omniVault.MAX_PERCENT(); + }); + + const depositBonusSegment = [ + { + fromUtilization: async () => 0n, + fromPercent: async () => await omniVault.maxBonusRate(), + toUtilization: async () => await omniVault.depositUtilizationKink(), + toPercent: async () => await omniVault.optimalBonusRate(), + }, + { + fromUtilization: async () => await omniVault.depositUtilizationKink(), + fromPercent: async () => await omniVault.optimalBonusRate(), + toUtilization: async () => await omniVault.MAX_PERCENT(), + toPercent: async () => await omniVault.optimalBonusRate(), + }, + { + fromUtilization: async () => await omniVault.MAX_PERCENT(), + fromPercent: async () => 0n, + toUtilization: async () => ethers.MaxUint256, + toPercent: async () => 0n, + }, + ]; + + const args = [ + { + name: "Normal bonus rewards profile > 0", + newMaxBonusRate: BigInt(2 * 10 ** 8), //2% + newOptimalBonusRate: BigInt(0.2 * 10 ** 8), //0.2% + newDepositUtilizationKink: BigInt(25 * 10 ** 8), //25% + }, + { + name: "Optimal utilization = 0 => always optimal rate", + newMaxBonusRate: BigInt(2 * 10 ** 8), + newOptimalBonusRate: BigInt(10 ** 8), //1% + newDepositUtilizationKink: 0n, + }, + { + name: "Optimal bonus rate = 0", + newMaxBonusRate: BigInt(2 * 10 ** 8), + newOptimalBonusRate: 0n, + newDepositUtilizationKink: BigInt(25 * 10 ** 8), + }, + { + name: "Optimal bonus rate = max > 0 => rate is constant over utilization", + newMaxBonusRate: BigInt(2 * 10 ** 8), + newOptimalBonusRate: BigInt(2 * 10 ** 8), + newDepositUtilizationKink: BigInt(25 * 10 ** 8), + }, + { + name: "Optimal bonus rate = max = 0 => no bonus", + newMaxBonusRate: 0n, + newOptimalBonusRate: 0n, + newDepositUtilizationKink: BigInt(25 * 10 ** 8), + }, + //Will fail when OptimalBonusRate > MaxBonusRate + ]; + + const amounts = [ + { + name: "min amount from 0", + flashCapacity: () => 0n, + amount: async () => (await omniVault.convertToAssets(await omniVault.minAmount())) + 1n, + }, + { + name: "1 wei from 0", + flashCapacity: () => 0n, + amount: async () => 1n, + }, + { + name: "from 0 to 25% of TARGET", + flashCapacity: () => 0n, + amount: async () => (TARGET * 25n) / 100n, + }, + { + name: "from 0 to 25% + 1wei of TARGET", + flashCapacity: () => 0n, + amount: async () => (TARGET * 25n) / 100n, + }, + { + name: "from 25% to 100% of TARGET", + flashCapacity: () => (TARGET * 25n) / 100n, + amount: async () => (TARGET * 75n) / 100n, + }, + { + name: "from 0% to 100% of TARGET", + flashCapacity: () => 0n, + amount: async () => TARGET, + }, + { + name: "from 0% to 200% of TARGET", + flashCapacity: () => 0n, + amount: async () => TARGET * 2n, + }, + ]; + + args.forEach(function (arg) { + it(`setDepositBonusParams: ${arg.name}`, async function () { + await snapshot.restore(); + TARGET = e18; + await omniVault.connect(owner).setTargetFlashCapacity(TARGET); + + await expect(omniVault.setDepositBonusParams(arg.newMaxBonusRate, arg.newOptimalBonusRate, arg.newDepositUtilizationKink)) + .to.emit(omniVault, "DepositBonusParamsChanged") + .withArgs(arg.newMaxBonusRate, arg.newOptimalBonusRate, arg.newDepositUtilizationKink); + + expect(await omniVault.maxBonusRate()).to.be.eq(arg.newMaxBonusRate); + expect(await omniVault.optimalBonusRate()).to.be.eq(arg.newOptimalBonusRate); + expect(await omniVault.depositUtilizationKink()).to.be.eq(arg.newDepositUtilizationKink); + localSnapshot = await takeSnapshot(); + }); + + amounts.forEach(function (amount) { + it(`calculateDepositBonus for ${amount.name}`, async function () { + await localSnapshot.restore(); + let flashCapacity = amount.flashCapacity(); + if (flashCapacity > 0n) { + await omniVault.connect(signer1).deposit(signer1.address, { value: flashCapacity }); + } + let _amount = await amount.amount(); + let depositBonus = 0n; + while (_amount > 0n) { + for (const feeFunc of depositBonusSegment) { + const utilization = (flashCapacity * MAX_PERCENT) / TARGET; + const fromUtilization = await feeFunc.fromUtilization(); + const toUtilization = await feeFunc.toUtilization(); + if (_amount > 0n && fromUtilization <= utilization && utilization < toUtilization) { + const fromPercent = await feeFunc.fromPercent(); + const toPercent = await feeFunc.toPercent(); + const upperBound = (toUtilization * TARGET) / MAX_PERCENT; + const replenished = upperBound > flashCapacity + _amount ? _amount : upperBound - flashCapacity; + const slope = ((toPercent - fromPercent) * MAX_PERCENT) / (toUtilization - fromUtilization); + const bonusPercent = fromPercent + (slope * (flashCapacity + replenished / 2n)) / TARGET; + const bonus = (replenished * bonusPercent) / MAX_PERCENT; + console.log(`Replenished:\t\t\t${replenished.format()}`); + console.log(`Bonus percent:\t\t\t${bonusPercent.format()}`); + console.log(`Bonus:\t\t\t\t\t${bonus.format()}`); + flashCapacity += replenished; + _amount -= replenished; + depositBonus += bonus; + } + } + } + let contractBonus = await omniVault.calculateDepositBonus(await amount.amount()); + console.log(`Expected deposit bonus:\t${depositBonus.format()}`); + console.log(`Contract deposit bonus:\t${contractBonus.format()}`); + expect(contractBonus).to.be.closeTo(depositBonus, 1n); + }); + }); + }); + + const invalidArgs = [ + { + name: "MaxBonusRate > MAX_PERCENT", + newMaxBonusRate: () => MAX_PERCENT + 1n, + newOptimalBonusRate: () => BigInt(0.2 * 10 ** 8), //0.2% + newDepositUtilizationKink: () => BigInt(25 * 10 ** 8), + customError: "ParameterExceedsLimits", + }, + { + name: "OptimalBonusRate > MAX_PERCENT", + newMaxBonusRate: () => BigInt(2 * 10 ** 8), + newOptimalBonusRate: () => MAX_PERCENT + 1n, + newDepositUtilizationKink: () => BigInt(25 * 10 ** 8), + customError: "ParameterExceedsLimits", + }, + { + name: "DepositUtilizationKink > MAX_PERCENT", + newMaxBonusRate: () => BigInt(2 * 10 ** 8), + newOptimalBonusRate: () => BigInt(0.2 * 10 ** 8), //0.2% + newDepositUtilizationKink: () => MAX_PERCENT + 1n, + customError: "ParameterExceedsLimits", + }, + ]; + invalidArgs.forEach(function (arg) { + it(`setDepositBonusParams reverts when ${arg.name}`, async function () { + await expect( + omniVault.setDepositBonusParams(arg.newMaxBonusRate(), arg.newOptimalBonusRate(), arg.newDepositUtilizationKink()) + ).to.be.revertedWithCustomError(omniVault, arg.customError); + }); + }); + + it("setDepositBonusParams reverts when caller is not an owner", async function () { + await expect( + omniVault.connect(signer1).setDepositBonusParams(BigInt(2 * 10 ** 8), BigInt(0.2 * 10 ** 8), BigInt(25 * 10 ** 8)) + ).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); + }); + }); + + describe("Flash withdraw", function () { + let TARGET, MAX_PERCENT, ratio; + beforeEach(async function () { + await snapshot.restore(); + TARGET = toWei(10); + await omniVault.setTargetFlashCapacity(TARGET); + MAX_PERCENT = await omniVault.MAX_PERCENT(); + }); + + const args = [ + { + name: "some amount when capacity > TARGET", + poolCapacity: () => TARGET * 2n, + amount: async () => randomBIMax(TARGET / 2n), + receiver: () => signer1, + }, + { + name: "all capacity above TARGET", + poolCapacity: () => TARGET * 2n, + amount: async () => (await omniVault.getFlashCapacity()) - TARGET, + receiver: () => signer1, + }, + { + name: "all when pool capacity > TARGET", + poolCapacity: () => TARGET + e18, + amount: async () => await omniVault.getFlashCapacity(), + receiver: () => signer1, + }, + { + name: "partially when pool capacity = TARGET", + poolCapacity: () => TARGET, + amount: async () => (await omniVault.getFlashCapacity()) / 2n, + receiver: () => signer1, + }, + { + name: "all when pool capacity = TARGET", + poolCapacity: () => TARGET, + amount: async () => await omniVault.getFlashCapacity(), + receiver: () => signer1, + }, + { + name: "partially when pool capacity < TARGET", + poolCapacity: () => (TARGET * 3n) / 4n, + amount: async () => (await omniVault.getFlashCapacity()) / 2n, + receiver: () => signer1, + }, + { + name: "all when pool capacity < TARGET", + poolCapacity: () => (TARGET * 3n) / 4n, + amount: async () => await omniVault.getFlashCapacity(), + receiver: () => signer1, + }, + { + name: "to another address", + poolCapacity: () => (TARGET * 3n) / 4n, + amount: async () => (await omniVault.getFlashCapacity()) / 2n, + receiver: () => signer2, + }, + { + name: "after protocol fee has been changed", + poolCapacity: () => TARGET, + amount: async () => await omniVault.getFlashCapacity(), + receiver: () => signer1, + protocolFee: () => BigInt(25 * 10 ** 8), + }, + ]; + + args.forEach(function (arg) { + it(`flashWithdraw: ${arg.name}`, async function () { + ratio = toWei(0.8); + await ratioFeedL2.updateRatioBatch([iToken.address], [ratio]); + //Deposit + const predepositAmount = arg.poolCapacity(); + await omniVault.connect(signer1).deposit(signer1.address, { value: predepositAmount }); + //Set protocol fee + let protocolFee = await omniVault.protocolFee(); + if (arg.protocolFee) { + protocolFee = arg.protocolFee(); + await omniVault.setProtocolFee(protocolFee); + } + //flashWithdraw + const ratioBefore = await omniVault.ratio(); + console.log(`Ratio before:\t\t\t${ratioBefore.format()}`); + + const receiver = await arg.receiver(); + const sharesBefore = await iToken.balanceOf(signer1); + const assetBalanceBefore = await ethers.provider.getBalance(receiver); + const treasuryBalanceBefore = await ethers.provider.getBalance(treasury); + const totalAssetsBefore = await omniVault.totalAssets(); + const flashCapacityBefore = await omniVault.getFlashCapacity(); + console.log(`Flash capacity before:\t${flashCapacityBefore.format()}`); + + const amount = await arg.amount(); + const shares = await omniVault.convertToShares(amount); + const expectedFee = await omniVault.calculateFlashWithdrawFee(amount); + console.log(`Expected fee:\t\t\t${expectedFee.format()}`); + + let tx = await omniVault.connect(signer1).flashWithdraw(shares, receiver.address); + const receipt = await tx.wait(); + const txFee = receiver.address === signer1.address ? BigInt(receipt.gasUsed * receipt.gasPrice) : 0n; + const withdrawEvent = receipt?.logs.filter((e) => e.eventName === "FlashWithdraw"); + expect(withdrawEvent.length).to.be.eq(1); + expect(withdrawEvent[0].args["sender"]).to.be.eq(signer1.address); + expect(withdrawEvent[0].args["receiver"]).to.be.eq(receiver.address); + expect(withdrawEvent[0].args["owner"]).to.be.eq(signer1.address); + expect(withdrawEvent[0].args["amount"]).to.be.closeTo(amount - expectedFee, 2n); + expect(withdrawEvent[0].args["iShares"]).to.be.closeTo(shares, 2n); + const actualFee = withdrawEvent[0].args["fee"]; + console.log(`Actual fee:\t\t\t\t${actualFee.format()}`); + + const sharesAfter = await iToken.balanceOf(signer1); + const assetBalanceAfter = await ethers.provider.getBalance(receiver); + const treasuryBalanceAfter = await ethers.provider.getBalance(treasury); + const totalAssetsAfter = await omniVault.totalAssets(); + const flashCapacityAfter = await omniVault.getFlashCapacity(); + console.log(`Shares diff:\t\t\t${(sharesBefore - sharesAfter).format()}`); + console.log(`Receiver balance diff:\t${(assetBalanceAfter - assetBalanceBefore).format()}`); + console.log(`TotalAssets diff:\t\t${(totalAssetsBefore - totalAssetsAfter).format()}`); + console.log(`Flash capacity diff:\t${(flashCapacityBefore - flashCapacityAfter).format()}`); + + expect(sharesBefore - sharesAfter).to.be.eq(shares); + expect(assetBalanceAfter - assetBalanceBefore).to.be.closeTo(amount - expectedFee - txFee, 2n); + expect(actualFee).to.be.closeTo(expectedFee, 2n); + const toDepositBonus = (expectedFee * (MAX_PERCENT - protocolFee)) / MAX_PERCENT; + const toTreasury = (expectedFee * protocolFee) / MAX_PERCENT; + expect(treasuryBalanceAfter - treasuryBalanceBefore).to.be.closeTo(toTreasury, 2n); + expect(totalAssetsBefore - totalAssetsAfter).to.be.closeTo(amount - toDepositBonus, 2n); + expect(flashCapacityBefore - flashCapacityAfter).to.be.closeTo(amount, 2n); + }); + }); + + it("Reverts when capacity is not sufficient", async function () { + await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); + ratio = toWei(0.8); + await ratioFeedL2.updateRatioBatch([iToken.address], [ratio]); + const shares = await iToken.balanceOf(signer1.address); + const capacity = await omniVault.getFlashCapacity(); + await expect(omniVault.connect(signer1).flashWithdraw(shares, signer1.address)) + .to.be.revertedWithCustomError(omniVault, "InsufficientCapacity") + .withArgs(capacity); + }); + + it("Reverts when amount < min", async function () { + await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); + const minAmount = await omniVault.minAmount(); + const shares = (await omniVault.convertToShares(minAmount)) - 1n; + await expect(omniVault.connect(signer1).flashWithdraw(shares, signer1.address)) + .to.be.revertedWithCustomError(omniVault, "LowerMinAmount") + .withArgs(minAmount); + }); + + it("Reverts when omniVault is paused", async function () { + await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); + await omniVault.pause(); + const shares = await iToken.balanceOf(signer1.address); + await expect(omniVault.connect(signer1).flashWithdraw(shares / 2n, signer1.address)).to.be.revertedWithCustomError( + omniVault, + "EnforcedPause" + ); + }); + + it("Reverts when withdraws to 0 address", async function () { + await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); + const shares = await iToken.balanceOf(signer1.address); + await expect(omniVault.connect(signer1).flashWithdraw(shares / 2n, ethers.ZeroAddress)).to.be.revertedWithCustomError( + omniVault, + "NullParams" + ); + }); + + it("Reverts when shares = 0", async function () { + await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); + await expect(omniVault.connect(signer1).flashWithdraw(0n, signer1.address)).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + }); + + describe("Withdraw fee params setter and calculation", function () { + let TARGET, MAX_PERCENT, localSnapshot; + before(async function () { + MAX_PERCENT = await omniVault.MAX_PERCENT(); + }); + + const withdrawFeeSegment = [ + { + fromUtilization: async () => 0n, + fromPercent: async () => await omniVault.maxFlashFeeRate(), + toUtilization: async () => await omniVault.withdrawUtilizationKink(), + toPercent: async () => await omniVault.optimalWithdrawalRate(), + }, + { + fromUtilization: async () => await omniVault.withdrawUtilizationKink(), + fromPercent: async () => await omniVault.optimalWithdrawalRate(), + toUtilization: async () => await omniVault.MAX_PERCENT(), + toPercent: async () => await omniVault.optimalWithdrawalRate(), + }, + { + fromUtilization: async () => await omniVault.MAX_PERCENT(), + fromPercent: async () => 0n, + toUtilization: async () => ethers.MaxUint256, + toPercent: async () => 0n, + }, + ]; + + const args = [ + { + name: "Normal withdraw fee profile > 0", + newMaxFlashFeeRate: BigInt(2 * 10 ** 8), //2% + newOptimalWithdrawalRate: BigInt(0.2 * 10 ** 8), //0.2% + newWithdrawUtilizationKink: BigInt(25 * 10 ** 8), + }, + { + name: "Optimal utilization = 0 => always optimal rate", + newMaxFlashFeeRate: BigInt(2 * 10 ** 8), + newOptimalWithdrawalRate: BigInt(10 ** 8), //1% + newWithdrawUtilizationKink: 0n, + }, + { + name: "Optimal withdraw rate = 0", + newMaxFlashFeeRate: BigInt(2 * 10 ** 8), + newOptimalWithdrawalRate: 0n, + newWithdrawUtilizationKink: BigInt(25 * 10 ** 8), + }, + { + name: "Optimal withdraw rate = max > 0 => rate is constant over utilization", + newMaxFlashFeeRate: BigInt(2 * 10 ** 8), + newOptimalWithdrawalRate: BigInt(2 * 10 ** 8), + newWithdrawUtilizationKink: BigInt(25 * 10 ** 8), + }, + { + name: "Optimal withdraw rate = max = 0 => no fee", + newMaxFlashFeeRate: 0n, + newOptimalWithdrawalRate: 0n, + newWithdrawUtilizationKink: BigInt(25 * 10 ** 8), + }, + //Will fail when optimalWithdrawalRate > MaxFlashFeeRate + ]; + + const amounts = [ + { + name: "from 200% to 0% of TARGET", + flashCapacity: () => TARGET * 2n, + amount: async () => await omniVault.getFlashCapacity(), + }, + { + name: "from 100% to 0% of TARGET", + flashCapacity: () => TARGET, + amount: async () => await omniVault.getFlashCapacity(), + }, + { + name: "1 wei from 100%", + flashCapacity: () => TARGET, + amount: async () => 1n, + }, + { + name: "min amount from 100%", + flashCapacity: () => TARGET, + amount: async () => (await omniVault.convertToAssets(await omniVault.minAmount())) + 1n, + }, + { + name: "from 100% to 25% of TARGET", + flashCapacity: () => TARGET, + amount: async () => (TARGET * 75n) / 100n, + }, + { + name: "from 100% to 25% - 1wei of TARGET", + flashCapacity: () => TARGET, + amount: async () => (TARGET * 75n) / 100n + 1n, + }, + { + name: "from 25% to 0% of TARGET", + flashCapacity: () => (TARGET * 25n) / 100n, + amount: async () => await omniVault.getFlashCapacity(), + }, + ]; + + args.forEach(function (arg) { + it(`setFlashWithdrawFeeParams: ${arg.name}`, async function () { + await snapshot.restore(); + TARGET = e18; + await omniVault.connect(owner).setTargetFlashCapacity(TARGET); + + await expect( + omniVault.setFlashWithdrawFeeParams(arg.newMaxFlashFeeRate, arg.newOptimalWithdrawalRate, arg.newWithdrawUtilizationKink) + ) + .to.emit(omniVault, "WithdrawFeeParamsChanged") + .withArgs(arg.newMaxFlashFeeRate, arg.newOptimalWithdrawalRate, arg.newWithdrawUtilizationKink); + + expect(await omniVault.maxFlashFeeRate()).to.be.eq(arg.newMaxFlashFeeRate); + expect(await omniVault.optimalWithdrawalRate()).to.be.eq(arg.newOptimalWithdrawalRate); + expect(await omniVault.withdrawUtilizationKink()).to.be.eq(arg.newWithdrawUtilizationKink); + localSnapshot = await takeSnapshot(); + }); + + amounts.forEach(function (amount) { + it(`calculateFlashWithdrawFee for: ${amount.name}`, async function () { + await localSnapshot.restore(); + if (amount.flashCapacity() > 0n) { + await omniVault.connect(signer1).deposit(signer1.address, { value: amount.flashCapacity() }); + } + let flashCapacity = await omniVault.getFlashCapacity(); + console.log(`flash capacity: ${flashCapacity.format()}`); + let _amount = await amount.amount(); + let withdrawFee = 0n; + while (_amount > 0n) { + for (const feeFunc of withdrawFeeSegment) { + const utilization = (flashCapacity * MAX_PERCENT) / TARGET; + const fromUtilization = await feeFunc.fromUtilization(); + const toUtilization = await feeFunc.toUtilization(); + if (_amount > 0n && fromUtilization < utilization && utilization <= toUtilization) { + console.log(`Utilization:\t\t\t${utilization.format()}`); + const fromPercent = await feeFunc.fromPercent(); + const toPercent = await feeFunc.toPercent(); + const lowerBound = (fromUtilization * TARGET) / MAX_PERCENT; + const replenished = lowerBound > flashCapacity - _amount ? flashCapacity - lowerBound : _amount; + const slope = ((toPercent - fromPercent) * MAX_PERCENT) / (toUtilization - fromUtilization); + const withdrawFeePercent = fromPercent + (slope * (flashCapacity - replenished / 2n)) / TARGET; + const fee = (replenished * withdrawFeePercent) / MAX_PERCENT; + console.log(`Replenished:\t\t\t${replenished.format()}`); + console.log(`Fee percent:\t\t\t${withdrawFeePercent.format()}`); + console.log(`Fee:\t\t\t\t\t${fee.format()}`); + flashCapacity -= replenished; + _amount -= replenished; + withdrawFee += fee; + } + } + } + let contractFee = await omniVault.calculateFlashWithdrawFee(await amount.amount()); + console.log(`Expected withdraw fee:\t${withdrawFee.format()}`); + console.log(`Contract withdraw fee:\t${contractFee.format()}`); + expect(contractFee).to.be.closeTo(withdrawFee, 1n); + }); + }); + }); + + const invalidArgs = [ + { + name: "MaxBonusRate > MAX_PERCENT", + newMaxFlashFeeRate: () => MAX_PERCENT + 1n, + newOptimalWithdrawalRate: () => BigInt(0.2 * 10 ** 8), //0.2% + newWithdrawUtilizationKink: () => BigInt(25 * 10 ** 8), + customError: "ParameterExceedsLimits", + }, + { + name: "OptimalBonusRate > MAX_PERCENT", + newMaxFlashFeeRate: () => BigInt(2 * 10 ** 8), + newOptimalWithdrawalRate: () => MAX_PERCENT + 1n, + newWithdrawUtilizationKink: () => BigInt(25 * 10 ** 8), + customError: "ParameterExceedsLimits", + }, + { + name: "DepositUtilizationKink > MAX_PERCENT", + newMaxFlashFeeRate: () => BigInt(2 * 10 ** 8), + newOptimalWithdrawalRate: () => BigInt(0.2 * 10 ** 8), //0.2% + newWithdrawUtilizationKink: () => MAX_PERCENT + 1n, + customError: "ParameterExceedsLimits", + }, + ]; + invalidArgs.forEach(function (arg) { + it(`setFlashWithdrawFeeParams reverts when ${arg.name}`, async function () { + await expect( + omniVault.setFlashWithdrawFeeParams(arg.newMaxFlashFeeRate(), arg.newOptimalWithdrawalRate(), arg.newWithdrawUtilizationKink()) + ).to.be.revertedWithCustomError(omniVault, arg.customError); + }); + }); + + it("calculateFlashWithdrawFee reverts when capacity is not sufficient", async function () { + await snapshot.restore(); + await omniVault.connect(signer1).deposit(signer1.address, { value: randomBI(19) }); + const capacity = await omniVault.getFlashCapacity(); + await expect(omniVault.calculateFlashWithdrawFee(capacity + 1n)) + .to.be.revertedWithCustomError(omniVault, "InsufficientCapacity") + .withArgs(capacity); + }); + + it("setFlashWithdrawFeeParams reverts when caller is not an owner", async function () { + await expect( + omniVault.connect(signer1).setFlashWithdrawFeeParams(BigInt(2 * 10 ** 8), BigInt(0.2 * 10 ** 8), BigInt(25 * 10 ** 8)) + ).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); + }); + }); + + describe("Setters", function () { + beforeEach(async function () { + await snapshot.restore(); + }); + + it("setTreasuryAddress(): only owner can", async function () { + const newTreasury = ethers.Wallet.createRandom().address; + + const currentTreasury = await omniVault.treasury(); + + await expect(omniVault.setTreasuryAddress(newTreasury)) + .to.emit(omniVault, "TreasuryUpdated") + .withArgs(currentTreasury, newTreasury); + + expect(await omniVault.treasury()).to.be.eq(newTreasury); + }); + + it("setTreasuryAddress(): reverts when set to zero address", async function () { + await expect(omniVault.setTreasuryAddress(ethers.ZeroAddress)).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + + it("setTreasuryAddress(): reverts when caller is not an owner", async function () { + await expect(omniVault.connect(signer1).setTreasuryAddress(signer1.address)).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setRatioFeed(): only owner can", async function () { + const ratioFeed = await omniVault.ratioFeed(); + const iRatioFeedFactory = await ethers.getContractFactory("InceptionRatioFeed"); + const newRatioFeed = await upgrades.deployProxy(iRatioFeedFactory, []); + newRatioFeed.address = await newRatioFeed.getAddress(); + await expect(omniVault.setRatioFeed(newRatioFeed.address)) + .to.emit(omniVault, "RatioFeedChanged") + .withArgs(ratioFeed, newRatioFeed.address); + expect(await omniVault.ratioFeed()).to.be.eq(newRatioFeed.address); + + const ratio = randomBI(18); + await newRatioFeed.updateRatioBatch([await iToken.getAddress()], [ratio]); + expect(await omniVault.ratio()).to.be.eq(ratio); + }); + + it("setRatioFeed(): reverts when new value is zero address", async function () { + await expect(omniVault.setRatioFeed(ethers.ZeroAddress)).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + + it("setRatioFeed(): reverts when caller is not an owner", async function () { + const newRatioFeed = ethers.Wallet.createRandom().address; + await expect(omniVault.connect(signer1).setRatioFeed(newRatioFeed)).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setOperator(): only owner can", async function () { + const newValue = ethers.Wallet.createRandom().address; + await expect(omniVault.setOperator(newValue)).to.emit(omniVault, "OperatorChanged").withArgs(operator.address, newValue); + expect(await omniVault.operator()).to.be.eq(newValue); + }); + + it("setOperator(): reverts when caller is not an owner", async function () { + await expect(omniVault.connect(signer1).setOperator(signer1.address)).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setOperator(): reverts when set to 0 address", async function () { + await expect(omniVault.setOperator(ethers.ZeroAddress)).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + + it("ratio() reverts when ratioFeed is 0 address", async function () { + const omniVaultFactory = await ethers.getContractFactory("InceptionOmniVault"); + const omniVault = await upgrades.deployProxy( + omniVaultFactory, + ["Omnivault", operator.address, iToken.address, ethers.ZeroAddress], + { initializer: "initialize" } + ); + omniVault.address = await omniVault.getAddress(); + await iToken.setVault(omniVault.address); + await expect(omniVault.ratio()).to.be.reverted; + }); + + it("setCrossChainAdapter(): only owner can", async function () { + const newValue = ethers.Wallet.createRandom().address; + + // Capture the current cross-chain adapter address before making the change + const currentAdapter = await omniVault.crossChainAdapter(); + + // Expect the event to include both the previous and new cross-chain adapter addresses + await expect(omniVault.setCrossChainAdapter(newValue)) + .to.emit(omniVault, "CrossChainAdapterChanged") + .withArgs(currentAdapter, newValue); + + // Verify the cross-chain adapter address has been updated + expect(await omniVault.crossChainAdapter()).to.be.eq(newValue); + }); + + it("setCrossChainAdapter(): reverts when set to zero address", async function () { + await expect(omniVault.setCrossChainAdapter(ethers.ZeroAddress)).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + + it("setCrossChainAdapter(): reverts when caller is not an owner", async function () { + await expect(omniVault.connect(signer1).setCrossChainAdapter(signer1.address)).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setMinAmount(): only owner can", async function () { + const prevValue = await omniVault.minAmount(); + const newMinAmount = randomBI(4); + await expect(omniVault.setMinAmount(newMinAmount)).to.emit(omniVault, "MinAmountChanged").withArgs(prevValue, newMinAmount); + expect(await omniVault.minAmount()).to.be.eq(newMinAmount); + await expect(omniVault.connect(signer1).deposit(signer1.address, { value: newMinAmount - 1n })) + .to.be.revertedWithCustomError(omniVault, "LowerMinAmount") + .withArgs(newMinAmount); + }); + + it("setMinAmount(): reverts when called by not an owner", async function () { + await expect(omniVault.connect(signer1).setMinAmount(randomBI(3))).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setTargetFlashCapacity(): only owner can", async function () { + const prevValue = await omniVault.targetCapacity(); + const newValue = randomBI(18); + await expect(omniVault.setTargetFlashCapacity(newValue)).to.emit(omniVault, "TargetCapacityChanged").withArgs(prevValue, newValue); + expect(await omniVault.targetCapacity()).to.be.eq(newValue); + }); + + it("setTargetFlashCapacity(): reverts when called by not an owner", async function () { + const newValue = randomBI(18); + await expect(omniVault.connect(signer1).setTargetFlashCapacity(newValue)).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setTargetFlashCapacity(): reverts when sets to 0", async function () { + await expect(omniVault.setTargetFlashCapacity(0n)).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + + it("setProtocolFee(): sets share of flashWithdrawFee that goes to treasury", async function () { + const prevValue = await omniVault.protocolFee(); + const newValue = randomBI(10); + await expect(omniVault.setProtocolFee(newValue)).to.emit(omniVault, "ProtocolFeeChanged").withArgs(prevValue, newValue); + expect(await omniVault.protocolFee()).to.be.eq(newValue); + }); + + it("setProtocolFee(): reverts when > MAX_PERCENT", async function () { + const newValue = (await omniVault.MAX_PERCENT()) + 1n; + await expect(omniVault.setProtocolFee(newValue)) + .to.be.revertedWithCustomError(omniVault, "ParameterExceedsLimits") + .withArgs(newValue); + }); + + it("setProtocolFee(): reverts when caller is not an owner", async function () { + const newValue = randomBI(10); + await expect(omniVault.connect(signer1).setProtocolFee(newValue)).to.be.revertedWithCustomError( + omniVault, + "OwnableUnauthorizedAccount" + ); + }); + + it("setName(): only owner can", async function () { + const prevValue = await omniVault.name(); + const newValue = "New name"; + await expect(omniVault.setName(newValue)).to.emit(omniVault, "NameChanged").withArgs(prevValue, newValue); + expect(await omniVault.name()).to.be.eq(newValue); + }); + + it("setName(): reverts when new name is blank", async function () { + await expect(omniVault.setName("")).to.be.revertedWithCustomError(omniVault, "NullParams"); + }); + + it("setName(): reverts when called by not an owner", async function () { + await expect(omniVault.connect(signer1).setName("New name")).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); + }); + + it("pause(): only owner can", async function () { + expect(await omniVault.paused()).is.false; + await expect(omniVault.pause()).to.emit(omniVault, "Paused").withArgs(owner.address); + expect(await omniVault.paused()).is.true; + }); + + it("pause(): reverts when called by not an owner", async function () { + await expect(omniVault.connect(signer1).pause()).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); + }); + + it("pause(): reverts when already paused", async function () { + await omniVault.pause(); + await expect(omniVault.pause()).revertedWithCustomError(omniVault, "EnforcedPause"); + }); + + it("unpause(): only owner can", async function () { + await omniVault.pause(); + expect(await omniVault.paused()).is.true; + + await expect(omniVault.unpause()).to.emit(omniVault, "Unpaused").withArgs(owner.address); + expect(await omniVault.paused()).is.false; + }); + + it("unpause(): reverts when called by not an owner", async function () { + await omniVault.pause(); + expect(await omniVault.paused()).is.true; + await expect(omniVault.connect(signer1).unpause()).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); + }); + }); + + describe("Bridge", function () { + describe("Send eth", function () { + let TARGET = e18; + + beforeEach(async function () { + await snapshot.restore(); + await omniVault.setTargetFlashCapacity(TARGET); + }); + + const args = [ + { + name: "without extra value", + extraValue: 0n, + sender: () => operator, + amount: async () => await omniVault.getFreeBalance(), + }, + { + name: "with extra value by operator", + extraValue: randomBI(16), + sender: () => operator, + amount: async () => await omniVault.getFreeBalance(), + }, + { + name: "with extra value by owner", + extraValue: randomBI(16), + sender: () => owner, + amount: async () => await omniVault.getFreeBalance(), + }, + { + name: "options amount < freeBalance", + extraValue: 0n, + sender: () => operator, + amount: async () => 1n, + }, + ]; + args.forEach(function (arg) { + it(`sendEthToL1 ${arg.name}`, async function () { + await omniVault.connect(signer1).deposit(signer1, { value: TARGET + e18 }); + const freeBalance = await omniVault.getFreeBalance(); + const amount = await arg.amount(); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const sender = arg.sender(); + + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + console.log("fee", fee.format()); + const extraValue = arg.extraValue; + const tx = await omniVault.connect(sender).sendEthCrossChain(ETH_ID, options, { value: fee + extraValue }); + + await expect(tx).emit(omniVault, "EthCrossChainSent").withArgs(amount, ETH_ID); + await expect(tx).to.changeEtherBalance(rebalancer.address, amount); + await expect(tx).to.changeEtherBalance(sender.address, -fee, { includeFee: false }); + await expect(tx).to.changeEtherBalance(omniVault.address, -amount); //Extra value returned to sender + + if (extraValue > 0n) { + await expect(tx).to.emit(omniVault, "UnusedFeesSentBackToOperator").withArgs(extraValue); + } + }); + }); + + it("Reverts freeBalance < options amount", async function () { + await omniVault.connect(signer1).deposit(signer1, { value: TARGET + e18 }); + const amount = await omniVault.getFreeBalance(); + const options = Options.newOptions() + .addExecutorLzReceiveOption(200_000n, amount + 1n) + .toHex() + .toString(); + + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + await expect(omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee })).to.be.revertedWith( + "LayerZeroMock: not enough native for fees" + ); + }); + + it("Reverts when fee is not enough", async function () { + await omniVault.connect(signer1).deposit(signer1, { value: TARGET + e18 }); + const amount = await omniVault.getFreeBalance(); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + await expect(omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee - 1n })) + .to.revertedWithCustomError(omniVault, "FeesAboveMsgValue") + .withArgs(fee - 1n); + }); + + it("Reverts when there is no free balance", async function () { + await omniVault.connect(signer1).deposit(signer1, { value: TARGET - 10n }); + expect(await omniVault.getFreeBalance()).to.be.eq(0n); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + await expect(omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: 0n })).to.revertedWithCustomError( + omniVault, + "FreeBalanceTooLow" + ); + }); + + it("Reverts when called by not an operator", async function () { + await omniVault.connect(signer1).deposit(signer1, { value: TARGET * 2n }); + const amount = await omniVault.getFreeBalance(); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + await expect(omniVault.connect(signer1).sendEthCrossChain(ETH_ID, options, { value: fee })).to.revertedWithCustomError( + omniVault, + "OnlyOwnerOrOperator" + ); + }); + }); + + describe("Send info", function () { + let TARGET = e18; + + beforeEach(async function () { + await snapshot.restore(); + await omniVault.setTargetFlashCapacity(TARGET); + }); + + const args = [ + { + name: "When there are no eth and shares", + depositedEthAmount: () => 0n, + msgSender: () => operator, + }, + { + name: "After deposit", + depositedEthAmount: () => randomBI(18), + msgSender: () => operator, + }, + { + name: "After deposit when deposit bonus > 0", + depositedEthAmount: () => e18, + depositBonus: true, + msgSender: () => operator, + }, + { + name: "When there are shares, but eth was sent to L1", + depositedEthAmount: () => TARGET + e18, + depositBonus: true, + sentToL1EthAmount: (amount) => amount - TARGET, + msgSender: () => operator, + }, + { + name: "Owner can call", + depositedEthAmount: () => TARGET + randomBI(18), + depositBonus: true, + sentToL1EthAmount: (amount) => amount - TARGET, + msgSender: () => owner, + }, + { + name: "With extra fee operator", + depositedEthAmount: () => TARGET + randomBI(18), + depositBonus: true, + sentToL1EthAmount: (amount) => amount - TARGET, + msgSender: () => operator, + extra: randomBI(16), + }, + { + name: "With extra fee owner", + depositedEthAmount: () => TARGET + randomBI(18), + depositBonus: true, + sentToL1EthAmount: (amount) => amount - TARGET, + msgSender: () => owner, + extra: randomBI(16), + }, + ]; + args.forEach(function (arg) { + it(`sendAssetsInfoToL1 ${arg.name}`, async function () { + let amount = arg.depositedEthAmount(); + if (amount > 0n) { + await omniVault.connect(signer1).deposit(signer1, { value: amount }); + } + + if (arg.depositBonus) { + await addReplenishBonusToOmniVault(TARGET); + } + const depositBonus = await omniVault.depositBonusAmount(); + + let sentToL1Amount = 0n; + if (arg.sentToL1EthAmount) { + sentToL1Amount = arg.sentToL1EthAmount(amount); + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, sentToL1Amount).toHex().toString(); + const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); + await omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee }); + } + + const vaultBalance = await ethers.provider.getBalance(omniVault.address); + const freeBalance = await omniVault.getFreeBalance(); + const totalSupply = await iToken.totalSupply(); + const expectedVaultBalance = amount + depositBonus - sentToL1Amount; + console.log("Vault balance:\t\t", vaultBalance.format()); + console.log("Free balance:\t\t", freeBalance.format()); + console.log("Deposit bonus:\t\t", depositBonus.format()); + console.log("Sent to L1 eth:\t\t", sentToL1Amount.format()); + console.log("Total deposited:\t", (await omniVault.getFlashCapacity()).format()); + expect(vaultBalance).to.be.eq(expectedVaultBalance); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + let extraValue = 0n; + if (arg.extra) { + extraValue = arg.extra; + } + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + const sender = arg.msgSender(); + const tx = await omniVault.connect(sender).sendAssetsInfoToL1(options, { value: fee + extraValue }); + const rec = await tx.wait(); + const block = await ethers.provider.getBlock(rec?.blockNumber); + await expect(tx) + .emit(omniVault, "MessageToL1Sent") + .withArgs(totalSupply, amount - sentToL1Amount); + + const txData = await rebalancer.getTransactionData(ARB_ID); + expect(txData.timestamp).to.be.eq(block?.timestamp); + expect(txData.ethBalance).to.be.eq(amount - sentToL1Amount); + expect(txData.inceptionTokenBalance).to.be.eq(totalSupply); + await expect(tx).to.changeEtherBalance(sender.address, -fee, { includeFee: false }); + if (extraValue > 0n) { + await expect(tx).to.emit(omniVault, "UnusedFeesSentBackToOperator").withArgs(extraValue); + } + }); + }); + + it("Reverts when called by not an operator", async function () { + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + await expect(omniVault.connect(signer1).sendAssetsInfoToL1(options, { value: fee })).to.revertedWithCustomError( + omniVault, + "OnlyOwnerOrOperator" + ); + }); + + it("Reverts when fee is not enough", async function () { + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + await expect(omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee - 1n })) + .to.revertedWithCustomError(omniVault, "FeesAboveMsgValue") + .withArgs(fee - 1n); + }); + + it("Reverts when crosschain adapter is 0 address", async function () { + const omniVaultFactory = await ethers.getContractFactory("InceptionOmniVault"); + const newOmniVault = await upgrades.deployProxy( + omniVaultFactory, + ["Omnivault", operator.address, iToken.address, ethers.ZeroAddress], + { initializer: "initialize" } + ); + newOmniVault.address = await newOmniVault.getAddress(); + await newOmniVault.setRatioFeed(ratioFeedL2.address); + await iToken.setVault(newOmniVault.address); + + const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); + const fee = await omniVault.quoteSendAssetsInfoToL1(options); + await expect(newOmniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee })).to.revertedWithCustomError( + newOmniVault, + "CrossChainAdapterNotSet" + ); + }); + }); + }); + }); +}); diff --git a/projects/tests/omnivault-rebalancer/test/helpers/utils.js b/projects/tests/omnivault-rebalancer/test/helpers/utils.js new file mode 100644 index 00000000..51e6fe5f --- /dev/null +++ b/projects/tests/omnivault-rebalancer/test/helpers/utils.js @@ -0,0 +1,101 @@ +const helpers = require("@nomicfoundation/hardhat-network-helpers"); +const { ethers } = require("hardhat"); +const { keccak256, toUtf8Bytes, AbiCoder } = require("ethers"); +BigInt.prototype.format = function () { + return this.toLocaleString("de-DE"); +}; + +const impersonateWithEth = async (address, amount) => { + await helpers.impersonateAccount(address); + const account = await ethers.getSigner(address); + + //Deposit some Eth to account + if (amount > 0n) { + const [treasury] = await ethers.getSigners(); + await treasury.sendTransaction({ to: address, value: amount }); + } + + console.log(`Account impersonated at address: ${account.address}`); + return account; +}; + +const approx = async (amount, delta) => { + return (v) => ((amount - delta < v) && (amount + delta > v)) +} + +const getStaker = async (address, iVault, asset, donor, amount = 10n ** 21n) => { + const staker = await impersonateWithEth(address, toWei(1)); + await asset.connect(donor).transfer(address, amount); + const balanceAfter = await asset.balanceOf(address); + await asset.connect(staker).approve(await iVault.getAddress(), balanceAfter); + return staker; +}; + +const getRandomStaker = async (iVault, asset, donor, amount) => { + return await getStaker(ethers.Wallet.createRandom().address, iVault, asset, donor, amount); +}; + +const toWei = ether => ethers.parseEther(ether.toString()); + +const randomBI = length => { + if (length > 0) { + let randomNum = ""; + randomNum += Math.floor(Math.random() * 9) + 1; // generates a random digit 1-9 + for (let i = 0; i < length - 1; i++) { + randomNum += Math.floor(Math.random() * 10); // generates a random digit 0-9 + } + return BigInt(randomNum); + } else { + return 0n; + } +}; + +const randomBIMax = max => { + let random = 0n; + if (max > 0n) { + random += BigInt(Math.random() * Number(max)); + } + return random; +}; + +const e18 = 10n ** 18n; + +/** + * @return slot number for the value by its internal name for restaking balance ProtocolConfig + */ +function getSlotByName(name) { + // Perform keccak256 hashing of the string + const governanceHash = keccak256(toUtf8Bytes(name)); + + // Convert the resulting hash to a BigInt + const governanceUint = BigInt(governanceHash); + + // Subtract 1 from the hash + const governanceUintMinus1 = governanceUint - 1n; + + // Use the AbiCoder to encode the uint256 type + const abiCoder = new AbiCoder(); + const encodedValue = abiCoder.encode(["uint256"], [governanceUintMinus1]); + + // Re-hash the encoded result + const finalHash = keccak256(encodedValue); + + // Perform bitwise AND operation with ~0xff (mask out the last byte) + const mask = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00"); + const governanceSlot = BigInt(finalHash) & mask; + + // Return the result as a hex string (without '0x' prefix) + return governanceSlot.toString(16); +} + +module.exports = { + impersonateWithEth, + getStaker, + getRandomStaker, + toWei, + randomBI, + randomBIMax, + e18, + getSlotByName, + approx +}; diff --git a/projects/tests/omnivault-rebalancer/tsconfig.json b/projects/tests/omnivault-rebalancer/tsconfig.json new file mode 100644 index 00000000..e5f1a640 --- /dev/null +++ b/projects/tests/omnivault-rebalancer/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true + } +} diff --git a/projects/tests/omnivault-rebalancer/yarn.lock b/projects/tests/omnivault-rebalancer/yarn.lock new file mode 100644 index 00000000..2cf7b68b --- /dev/null +++ b/projects/tests/omnivault-rebalancer/yarn.lock @@ -0,0 +1,4910 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adraffy/ens-normalize@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" + integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== + +"@aws-crypto/sha256-js@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" + integrity sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g== + dependencies: + "@aws-crypto/util" "^1.2.2" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + +"@aws-crypto/util@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.2.tgz#b28f7897730eb6538b21c18bd4de22d0ea09003c" + integrity sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg== + dependencies: + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/types@^3.1.0": + version "3.425.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.425.0.tgz#8d4e94743a69c865a83785a9f3bcfd49945836f7" + integrity sha512-6lqbmorwerN4v+J5dqbHPAsjynI0mkEF+blf+69QTaKKGaxBBVaXgqoqul9RXYcK5MMrrYRbQIMd0zYOoy90kA== + dependencies: + "@smithy/types" "^2.3.4" + tslib "^2.5.0" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@chainsafe/as-sha256@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== + +"@chainsafe/persistent-merkle-tree@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/persistent-merkle-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/ssz@^0.10.0": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.5.0" + +"@chainsafe/ssz@^0.9.2": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.4.2" + case "^1.6.3" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + 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" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + 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" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + 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" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + 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" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + 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" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + 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" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + 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" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + 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.0" + "@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.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + 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" + +"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + 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" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + 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" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + 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" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + 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" + +"@fastify/busboy@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8" + integrity sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@layerzerolabs/lz-evm-messagelib-v2@^2.3.39": + version "2.3.44" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-messagelib-v2/-/lz-evm-messagelib-v2-2.3.44.tgz#3684bf9de5cf19e417626970ca09528496d70fc1" + integrity sha512-2HZMjV0KZH0e3W2KL/H8HvE3I7QMJw1no46IQ5LpGSvxIm5Ri45tnQAynbmEbRyKXrRSP3Brkvkc2U7VrfZ/Cg== + +"@layerzerolabs/lz-evm-protocol-v2@^2.3.39": + version "2.3.44" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-protocol-v2/-/lz-evm-protocol-v2-2.3.44.tgz#63c967dcb6aeaa4275fa51c6976b27133f9c16ff" + integrity sha512-oNtwl4HGCogFVOr45T3FfrkB0/CRW2eGAEScBw/FY/6mlncnS4dqlvrCJ3SFlK17cu1w9q0ztD3NzS9sUrb7vw== + +"@layerzerolabs/lz-v2-utilities@^2.3.39": + version "2.3.44" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-v2-utilities/-/lz-v2-utilities-2.3.44.tgz#d1937c68060147e3856ea7368cba72c7cff88ad8" + integrity sha512-0p7tdJCf6BSmN38tAnO7WyOoC84NDTCQt1MqPBomXTyIux1RLpkS82jcxv92+E+1LNulhHIx5W62gaKKx27B2A== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/solidity" "^5.7.0" + bs58 "^5.0.0" + tiny-invariant "^1.3.1" + +"@layerzerolabs/oapp-evm@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@layerzerolabs/oapp-evm/-/oapp-evm-0.0.4.tgz#af86216842c7da5a270eeff04a6b16320f113f7b" + integrity sha512-h0papPd9mQAPsWoQuzZk3dIcLWLrJ8tnDNPg7Hn8aa+v7HPY1lo6Zmyn3t7RmzfKnvrjnjKWDTbX2zgesu4hYg== + dependencies: + ethers "^5.7.2" + +"@layerzerolabs/oft-evm@^0.0.11": + version "0.0.11" + resolved "https://registry.yarnpkg.com/@layerzerolabs/oft-evm/-/oft-evm-0.0.11.tgz#4ff3d396da450e2e88274af5b304a2ce1854106e" + integrity sha512-lkhEiwMrcC0CtMcHkTTnaJwOsE/tE4MiO1nbU3QcWrTOGQj0BGiH05c50+lvZeFHlObp/QpIDXELnJgd2rz29w== + +"@layerzerolabs/test-devtools-evm-hardhat@~0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@layerzerolabs/test-devtools-evm-hardhat/-/test-devtools-evm-hardhat-0.3.0.tgz#f9666dca38145b198b3d83be5a5f179fb722822d" + integrity sha512-776SF+Rp6+8PPMjl5WYglgfas6IyqZ2g7dU73seQC9VaPfbM+6XORtOCLVUxl6Hrp43edAI0dZuIm6xWhVFiYQ== + +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@noble/curves@1.1.0", "@noble/curves@~1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" + integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== + dependencies: + "@noble/hashes" "1.3.1" + +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== + +"@noble/hashes@1.3.2", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nomicfoundation/ethereumjs-block@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" + integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + +"@nomicfoundation/ethereumjs-blockchain@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" + integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-ethash" "3.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + level "^8.0.0" + lru-cache "^5.1.1" + memory-level "^1.0.0" + +"@nomicfoundation/ethereumjs-common@4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" + integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.2" + crc-32 "^1.2.0" + +"@nomicfoundation/ethereumjs-ethash@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" + integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-evm@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" + integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== + dependencies: + "@ethersproject/providers" "^5.7.1" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/ethereumjs-rlp@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" + integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== + +"@nomicfoundation/ethereumjs-statemanager@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" + integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + js-sdsl "^4.1.4" + +"@nomicfoundation/ethereumjs-trie@6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" + integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@types/readable-stream" "^2.3.13" + ethereum-cryptography "0.1.3" + readable-stream "^3.6.0" + +"@nomicfoundation/ethereumjs-tx@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" + integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== + dependencies: + "@chainsafe/ssz" "^0.9.2" + "@ethersproject/providers" "^5.7.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@9.0.2": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" + integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== + dependencies: + "@chainsafe/ssz" "^0.10.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-vm@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" + integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/hardhat-chai-matchers@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.2.tgz#a0e5dbca43ba9560c096da162c0e3245303479d1" + integrity sha512-9Wu9mRtkj0U9ohgXYFbB/RQDa+PcEdyBm2suyEtsJf3PqzZEEjLUZgWnMjlFhATMk/fp3BjmnYVPrwl+gr8oEw== + dependencies: + "@types/chai-as-promised" "^7.1.3" + chai-as-promised "^7.1.1" + deep-eql "^4.0.1" + ordinal "^1.0.3" + +"@nomicfoundation/hardhat-ethers@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz#0422c2123dec7c42e7fb2be8e1691f1d9708db56" + integrity sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw== + dependencies: + debug "^4.1.1" + lodash.isequal "^4.5.0" + +"@nomicfoundation/hardhat-network-helpers@^1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.9.tgz#767449e8a2acda79306ac84626117583d95d25aa" + integrity sha512-OXWCv0cHpwLUO2u7bFxBna6dQtCC2Gg/aN/KtJLO7gmuuA28vgmVKYFRCDUqrbjujzgfwQ2aKyZ9Y3vSmDqS7Q== + dependencies: + ethereumjs-util "^7.1.4" + +"@nomicfoundation/hardhat-toolbox@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-4.0.0.tgz#eb1f619218dd1414fa161dfec92d3e5e53a2f407" + integrity sha512-jhcWHp0aHaL0aDYj8IJl80v4SZXWMS1A2XxXa1CA6pBiFfJKuZinCkO6wb+POAt0LIfXB3gA3AgdcOccrcwBwA== + +"@nomicfoundation/hardhat-verify@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.5.tgz#dcc2cb5e5c55a39704c7d492436f80f05a4ca5a3" + integrity sha512-Tg4zu8RkWpyADSFIgF4FlJIUEI4VkxcvELsmbJn2OokbvH2SnUrqKmw0BBfDrtvP0hhmx8wsnrRKP5DV/oTyTA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + chalk "^2.4.2" + debug "^4.1.1" + lodash.clonedeep "^4.5.0" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" + +"@nomiclabs/hardhat-ethers@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" + integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== + +"@openzeppelin/contracts-upgradeable@^4.8.3": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.6.tgz#38b21708a719da647de4bb0e4802ee235a0d24df" + integrity sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA== + +"@openzeppelin/contracts@^4.8.3": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.6.tgz#2a880a24eb19b4f8b25adc2a5095f2aa27f39677" + integrity sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA== + +"@openzeppelin/defender-admin-client@^1.52.0": + version "1.54.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-admin-client/-/defender-admin-client-1.54.1.tgz#b877972992b95a0dc3787f2ade2f044586621357" + integrity sha512-kRpSUdTsnSqntp4FOXIm95t+6VKHc8CUY2Si71VDuxs0q7HSPZkdpRPSntcolwEzWy9L4a8NS/QMwDF5NJ4X1g== + dependencies: + "@openzeppelin/defender-base-client" "1.54.1" + axios "^1.4.0" + ethers "^5.7.2" + lodash "^4.17.19" + node-fetch "^2.6.0" + +"@openzeppelin/defender-base-client@1.54.1", "@openzeppelin/defender-base-client@^1.52.0": + version "1.54.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-base-client/-/defender-base-client-1.54.1.tgz#ed777ae56908d5a920e1f72ac735c63694e65b30" + integrity sha512-DRGz/7KN3ZQwu28YWMOaojrC7jjPkz/uCwkC8/C8B11qwZhA5qIVvyhYHhhFOCl0J84+E3TNdvkPD2q3p2WaJw== + dependencies: + amazon-cognito-identity-js "^6.0.1" + async-retry "^1.3.3" + axios "^1.4.0" + lodash "^4.17.19" + node-fetch "^2.6.0" + +"@openzeppelin/defender-sdk-base-client@^1.10.0", "@openzeppelin/defender-sdk-base-client@^1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.11.0.tgz#771ea315d07dc9dc4a7572aef42892ac772b8a2e" + integrity sha512-HNcbRhbcMZZM5Ri5IfUwJaiJZGIrc0yboRZRlXJfG2aFS/EMfUFnQHC0tyyXtCOAoAZcn+iMlsSj5h8CoUeCfw== + dependencies: + amazon-cognito-identity-js "^6.3.6" + async-retry "^1.3.3" + +"@openzeppelin/defender-sdk-deploy-client@^1.10.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.11.0.tgz#951e8e17b9079fb8744261445514a80ee57af7eb" + integrity sha512-ELYVihsrTOlH7Sy5C/+Yf64hV3ICeTY2OcczOWVQ/o6rHBWKSnHSZCE/oB1cfOpyg/gCrCLXozs4NyrS5z3GUw== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^1.11.0" + axios "^1.6.7" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-network-client@^1.10.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-1.11.0.tgz#1accb636cb7f5c3cde46745e5fb64b73bb7ca1e4" + integrity sha512-CPy1TA6RyFYtACbvXZJhJpsYW2u4yxTSNU8cVIw1lH/9iArXzfWuJ2p8Deidc0sJBbMeJYkv1AvqTBJNifjKMg== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^1.11.0" + axios "^1.6.7" + lodash "^4.17.21" + +"@openzeppelin/hardhat-upgrades@^3.0.0": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.0.5.tgz#792bef91f78c34aa1b64866dcbbf3b230bd6c4f7" + integrity sha512-7Klg1B6fH45+7Zxzr6d9mLqudrL9Uk6CUG5AeG5NckPfP4ZlQRo1squcQ8yJPwqDS8rQjfChiqKDelp4LTjyZQ== + dependencies: + "@openzeppelin/defender-admin-client" "^1.52.0" + "@openzeppelin/defender-base-client" "^1.52.0" + "@openzeppelin/defender-sdk-base-client" "^1.10.0" + "@openzeppelin/defender-sdk-deploy-client" "^1.10.0" + "@openzeppelin/defender-sdk-network-client" "^1.10.0" + "@openzeppelin/upgrades-core" "^1.32.0" + chalk "^4.1.0" + debug "^4.1.1" + ethereumjs-util "^7.1.5" + proper-lockfile "^4.1.1" + undici "^6.0.0" + +"@openzeppelin/upgrades-core@^1.32.0": + version "1.32.2" + resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.32.2.tgz#4313bd0a547090a350817cf798af60e0eb0728e8" + integrity sha512-EkXriOHZfn6u00Tbq0zUuhHDeTQB9WyAZKZo3UeYdqULb7E3vqxZgxgXmWJwEzAb6E77DvprzQ4gwCAjMV/S4Q== + dependencies: + cbor "^9.0.0" + chalk "^4.1.0" + compare-versions "^6.0.0" + debug "^4.1.1" + ethereumjs-util "^7.0.3" + minimist "^1.2.7" + proper-lockfile "^4.1.1" + solidity-ast "^0.4.51" + +"@scure/base@~1.1.0": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" + integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== + +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" + integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== + dependencies: + "@noble/curves" "~1.1.0" + "@noble/hashes" "~1.3.1" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@smithy/types@^2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.3.4.tgz#3b9bc15000af0a0b1f4fda741f78c1580ba15e92" + integrity sha512-D7xlM9FOMFyFw7YnMXn9dK2KuN6+JhnrZwVt1fWaIu8hCk5CigysweeIT/H/nCo4YV+s8/oqUdLfexbkPZtvqw== + dependencies: + tslib "^2.5.0" + +"@solidity-parser/parser@^0.14.0": + version "0.14.5" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" + integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@solidity-parser/parser@^0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.18.0.tgz#8e77a02a09ecce957255a2f48c9a7178ec191908" + integrity sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@typechain/ethers-v6@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz#42fe214a19a8b687086c93189b301e2b878797ea" + integrity sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" + +"@typechain/hardhat@^9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-9.1.0.tgz#6985015f01dfb37ef2ca8a29c742d05890351ddc" + integrity sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA== + dependencies: + fs-extra "^9.1.0" + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.2.tgz#162f5238c46f4bcbac07a98561724eca1fcf0c5e" + integrity sha512-dkpZu0szUtn9UXTmw+e0AJFd4D2XAxDnsCLdc05SfqpqzPEBft8eQr8uaFitfo/dUUOZERaLec2hHMG87A4Dxg== + dependencies: + "@types/node" "*" + +"@types/chai-as-promised@^7.1.3": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.6.tgz#3b08cbe1e7206567a480dc6538bade374b19e4e1" + integrity sha512-cQLhk8fFarRVZAXUQV1xEnZgMoPxqKojBvRkqPCKPQCzEhpbbSKl1Uu75kDng7k5Ln6LQLUmNBjLlFthCgm1NA== + dependencies: + "@types/chai" "*" + +"@types/chai@*": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" + integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== + +"@types/chai@^4.3.11": + version "4.3.11" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.11.tgz#e95050bf79a932cb7305dd130254ccdf9bde671c" + integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== + +"@types/concat-stream@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + dependencies: + "@types/node" "*" + +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + +"@types/fs-extra@^11.0.4": + version "11.0.4" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-11.0.4.tgz#e16a863bb8843fba8c5004362b5a73e17becca45" + integrity sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ== + dependencies: + "@types/jsonfile" "*" + "@types/node" "*" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/jsonfile@*": + version "6.1.4" + resolved "https://registry.yarnpkg.com/@types/jsonfile/-/jsonfile-6.1.4.tgz#614afec1a1164e7d670b4a7ad64df3e7beb7b702" + integrity sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ== + dependencies: + "@types/node" "*" + +"@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/minimatch@*": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/mocha@^10.0.6": + version "10.0.6" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.6.tgz#818551d39113081048bdddbef96701b4e8bb9d1b" + integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg== + +"@types/node@*": + version "20.8.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.2.tgz#d76fb80d87d0d8abfe334fc6d292e83e5524efc4" + integrity sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w== + +"@types/node@18.15.13": + version "18.15.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" + integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== + +"@types/node@^10.0.3": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^20.10.1": + version "20.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.1.tgz#d2c96f356c3125fedc983d74c424910c3767141c" + integrity sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg== + dependencies: + undici-types "~5.26.4" + +"@types/node@^8.0.0": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.1": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/qs@^6.2.31", "@types/qs@^6.9.7": + version "6.9.8" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" + integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== + +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + +"@types/secp256k1@^4.0.1": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.4.tgz#33c760de627fce1f449c2d4270da07e4da54c830" + integrity sha512-oN0PFsYxDZnX/qSJ5S5OwaEDTYfekhvaM5vqui2bu1AA39pKofmgL104Q29KiOXizXS2yLjSzc5YdTyMKdcy4A== + dependencies: + "@types/node" "*" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== + +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^8.0.1: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +amazon-cognito-identity-js@^6.0.1: + version "6.3.6" + resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.6.tgz#a5baa3615dc5771d9f9edeedf13d6e6df5e202d6" + integrity sha512-kBq+GE6OkLrxtFj3ZduIOlKBFYeOqZK3EhxbDBkv476UTvy+uwfR0tlriTq2QzNdnvlQAjBIXnXuOM7DwR1UEQ== + dependencies: + "@aws-crypto/sha256-js" "1.2.2" + buffer "4.9.2" + fast-base64-decode "^1.0.0" + isomorphic-unfetch "^3.0.0" + js-cookie "^2.2.1" + +amazon-cognito-identity-js@^6.3.6: + version "6.3.7" + resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.7.tgz#65c3d7ee4e0c0a1ffea01927248989c5bd1d1868" + integrity sha512-tSjnM7KyAeOZ7UMah+oOZ6cW4Gf64FFcc7BE2l7MTcp7ekAPrXaCbpcW2xEpH1EiDS4cPcAouHzmCuc2tr72vQ== + dependencies: + "@aws-crypto/sha256-js" "1.2.2" + buffer "4.9.2" + fast-base64-decode "^1.0.0" + isomorphic-unfetch "^3.0.0" + js-cookie "^2.2.1" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +array.prototype.findlast@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.3.tgz#4e4b375de5adf4897fed155e2d2771564865cc3b" + integrity sha512-kcBubumjciBg4JKp5KTKtI7ec7tRefPk88yjkWJwaVKYd9QfTaxcsOxoMNKd7iBr447zCfDV0z1kOF47umv42g== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-retry@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + +async@1.x: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +axios@^1.4.0, axios@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.1.tgz#11fbaa11fc35f431193a9564109c88c1f27b585f" + integrity sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axios@^1.6.7: + version "1.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base-x@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" + integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== + +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +bigint-crypto-utils@^3.0.23: + version "3.3.0" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" + integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + +caseless@^0.12.0, caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +cbor@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" + integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== + dependencies: + nofilter "^3.1.0" + +cbor@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.1.tgz#b16e393d4948d44758cd54ac6151379d443b37ae" + integrity sha512-/TQOWyamDxvVIv+DY9cOLNuABkoyz8K/F3QE56539pGVYohx0+MEA1f4lChFTX79dBTBS7R1PF6ovH7G+VtBfQ== + dependencies: + nofilter "^3.1.0" + +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + dependencies: + check-error "^1.0.2" + +chai@^4.2.0: + version "4.3.10" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384" + integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.0.8" + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.2, check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +classic-level@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" + integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "^2.2.2" + node-gyp-build "^4.3.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@1.4.0, colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +compare-versions@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.0.tgz#3f2131e3ae93577df111dba133e6db876ffe127a" + integrity sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.6.0, concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +death@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" + integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== + +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +deep-eql@^4.0.1, deep-eql@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" + +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-data-property@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" + integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +difflib@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== + dependencies: + heap ">= 0.2.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dotenv@^16.3.1: + version "16.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + +"ds-test@github:dapphub/ds-test": + version "1.0.0" + resolved "https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0" + +elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encode-utf8@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +enquirer@^2.3.0, enquirer@^2.3.6: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +es-abstract@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" + integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.1" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.11" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@2.7.x, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eth-gas-reporter@^0.2.25: + version "0.2.27" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz#928de8548a674ed64c7ba0bf5795e63079150d4e" + integrity sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw== + dependencies: + "@solidity-parser/parser" "^0.14.0" + axios "^1.5.1" + cli-table3 "^0.5.0" + colors "1.4.0" + ethereum-cryptography "^1.0.3" + ethers "^5.7.2" + fs-readdir-recursive "^1.1.0" + lodash "^4.17.14" + markdown-table "^1.1.3" + mocha "^10.2.0" + req-cwd "^2.0.0" + sha1 "^1.1.1" + sync-request "^6.0.0" + +ethereum-bloom-filters@^1.0.6: + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + dependencies: + js-sha3 "^0.8.0" + +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67" + integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug== + dependencies: + "@noble/curves" "1.1.0" + "@noble/hashes" "1.3.1" + "@scure/bip32" "1.3.1" + "@scure/bip39" "1.2.1" + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethers@^5.6.1, ethers@^5.7.0, ethers@^5.7.1, ethers@^5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@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/contracts" "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/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethers@^6.9.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.9.0.tgz#a4534bdcdfde306aee94ef32f3d5c70d7e33fcb9" + integrity sha512-pmfNyQzc2mseLe91FnT2vmNaTt8dDzhxZ/xItAV7uGsF4dI4ek2ufMu3rAkgQETL/TIs0GS5A+U05g9QyWnv3Q== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "18.15.13" + aes-js "4.0.0-beta.5" + tslib "2.4.0" + ws "8.5.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +fast-base64-decode@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" + integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.0.3: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + dependencies: + imul "^1.0.0" + +follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.0: + version "1.15.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + +follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +forge-std@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/forge-std/-/forge-std-1.1.2.tgz#f4a0eda103538d56f9c563f3cd1fa2fd01bd9378" + integrity sha512-Wfb0iAS9PcfjMKtGpWQw9mXzJxrWD62kJCUqqLcyuI0+VRtJ3j20XembjF3kS20qELYdXft1vD/SPFVWVKMFOw== + +form-data@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.0, fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +ghost-testrpc@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" + integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== + dependencies: + chalk "^2.4.2" + node-emoji "^1.10.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +handlebars@^4.0.1: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +hardhat-deploy@^0.11.45: + version "0.11.45" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.45.tgz#bed86118175a38a03bb58aba2ce1ed5e80a20bc8" + integrity sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w== + dependencies: + "@ethersproject/abi" "^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/contracts" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/solidity" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wallet" "^5.7.0" + "@types/qs" "^6.9.7" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + ethers "^5.7.0" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + zksync-web3 "^0.14.3" + +hardhat-gas-reporter@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz#9a2afb354bc3b6346aab55b1c02ca556d0e16450" + integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg== + dependencies: + array-uniq "1.0.3" + eth-gas-reporter "^0.2.25" + sha1 "^1.1.1" + +hardhat-tracer@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/hardhat-tracer/-/hardhat-tracer-2.7.0.tgz#af04e5cd7ec2525c24a70634f6d1051252992d03" + integrity sha512-H+30jj6bCyX7NfhY7Umbzq535jhi9Wd5fGNli9qWcQ+5iOB477Nm8XdGtPtgOV1vQ7VQzIwKFzoEbqy+BuxTlg== + dependencies: + chalk "^4.1.2" + debug "^4.3.4" + ethers "^5.6.1" + +hardhat@^2.19.1: + version "2.19.1" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.1.tgz#5e09e8070ecfc6109ba9d3a4a117ec2b0643032a" + integrity sha512-bsWa63g1GB78ZyMN08WLhFElLPA+J+pShuKD1BFO2+88g3l+BL3R07vj9deIi9dMbssxgE714Gof1dBEDGqnCw== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@nomicfoundation/ethereumjs-vm" "7.0.2" + "@nomicfoundation/solidity-analyzer" "^0.1.0" + "@sentry/node" "^5.18.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tsort "0.0.1" + undici "^5.14.0" + uuid "^8.3.2" + ws "^7.4.6" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" + integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +"heap@>= 0.2.0": + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.4, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.1.1: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +immutable@^4.0.0-rc.12: + version "4.3.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isomorphic-unfetch@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" + integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== + dependencies: + node-fetch "^2.6.1" + unfetch "^4.2.0" + +js-cookie@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== + +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-yaml@3.x: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" + integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== + +keccak@^3.0.0, keccak@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + optionalDependencies: + graceful-fs "^4.1.9" + +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + dependencies: + buffer "^6.0.3" + module-error "^1.0.1" + +level@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" + integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== + dependencies: + browser-level "^1.0.1" + classic-level "^1.2.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +loupe@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== + dependencies: + get-func-name "^2.0.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +markdown-table@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +match-all@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" + integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== + dependencies: + abstract-level "^1.0.0" + functional-red-black-tree "^1.0.1" + module-error "^1.0.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@0.5.x: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0, mocha@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch@^2.6.0, node-fetch@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" + integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== + +nofilter@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" + integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== + +nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +obliterator@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +once@1.x, once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +ordinal@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d" + integrity sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ== + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prettier@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== + +prettier@^2.3.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + +proper-lockfile@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" + integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== + dependencies: + graceful-fs "^4.2.4" + retry "^0.12.0" + signal-exit "^3.0.2" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +qs@^6.4.0, qs@^6.9.4: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +raw-body@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^2.2.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + +req-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== + dependencies: + req-from "^2.0.0" + +req-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== + dependencies: + resolve-from "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.0, require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.1.6: + version "1.22.6" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" + integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.2.8: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sc-istanbul@^0.4.5: + version "0.4.6" + resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" + integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +scrypt-js@3.0.1, scrypt-js@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semver@^5.5.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.0.1" + +shelljs@^0.8.3: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +solidity-ast@^0.4.51: + version "0.4.52" + resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.52.tgz#9f1a9abc7e5ba28bbf91146ecd07aec7e70f3c85" + integrity sha512-iOya9BSiB9jhM8Vf40n8lGELGzwrUc57rl5BhfNtJ5cvAaMvRcNlHeAMNvqJJyjoUnczqRbHqdivEqK89du3Cw== + dependencies: + array.prototype.findlast "^1.2.2" + +solidity-bytes-utils@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/solidity-bytes-utils/-/solidity-bytes-utils-0.8.2.tgz#763d6a02fd093e93b3a97b742e97d540e66c29bd" + integrity sha512-cqXPYAV2auhpdKSTPuqji0CwpSceZDu95CzqSM/9tDJ2MoMaMsdHTpOIWtVw31BIqqGPNmIChCswzbw0tHaMTw== + dependencies: + ds-test "github:dapphub/ds-test" + forge-std "^1.1.2" + +solidity-coverage@^0.8.13: + version "0.8.13" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.13.tgz#8eeada2e82ae19d25568368aa782a2baad0e0ce7" + integrity sha512-RiBoI+kF94V3Rv0+iwOj3HQVSqNzA9qm/qDP1ZDXK5IX0Cvho1qiz8hAXTsAo6KOIUeP73jfscq0KlLqVxzGWA== + dependencies: + "@ethersproject/abi" "^5.0.9" + "@solidity-parser/parser" "^0.18.0" + chalk "^2.4.2" + death "^1.1.0" + difflib "^0.2.4" + fs-extra "^8.1.0" + ghost-testrpc "^0.0.2" + global-modules "^2.0.0" + globby "^10.0.1" + jsonschema "^1.2.4" + lodash "^4.17.21" + mocha "^10.2.0" + node-emoji "^1.10.0" + pify "^4.0.1" + recursive-readdir "^2.2.2" + sc-istanbul "^0.4.5" + semver "^7.3.4" + shelljs "^0.8.3" + web3-utils "^1.3.6" + +source-map-support@^0.5.13: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== + dependencies: + amdefine ">=0.0.4" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +sync-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + +table@^6.8.0: + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + +tiny-invariant@^1.3.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +tmp@0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-command-line-args@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tslib@^1.11.1, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.3.1, tslib@^2.5.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0, type-detect@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +typechain@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.2.tgz#1090dd8d9c57b6ef2aed3640a516bdbf01b00d73" + integrity sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q== + dependencies: + "@types/prettier" "^2.1.1" + debug "^4.3.1" + fs-extra "^7.0.0" + glob "7.1.7" + js-sha3 "^0.8.0" + lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.3.1" + ts-command-line-args "^2.2.0" + ts-essentials "^7.0.1" + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + +uglify-js@^3.1.4: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici@^5.14.0: + version "5.25.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.25.4.tgz#7d8ef81d94f84cd384986271e5e5599b6dff4296" + integrity sha512-450yJxT29qKMf3aoudzFpIciqpx6Pji3hEWaXqXmanbXF58LTAGCKxcJjxMXWu3iG+Mudgo3ZUfDB6YDFd/dAw== + dependencies: + "@fastify/busboy" "^2.0.0" + +undici@^6.0.0: + version "6.10.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.10.1.tgz#772d1c9d448a4c3ee10294e7328d64e9e821086a" + integrity sha512-kSzmWrOx3XBKTgPm4Tal8Hyl3yf+hzlA00SAf4goxv8LZYafKmS6gJD/7Fe5HH/DMNiFTRXvkwhLo7mUn5fuQQ== + +unfetch@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +web3-utils@^1.3.6: + version "1.10.2" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.2.tgz#361103d28a94d5e2a87ba15d776a62c33303eb44" + integrity sha512-TdApdzdse5YR+5GCX/b/vQnhhbj1KSAtfrDtRW7YS0kcWp1gkJsN62gw6GzCaNTeXookB7UrLtmDUuMv65qgow== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^1.1.1, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zksync-web3@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.14.3.tgz#64ac2a16d597464c3fc4ae07447a8007631c57c9" + integrity sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ== diff --git a/projects/vaults/contracts/interfaces/IRebalancer.sol b/projects/vaults/contracts/interfaces/IRebalancer.sol new file mode 100644 index 00000000..6bc1ec2f --- /dev/null +++ b/projects/vaults/contracts/interfaces/IRebalancer.sol @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.27; + +interface IRebalancer { + struct Transaction { + uint256 timestamp; + uint256 underlyingBalance; + uint256 inceptionTokenSupply; + } + + /************************** + ********* Events ********* + **************************/ + + event L2InfoReceived( + uint256 indexed networkId, + uint256 timestamp, + uint256 underlyingBalance, + uint256 inceptionTokenSupply + ); + event ETHReceived(address sender, uint256 amount); + event InceptionTokenDepositedToLockbox(uint256 mintAmount); + event TreasuryUpdateMint(uint256 mintAmount); + event TreasuryUpdateBurn(uint256 mintAmount); + event LockboxChanged(address prevLockbox, address newLockbox); + event InceptionTokenChanged( + address prevInceptionToken, + address newInceptionToken + ); + event UnderlyingAssetChanged(address prevUnderlyingAsset, address newUnderlyingAsset); + event LiqPoolChanged(address prevLiqPool, address newLiqPool); + event RatioFeedChanged(address prevValue, address newValue); + event OperatorChanged(address prevOperator, address newOperator); + event AdapterAdded(uint256 indexed chainId, address newAdapter); + event DefaultAdapterChanged( + address indexed prevDefaultAdapter, + address indexed newDefaultAdapter + ); + event DefaultChainIdChanged( + uint256 indexed prevValue, + uint256 indexed newValue + ); + event SyncedSupplyChanged( + uint256 prevSyncedSupply, + uint256 nextSyncedSupply + ); + event UpdateableChanged(bool prevUpdateable, bool nextUpdateable); + event ChainIdAdded(uint256 chainId); + event ChainIdDeleted(uint256 chainId, uint256 index); + event TransferToRestakingPool(uint256 amount); + event TransferToInceptionVault(uint256 amount); + event AssetInfoTxMaxDelayChanged(uint256 delay); + + error MsgNotFromBridge(address caller); + error ChainIdAlreadyExists(uint256 chainId); + error ChainIdNotFound(uint256 chainId); + error BridgeAlreadyExists(uint256 chainId); + error NoBridgeForThisChainId(uint256 chainId); + error TimeCannotBeInFuture(uint256 timestamp); + error TimeBeforePrevRecord(uint256 timestamp); + error SettingZeroAddress(); + error SettingZeroChainId(); + error SettingZeroDelay(); + error TransferToRestakingPoolFailed(); + error TransferToLockboxFailed(); + error InceptionTokenAddressNotSet(); + error LiquidityPoolNotSet(); + error InceptionVaultNotSet(); + error CrosschainBridgeNotSet(); + error MissingOneOrMoreL2Transactions(uint256 chainId); + error OutdatedAssetInfo(uint256 chainId); + error StakeAmountExceedsEthBalance(uint256 staked, uint256 availableEth); + error StakeAmountExceedsBalance(uint256 stakedAmount, uint256 availableAmount); + error SendAmountExceedsEthBalance(uint256 amountToSend); + error StakeAmountExceedsMaxTVL(); + error OnlyOperator(); + error OnlyAdapter(); + error NoRebalancingRequired(); + error IndexOutOfBounds(uint256 index, uint256 length); + error NoAdapterAvailable(uint256 _chainId); + error TreasuryUpdatesPaused(); + error NoChainIdsConfigured(); +} diff --git a/projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol b/projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol new file mode 100644 index 00000000..43cd93d9 --- /dev/null +++ b/projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol @@ -0,0 +1,177 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {SafeERC20, IERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +import {ERC20RebalancerStorage} from "./ERC20RebalancerStorage.sol"; + +/** + * @title ERC20Rebalancer + * @author The InceptionLRT team + * @dev This contract handles staking(transfer to a specific vault), + * manages treasury data and facilitates cross-chain ERC20 transfers. + */ +contract ERC20Rebalancer is ERC20RebalancerStorage { + using SafeERC20 for IERC20; + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() payable { + _disableInitializers(); + } + + /** + * @notice Initializes the contract with essential addresses and parameters. + * @param _inceptionToken The address of the InceptionToken token. + * @param _lockbox The address of the lockbox. + * @param _inceptionVault The address of the inception vault. + * @param _defaultAdapter The address of the CrossChainBridgeL1. + * @param _operator The address of the operator who will manage this contract. + */ + function initialize( + uint256 defaultChainId, + address _inceptionToken, + address _underlyingAsset, + address _lockbox, + address _inceptionVault, + address payable _defaultAdapter, + address _operator + ) public initializer { + __Ownable_init(); + + __RebalancerStorage_init( + defaultChainId, + _inceptionToken, + _underlyingAsset, + _lockbox, + _inceptionVault, + _defaultAdapter, + _operator + ); + } + + /** + * @notice Updates the treasury data by comparing the total L2 inETH balance and adjusting the treasury accordingly. + */ + function updateTreasuryData() public { + Transaction memory txData = getTransactionData(); + require( + txData.timestamp != 0, + MissingOneOrMoreL2Transactions(defaultChainId) + ); + require( + block.timestamp - txData.timestamp <= assetInfoTxMaxDelay, + OutdatedAssetInfo(defaultChainId) + ); + + uint256 totalL2Supply = txData.inceptionTokenSupply; + + uint256 lockBoxSupply = _lockboxSupply(); + if (totalL2Supply > lockBoxSupply) { + uint256 amountToMint = totalL2Supply - lockBoxSupply; + _mintInceptionToken(amountToMint); + + emit SyncedSupplyChanged( + lockBoxSupply, + lockBoxSupply + amountToMint + ); + } else if (lockBoxSupply > totalL2Supply) { + uint256 amountToBurn = lockBoxSupply - totalL2Supply; + _burnInceptionToken(amountToBurn); + + emit SyncedSupplyChanged( + lockBoxSupply, + lockBoxSupply - amountToBurn + ); + } else { + revert NoRebalancingRequired(); + } + + uint256 bal = IERC20(address(underlyingAsset)).balanceOf(address(this)); + if (bal == 0) return; + + IERC20(address(underlyingAsset)).safeTransfer( + address(inceptionVault), + bal + ); + + emit TransferToInceptionVault(bal); + } + + /** + * @dev Triggered by a cron job. + * @notice Stakes a specified amount of underlyingAsset into the InceptionVault. + * @param _amount The amount of underlyingAsset to stake. + */ + function stake(uint256 _amount) external onlyOperator { + require(address(inceptionVault) != address(0), InceptionVaultNotSet()); + require( + _amount <= + IERC20(address(underlyingAsset)).balanceOf(address(this)), + StakeAmountExceedsBalance( + _amount, + IERC20(address(underlyingAsset)).balanceOf(address(this)) + ) + ); + + IERC20(address(underlyingAsset)).safeTransfer( + address(inceptionVault), + _amount + ); + + emit TransferToInceptionVault(_amount); + } + + /** + * @notice Handles Layer 2 information and updates the transaction data for a specific Chain ID. + * @dev Verifies that the caller is the correct defaultAdapter and that the timestamp is valid. + * @param _chainId The Chain ID of the transaction. + * @param _timestamp The timestamp when the transaction occurred. + * @param _balance The ETH balance involved in the transaction. + * @param _totalSupply The total inETH supply for the transaction. + */ + function handleL2Info( + uint256 _chainId, + uint256 _timestamp, + uint256 _balance, + uint256 _totalSupply + ) external onlyAdapter { + require( + _timestamp <= block.timestamp, + TimeCannotBeInFuture(_timestamp) + ); + require(_chainId == defaultChainId, ChainIdNotFound(_chainId)); + + Transaction memory lastUpdate = lastTx; + if (lastUpdate.timestamp != 0) + require( + _timestamp > lastUpdate.timestamp, + TimeBeforePrevRecord(_timestamp) + ); + + lastTx = Transaction({ + timestamp: _timestamp, + underlyingBalance: _balance, + inceptionTokenSupply: _totalSupply + }); + + emit L2InfoReceived(_chainId, _timestamp, _balance, _totalSupply); + } + + function _mintInceptionToken(uint256 _amountToMint) private { + require( + address(inceptionToken) != address(0), + InceptionTokenAddressNotSet() + ); + inceptionToken.mint(lockBox, _amountToMint); + emit TreasuryUpdateMint(_amountToMint); + } + + function _burnInceptionToken(uint256 _amountToBurn) private { + require( + address(inceptionToken) != address(0), + InceptionTokenAddressNotSet() + ); + inceptionToken.burn(lockBox, _amountToBurn); + emit TreasuryUpdateBurn(_amountToBurn); + } +} diff --git a/projects/vaults/contracts/rebalancer/ERC20RebalancerStorage.sol b/projects/vaults/contracts/rebalancer/ERC20RebalancerStorage.sol new file mode 100644 index 00000000..b5e82c36 --- /dev/null +++ b/projects/vaults/contracts/rebalancer/ERC20RebalancerStorage.sol @@ -0,0 +1,199 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {Ownable2StepUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; + +import {SafeERC20, IERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +import {IRebalancer} from "../interfaces/IRebalancer.sol"; +import {IInceptionVault} from "../interfaces/IInceptionVault.sol"; +import {IInceptionToken} from "../interfaces/common/IInceptionToken.sol"; + +/** + * @title ERC20RebalancerStorage + * @author The InceptionLRT team + * @dev TODO + */ +abstract contract ERC20RebalancerStorage is + Initializable, + Ownable2StepUpgradeable, + IRebalancer +{ + IERC20 public underlyingAsset; + IInceptionToken public inceptionToken; + address public lockBox; + IInceptionVault public inceptionVault; + + address public operator; + + Transaction public lastTx; + + address payable public defaultAdapter; + uint256 public defaultChainId; + uint256 public assetInfoTxMaxDelay; + + uint256[50 - 9] private __gap; + + modifier onlyOperator() { + require(msg.sender == operator, OnlyOperator()); + _; + } + + modifier onlyAdapter() { + require(msg.sender == defaultAdapter, OnlyAdapter()); + _; + } + + function __RebalancerStorage_init( + uint256 _defaultChainId, + address _inceptionToken, + address _underlyingAsset, + address _lockbox, + address _inceptionVault, + address payable _defaultAdapter, + address _operator + ) internal { + require(_defaultChainId != 0, SettingZeroAddress()); + require(_inceptionToken != address(0), SettingZeroAddress()); + require(_underlyingAsset != address(0), SettingZeroAddress()); + require(_lockbox != address(0), SettingZeroAddress()); + require(_inceptionVault != address(0), SettingZeroAddress()); + require(_defaultAdapter != address(0), SettingZeroAddress()); + require(_operator != address(0), SettingZeroAddress()); + + defaultChainId = _defaultChainId; + emit DefaultChainIdChanged(0, _defaultChainId); + + inceptionToken = IInceptionToken(_inceptionToken); + emit InceptionTokenChanged(address(0), _inceptionToken); + + underlyingAsset = IERC20(_underlyingAsset); + emit UnderlyingAssetChanged(address(0), _underlyingAsset); + + lockBox = _lockbox; + emit LockboxChanged(address(0), _lockbox); + + inceptionVault = IInceptionVault(_inceptionVault); + emit LiqPoolChanged(address(0), _inceptionVault); + + defaultAdapter = _defaultAdapter; + emit DefaultAdapterChanged(address(0), _defaultAdapter); + + operator = _operator; + emit OperatorChanged(address(0), _operator); + } + + /********************************************************** + ********************* View Functions ********************* + **********************************************************/ + + function _lockboxSupply() internal view returns (uint256) { + return IERC20(address(inceptionToken)).balanceOf(lockBox); + } + + function getTransactionData() public view returns (Transaction memory) { + return lastTx; + } + + /**************************************************** + ********************* Settings ********************* + ****************************************************/ + + /** + * @notice set the so-called defaultAdapter - the adapter to be used for every chain unless a + specific adapter for specific chainId is set + * @param _newDefaultAdapter Address of the default cross-chain adapter + **/ + function setDefaultAdapter(address payable _newDefaultAdapter) + external + onlyOwner + { + require(_newDefaultAdapter != address(0), SettingZeroAddress()); + emit DefaultAdapterChanged(defaultAdapter, _newDefaultAdapter); + defaultAdapter = _newDefaultAdapter; + } + + /** + * @notice Updates the InceptionToken address. + * @param _inceptionToken The new InceptionToken address. + */ + function setInceptionToken(IInceptionToken _inceptionToken) + external + onlyOwner + { + require(address(_inceptionToken) != address(0), SettingZeroAddress()); + emit InceptionTokenChanged( + address(inceptionToken), + address(_inceptionToken) + ); + inceptionToken = _inceptionToken; + } + + /** + * @notice Updates the underlying asset address. + * @param _underlyingAsset The new InceptionToken address. + */ + function setUnderlyingAsset(IERC20 _underlyingAsset) external onlyOwner { + require(address(_underlyingAsset) != address(0), SettingZeroAddress()); + emit UnderlyingAssetChanged( + address(underlyingAsset), + address(_underlyingAsset) + ); + underlyingAsset = _underlyingAsset; + } + + /** + * @notice Updates the Lockbox address. + * @param _lockbox The new Lockbox address. + */ + function setLockbox(address _lockbox) external onlyOwner { + require(_lockbox != address(0), SettingZeroAddress()); + emit LockboxChanged(lockBox, _lockbox); + lockBox = _lockbox; + } + + /** + * @notice Updates the liquidity pool address. + * @param _inceptionVault The new Inception Vault address. + */ + function setInceptionVault(IInceptionVault _inceptionVault) + external + onlyOwner + { + require(address(_inceptionVault) != address(0), SettingZeroAddress()); + emit LiqPoolChanged(address(inceptionVault), address(_inceptionVault)); + inceptionVault = _inceptionVault; + } + + /** + * @notice Updates the operator address. + * @param _operator The new operator address. + */ + function setOperator(address _operator) external onlyOwner { + require(_operator != address(0), SettingZeroAddress()); + emit OperatorChanged(operator, _operator); + operator = _operator; + } + + /** + * @notice Updates the default chainId. + * @param _defaultChainId The new default chain Id. + */ + function setDefaultChainId(uint256 _defaultChainId) external onlyOwner { + require(_defaultChainId != 0, SettingZeroChainId()); + emit DefaultChainIdChanged(defaultChainId, _defaultChainId); + defaultChainId = _defaultChainId; + } + + /** + * @notice Updates the expiry time of L2 info. + * @param _delay The new TTL for L2 info packet. + */ + function setInfoMaxDelay(uint256 _delay) external onlyOwner { + require(_delay != 0, SettingZeroDelay()); + assetInfoTxMaxDelay = _delay; + emit AssetInfoTxMaxDelayChanged(_delay); + } +} From 07c9358a62606219e1e75282764f339d655849da Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Mon, 10 Feb 2025 17:13:26 +0300 Subject: [PATCH 06/41] fix tests for older oZepp --- .../test/NewERC20Omnitest.test.ts | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/projects/tests/omnivault-rebalancer/test/NewERC20Omnitest.test.ts b/projects/tests/omnivault-rebalancer/test/NewERC20Omnitest.test.ts index c09d51d9..40178c58 100644 --- a/projects/tests/omnivault-rebalancer/test/NewERC20Omnitest.test.ts +++ b/projects/tests/omnivault-rebalancer/test/NewERC20Omnitest.test.ts @@ -522,34 +522,34 @@ describe("Omnivault integration tests", function () { it("Rebalancer access control and validation", async () => { const sn = await takeSnapshot(); - await expect(rebalancer.connect(operator).setDefaultAdapter(adapterL1.address)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(operator).setDefaultAdapter(adapterL1.address)).to.be.revertedWith("Ownable: caller is not the owner"); await expect(rebalancer.connect(owner).setDefaultAdapter(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); expect(await rebalancer.connect(owner).setDefaultAdapter(adapterL1.address)).to.emit(rebalancer, "DefaultAdapterChanged").withArgs(adapterL1.address); - await expect(rebalancer.connect(operator).setInceptionToken(adapterL1.address)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(operator).setInceptionToken(adapterL1.address)).to.be.revertedWith("Ownable: caller is not the owner"); await expect(rebalancer.connect(owner).setInceptionToken(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); expect(await rebalancer.connect(owner).setInceptionToken(iTokenL1.address)).to.emit(rebalancer, "InceptionTokenChanged").withArgs(iTokenL1.address); - await expect(rebalancer.connect(operator).setUnderlyingAsset(adapterL1.address)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(operator).setUnderlyingAsset(adapterL1.address)).to.be.revertedWith("Ownable: caller is not the owner"); await expect(rebalancer.connect(owner).setUnderlyingAsset(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); expect(await rebalancer.connect(owner).setUnderlyingAsset(underlyingL1.address)).to.emit(rebalancer, "UnderlyingAssetChanged").withArgs(underlyingL1.address); - await expect(rebalancer.connect(operator).setLockbox(adapterL1.address)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(operator).setLockbox(adapterL1.address)).to.be.revertedWith("Ownable: caller is not the owner"); await expect(rebalancer.connect(owner).setLockbox(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); expect(await rebalancer.connect(owner).setLockbox(lockboxAddress)).to.emit(rebalancer, "LockboxChanged").withArgs(lockboxAddress); - await expect(rebalancer.connect(operator).setInceptionVault(adapterL1.address)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(operator).setInceptionVault(adapterL1.address)).to.be.revertedWith("Ownable: caller is not the owner"); await expect(rebalancer.connect(owner).setInceptionVault(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); expect(await rebalancer.connect(owner).setInceptionVault(inceptionVault.address)).to.emit(rebalancer, "LiqPoolChanged").withArgs(inceptionVault.address); - await expect(rebalancer.connect(operator).setOperator(adapterL1.address)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(operator).setOperator(adapterL1.address)).to.be.revertedWith("Ownable: caller is not the owner"); await expect(rebalancer.connect(owner).setOperator(zeroAddress())).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); expect(await rebalancer.connect(owner).setOperator(operator)).to.emit(rebalancer, "OperatorChanged").withArgs(operator); - await expect(rebalancer.connect(operator).setDefaultChainId(228n)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(operator).setDefaultChainId(228n)).to.be.revertedWith("Ownable: caller is not the owner"); await expect(rebalancer.connect(owner).setDefaultChainId(0n)).to.be.revertedWithCustomError(rebalancer, "SettingZeroChainId"); - await expect(rebalancer.connect(operator).setInfoMaxDelay(228n)).to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount"); + await expect(rebalancer.connect(operator).setInfoMaxDelay(228n)).to.be.revertedWith("Ownable: caller is not the owner"); await expect(rebalancer.connect(owner).setInfoMaxDelay(0n)).to.be.revertedWithCustomError(rebalancer, "SettingZeroDelay"); await sn.restore(); }) @@ -557,11 +557,11 @@ describe("Omnivault integration tests", function () { it("L2 adapter access control and validation", async () => { const sn = await takeSnapshot(); - await expect(adapterFrax.connect(operator).setFerry(adapterL1.address)).to.be.revertedWithCustomError(adapterFrax, "OwnableUnauthorizedAccount"); + await expect(adapterFrax.connect(operator).setFerry(adapterL1.address)).to.be.revertedWith("Ownable: caller is not the owner"); await expect(adapterFrax.connect(owner).setFerry(zeroAddress())).to.be.revertedWithCustomError(adapterFrax, "errNullFerry"); expect(await adapterFrax.connect(owner).setFerry(ferryL2.address)).to.emit(adapterFrax, "DefaultAdapterChanged").withArgs(ferryL2.address); - await expect(adapterFrax.connect(operator).setDestination(adapterL1.address)).to.be.revertedWithCustomError(adapterFrax, "OwnableUnauthorizedAccount"); + await expect(adapterFrax.connect(operator).setDestination(adapterL1.address)).to.be.revertedWith("Ownable: caller is not the owner"); await expect(adapterFrax.connect(owner).setDestination(zeroAddress())).to.be.revertedWithCustomError(adapterFrax, "errNullDestination"); expect(await adapterFrax.connect(owner).setDestination(rebalancer.address)).to.emit(adapterFrax, "DestinationChanged").withArgs(rebalancer.address); @@ -570,7 +570,7 @@ describe("Omnivault integration tests", function () { "0x000000000000000000000000c671A6a4bF4Dcd0EE94d8D5558cD8B6EAdFD5A19" )).to.be.revertedWithCustomError(adapterFrax, "NotTargetReceiver"); - await expect(adapterFrax.connect(operator).recoverFunds()).to.be.revertedWithCustomError(adapterFrax, "OwnableUnauthorizedAccount"); + await expect(adapterFrax.connect(operator).recoverFunds()).to.be.revertedWith("Ownable: caller is not the owner"); expect(await adapterFrax.connect(owner).recoverFunds()).to.emit("IERC20", "Transfer"); await expect(adapterFrax.connect(operator).sendEthCrossChain(0n, "0x0001")).to.be.revertedWithCustomError(adapterFrax, "NotAllowedInThisAdapterType"); From b2548264ba78d596a9ccb7063ed995a5254088aa Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Mon, 10 Feb 2025 22:10:03 +0300 Subject: [PATCH 07/41] cleaning up --- projects/bridge-lz/scripts/call-on-opt.ts | 44 - projects/bridge-lz/scripts/call-on-sep.ts | 41 - .../scripts/calls/send-crosschain.ts | 57 - .../bridge-lz/scripts/calls/sendEthToL1.ts | 74 - .../scripts/holesky/set-peers-l1-opt.ts | 30 - .../bridge-lz/scripts/holesky/set-peers-l1.ts | 28 - .../scripts/holesky/set-peers-l2-arb.ts | 29 - .../scripts/holesky/set-peers-l2-opt.ts | 30 - .../scripts/l1-deploy-dummy-processor.ts | 37 - .../bridge-lz/scripts/livetest/call-on-opt.ts | 68 - .../bridge-lz/scripts/mainnet/set-peers-l1.ts | 46 - .../scripts/mainnet/set-peers-l2-arb.ts | 40 - .../scripts/mainnet/set-peers-l2-opt.ts | 40 - .../scripts/send-assets-info-bridge.ts | 43 - projects/bridge-lz/scripts/set-chain-ids.ts | 41 - projects/bridge-lz/scripts/setup-iov.ts | 109 - .../scripts/update_crosschain_adapter_l1.ts | 40 - .../CrossChainAdapterOptimismL1.ts | 70 - .../CrossChainAdapterOptimismL2.ts | 64 - .../bridge-lz/scripts/wasDeployment/MyOApp.ts | 53 - .../test/ERC20Rebalancer.test.ts | 3222 ----------------- 21 files changed, 4206 deletions(-) delete mode 100644 projects/bridge-lz/scripts/call-on-opt.ts delete mode 100644 projects/bridge-lz/scripts/call-on-sep.ts delete mode 100644 projects/bridge-lz/scripts/calls/send-crosschain.ts delete mode 100644 projects/bridge-lz/scripts/calls/sendEthToL1.ts delete mode 100644 projects/bridge-lz/scripts/holesky/set-peers-l1-opt.ts delete mode 100644 projects/bridge-lz/scripts/holesky/set-peers-l1.ts delete mode 100644 projects/bridge-lz/scripts/holesky/set-peers-l2-arb.ts delete mode 100644 projects/bridge-lz/scripts/holesky/set-peers-l2-opt.ts delete mode 100644 projects/bridge-lz/scripts/l1-deploy-dummy-processor.ts delete mode 100644 projects/bridge-lz/scripts/livetest/call-on-opt.ts delete mode 100644 projects/bridge-lz/scripts/mainnet/set-peers-l1.ts delete mode 100644 projects/bridge-lz/scripts/mainnet/set-peers-l2-arb.ts delete mode 100644 projects/bridge-lz/scripts/mainnet/set-peers-l2-opt.ts delete mode 100644 projects/bridge-lz/scripts/send-assets-info-bridge.ts delete mode 100644 projects/bridge-lz/scripts/set-chain-ids.ts delete mode 100644 projects/bridge-lz/scripts/setup-iov.ts delete mode 100644 projects/bridge-lz/scripts/update_crosschain_adapter_l1.ts delete mode 100644 projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL1.ts delete mode 100644 projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL2.ts delete mode 100644 projects/bridge-lz/scripts/wasDeployment/MyOApp.ts delete mode 100644 projects/tests/omnivault-rebalancer/test/ERC20Rebalancer.test.ts diff --git a/projects/bridge-lz/scripts/call-on-opt.ts b/projects/bridge-lz/scripts/call-on-opt.ts deleted file mode 100644 index 12e79354..00000000 --- a/projects/bridge-lz/scripts/call-on-opt.ts +++ /dev/null @@ -1,44 +0,0 @@ -const { ethers } = require("hardhat"); - -const Options = require("@layerzerolabs/lz-v2-utilities").Options; -const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString(); - -async function main() { - // const myOAppAddressA = "0xB9B9AfA6B41c26A4EC360248ebC7787d60f85AFd"; - const myOAppAddressA = "0x64c1e6D05750657AE1b1Cb056Fc41E6D654716dC"; - // const MyOAppA = await ethers.getContractAt("MyOApp", myOAppAddressA); - const MyOAppA = await ethers.getContractAt("CrosschainBridge", myOAppAddressA); - - // Set peers before quoting - const destinationEid = 40161; - - // Define message and options - const message = ethers.utils.toUtf8Bytes(""); - const options = Options.newOptions().addExecutorLzReceiveOption(200000, 1000).toHex().toString(); - - - // Estimate fees - const [nativeFee] = await MyOAppA.quote(destinationEid, message, options, false); - - console.log(`nativeFee: ${nativeFee}`); - - - // Send message with some ETH for messaging fees - const tx = await MyOAppA.sendCrosschain(destinationEid, message, options, { - value: nativeFee, // Ensure to provide enough fee - gasLimit: 500000, // You can set a manual gas limit - }); - - console.log("Transaction sent:", tx.hash); - - // Wait for the transaction to be confirmed - await tx.wait(); - console.log("Message sent successfully!"); -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/call-on-sep.ts b/projects/bridge-lz/scripts/call-on-sep.ts deleted file mode 100644 index b2e9ca4b..00000000 --- a/projects/bridge-lz/scripts/call-on-sep.ts +++ /dev/null @@ -1,41 +0,0 @@ -const { ethers } = require("hardhat"); - -async function main() { - const [deployer] = await ethers.getSigners(); - - // Replace with your deployed contract addresses - const myOAppAddressA = "0x07E146B89606828A34D7d096E21be78207700a69"; //0x07E146B89606828A34D7d096E21be78207700a69 - const MyOAppA = await ethers.getContractAt("MyOApp", myOAppAddressA); - - const myOAppAddressB = "0xB9B9AfA6B41c26A4EC360248ebC7787d60f85AFd"; - const MyOAppB = await ethers.getContractAt("MyOApp", myOAppAddressB); - - // Set peers before quoting - const destinationEid = 40232; - - // Define message and options - const message = "Hello from L1!"; - const options = "0x"; // Empty options in hex format - - // Estimate fees - const [nativeFee] = await MyOAppA.quote(destinationEid, message, options, false); - - // Send message with some ETH for messaging fees - const tx = await MyOAppA.send(destinationEid, message, options, { - value: nativeFee.toString(), // Ensure to provide enough fee - gasLimit: 500000, // You can set a manual gas limit - }); - - console.log("Transaction sent:", tx.hash); - - // Wait for the transaction to be confirmed - await tx.wait(); - console.log("Message sent successfully!"); -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/calls/send-crosschain.ts b/projects/bridge-lz/scripts/calls/send-crosschain.ts deleted file mode 100644 index d740921e..00000000 --- a/projects/bridge-lz/scripts/calls/send-crosschain.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { ethers } from "hardhat"; -import fs from "fs"; -import path from "path"; - -async function main() { - const [deployer] = await ethers.getSigners(); - console.log(`Deployer Address: ${deployer.address}`); - - // Load the checkpoint data to get the LZCrossChainBridge contract address - const checkpointFilePath = path.join(__dirname, "../../../../deployment_checkpoint_optimism-sepolia.json"); - - // Ensure the deployment checkpoint file exists - if (!fs.existsSync(checkpointFilePath)) { - throw new Error(`Checkpoint file not found: ${checkpointFilePath}`); - } - - // Read the deployment checkpoint data - const checkpointData = JSON.parse(fs.readFileSync(checkpointFilePath, "utf8")); - - // Retrieve the LZCrossChainBridge address - const lzCrossChainBridgeAddress = checkpointData.LZCrossChainBridge; - if (!lzCrossChainBridgeAddress) { - throw new Error('LZCrossChainBridge address not found in deployment_checkpoint_optimism-sepolia.json'); - } - - // Get the LZCrossChainBridge contract instance - const LZCrossChainBridge = await ethers.getContractAt("ICrossChainBridge", lzCrossChainBridgeAddress); - - // Prepare parameters for the sendCrosschain call - const destinationChainId = 40161; - const payload = "0x"; // Empty data - const options = "0x"; // Empty options - const ethToSend = ethers.parseUnits("0.002", "ether"); // Sending 0.002 ETH - - // Step 1: Call .quote() to get the fee estimate and extract MessagingFee.nativeFee - console.log(`Calling .quote() to get fee estimate for the crosschain transaction...`); - const feeEstimate = await LZCrossChainBridge.quote(destinationChainId, payload, options, false); - const nativeFee = ethers.toBigInt(feeEstimate); // Cast the result as BigInt - console.log(`Estimated fee: ${ethers.formatEther(nativeFee)} ETH`); - - // Step 2: Add ethToSend to the fee estimate - const totalValueToSend = nativeFee + ethToSend; - console.log(`Total ETH to send (fee + value): ${ethers.formatEther(totalValueToSend)} ETH`); - - // Step 3: Call sendCrosschain with the calculated total value - console.log(`Calling sendCrosschain() on LZCrossChainBridge at: ${lzCrossChainBridgeAddress}`); - const tx = await LZCrossChainBridge.sendCrosschain(destinationChainId, payload, options, { value: totalValueToSend }); - await tx.wait(); - - console.log(`sendCrosschain() successfully called. Tx hash: ${tx.hash}`); -} - -// Run the script -main().catch((error) => { - console.error("Error:", error); - process.exit(1); -}); diff --git a/projects/bridge-lz/scripts/calls/sendEthToL1.ts b/projects/bridge-lz/scripts/calls/sendEthToL1.ts deleted file mode 100644 index 2ca6aa6e..00000000 --- a/projects/bridge-lz/scripts/calls/sendEthToL1.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { ethers } from "hardhat"; -import fs from "fs"; -import path from "path"; - -const Options = require("@layerzerolabs/lz-v2-utilities").Options; -const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString(); - -async function main() { - - const [deployer] = await ethers.getSigners(); - console.log(`deployer: ${deployer.address}`); - - // Path to the JSON file - const checkpointFilePath = path.join(__dirname, '../../../../deployment_checkpoint_optimism-sepolia.json'); - - // Check if the file exists - if (!fs.existsSync(checkpointFilePath)) { - throw new Error(`File not found: ${checkpointFilePath}`); - } - - // Read and parse the JSON file - const checkpointData = JSON.parse(fs.readFileSync(checkpointFilePath, 'utf8')); - - // Get the CrossChainAdapterOptimismL2 address - const crossChainAdapterAddress = checkpointData.CrossChainAdapterOptimismL2; - if (!crossChainAdapterAddress) { - throw new Error('CrossChainAdapterOptimismL2 address not found in deployment_checkpoint_optimism-sepolia.json'); - } - - - - // Attach to the CrossChainAdapterOptimismL2 contract - const CrossChainAdapterOptimismL2 = await ethers.getContractAt("CrossChainAdapterOptimismL2", crossChainAdapterAddress); - - const operator = await CrossChainAdapterOptimismL2.operator(); - console.log(`Operator Address: ${operator}`); - - // Output the vault address before the transaction - const vaultAddress = await CrossChainAdapterOptimismL2.vault(); - console.log(`Vault Address: ${vaultAddress}`); - - // Define message and options - const message = "1"; - const options = Options.newOptions().toHex().toString(); - - console.log(`options: ${options}`); - - - console.log(`Calling sendEthToL1 with 0.0002 ETH to contract at address ${crossChainAdapterAddress}...`); - - const destinationEid = 40161; - - try { - // Call sendEthToL1 with 0.0002 ETH - const tx = await CrossChainAdapterOptimismL2.sendEthToL1_2(destinationEid, message, options, { - value: "650750093439552" - }); - - console.log("Transaction sent:", tx.hash); - - // Wait for the transaction to be mined - await tx.wait(); - console.log("Transaction confirmed!"); - } catch (e) { - console.error(e); - } - - -} - -main().catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/projects/bridge-lz/scripts/holesky/set-peers-l1-opt.ts b/projects/bridge-lz/scripts/holesky/set-peers-l1-opt.ts deleted file mode 100644 index e83fd2a3..00000000 --- a/projects/bridge-lz/scripts/holesky/set-peers-l1-opt.ts +++ /dev/null @@ -1,30 +0,0 @@ -const { ethers } = require("hardhat"); -const fs = require("fs"); -const path = require("path"); - -async function main() { - const [deployer] = await ethers.getSigners(); - - const CrossChainBridgeEthereumAddress = "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E"; - const CrossChainBridgeOptimismAddress = "0x838a7fe80f1AF808Bc5ad0f9B1AC6e26B2475E17"; - - if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeOptimismAddress) { - throw new Error("CrossChainBridge addresses not found in the checkpoint files."); - } - - // Get contract instances - const CrossChainBridgeSepolia = await ethers.getContractAt("LZCrossChainAdapterL1", CrossChainBridgeEthereumAddress); - const eIDOptimismSepolia = 40232; //Optimism Sepolia eID - - const tx = await CrossChainBridgeSepolia.connect(deployer).setPeer(eIDOptimismSepolia, ethers.utils.zeroPad(CrossChainBridgeEthereumAddress, 32)); - await tx.wait(); - - console.log("Peers set successfully"); -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/holesky/set-peers-l1.ts b/projects/bridge-lz/scripts/holesky/set-peers-l1.ts deleted file mode 100644 index 9ee9fed5..00000000 --- a/projects/bridge-lz/scripts/holesky/set-peers-l1.ts +++ /dev/null @@ -1,28 +0,0 @@ -const { ethers } = require("hardhat"); -const fs = require("fs"); -const path = require("path"); - -async function main() { - const [deployer] = await ethers.getSigners(); - - const CrossChainBridgeEthereumAddress = "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E"; - const CrossChainBridgeArbitrumAddress = "0xb7A8CA74cbfe313804c3D52663e9b0C0585B5C4e"; - - if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeArbitrumAddress) { - throw new Error("CrossChainBridge addresses not found in the checkpoint files."); - } - - // Get contract instances - const CrossChainBridgeSepolia = await ethers.getContractAt("LZCrossChainAdapterL1", CrossChainBridgeEthereumAddress); - const eIDArbitrumSepolia = 40231; //Arbitrum Sepolia eID - - await CrossChainBridgeSepolia.connect(deployer).setPeer(eIDArbitrumSepolia, ethers.utils.zeroPad(CrossChainBridgeArbitrumAddress, 32)); - console.log("Peers set successfully"); -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/holesky/set-peers-l2-arb.ts b/projects/bridge-lz/scripts/holesky/set-peers-l2-arb.ts deleted file mode 100644 index 7c7fa5fa..00000000 --- a/projects/bridge-lz/scripts/holesky/set-peers-l2-arb.ts +++ /dev/null @@ -1,29 +0,0 @@ -const { ethers } = require("hardhat"); -const fs = require("fs"); -const path = require("path"); - -async function main() { - const [deployer] = await ethers.getSigners(); - - const CrossChainBridgeEthereumAddress = "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E"; - const CrossChainBridgeArbitrumAddress = "0xb7A8CA74cbfe313804c3D52663e9b0C0585B5C4e"; - - if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeArbitrumAddress) { - throw new Error("CrossChainBridge addresses not found in the checkpoint files."); - } - - // Get contract instance - const CrossChainBridgeOptimism = await ethers.getContractAt("LZCrossChainAdapterL2", CrossChainBridgeArbitrumAddress); - const eIdSepolia = 40217; //Holesky eID - - // Set peer for Holesky - await CrossChainBridgeOptimism.connect(deployer).setPeer(eIdSepolia, ethers.utils.zeroPad(CrossChainBridgeEthereumAddress, 32)); - console.log(`Bridge at address ${CrossChainBridgeArbitrumAddress} was set successfully with peer at address ${CrossChainBridgeEthereumAddress} at Ethereum`); -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/holesky/set-peers-l2-opt.ts b/projects/bridge-lz/scripts/holesky/set-peers-l2-opt.ts deleted file mode 100644 index a3d1d55b..00000000 --- a/projects/bridge-lz/scripts/holesky/set-peers-l2-opt.ts +++ /dev/null @@ -1,30 +0,0 @@ -const { ethers } = require("hardhat"); -const fs = require("fs"); -const path = require("path"); - -async function main() { - const [deployer] = await ethers.getSigners(); - - const CrossChainBridgeEthereumAddress = "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E"; - const CrossChainBridgeOptimismAddress = "0x838a7fe80f1AF808Bc5ad0f9B1AC6e26B2475E17"; - - if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeOptimismAddress) { - throw new Error("CrossChainBridge addresses not found in the checkpoint files."); - } - - // Get contract instance - const CrossChainBridgeOptimism = await ethers.getContractAt("LZCrossChainAdapterL2", CrossChainBridgeOptimismAddress); - const eIdSepolia = 40217; //Holesky eID - - // Set peer for Holesky - const tx = await CrossChainBridgeOptimism.connect(deployer).setPeer(eIdSepolia, ethers.utils.zeroPad(CrossChainBridgeEthereumAddress, 32)); - await tx.wait(); - console.log(`Bridge at address ${CrossChainBridgeOptimismAddress} was set successfully with peer at address ${CrossChainBridgeEthereumAddress} at Ethereum`); -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/l1-deploy-dummy-processor.ts b/projects/bridge-lz/scripts/l1-deploy-dummy-processor.ts deleted file mode 100644 index cf804ccd..00000000 --- a/projects/bridge-lz/scripts/l1-deploy-dummy-processor.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { ethers } from "hardhat"; -import fs from "fs"; -import path from "path"; - -async function main() { - const [deployer] = await ethers.getSigners(); - console.log(`Deployer address: ${deployer.address}`); - - // Deploy the DummyDataProcessor contract - const DummyDataProcessor = await ethers.getContractFactory("DummyDataProcessor"); - const dummyDataProcessor = await DummyDataProcessor.deploy(); - await dummyDataProcessor.deployed(); - - console.log(`DummyDataProcessor deployed at: ${dummyDataProcessor.address}`); - - // Path to the JSON file - const checkpointFilePath = path.join(__dirname, '../deployment_checkpoint_sepolia.json'); - - // Check if the file exists - if (!fs.existsSync(checkpointFilePath)) { - throw new Error(`File not found: ${checkpointFilePath}`); - } - - // Read the JSON file - const checkpointData = JSON.parse(fs.readFileSync(checkpointFilePath, 'utf8')); - - // Update the JSON file with the deployed contract address - checkpointData.DummyDataProcessor = dummyDataProcessor.address; - fs.writeFileSync(checkpointFilePath, JSON.stringify(checkpointData, null, 2), 'utf8'); - - console.log(`Updated deployment_checkpoint_sepolia.json with DummyDataProcessor: ${dummyDataProcessor.address}`); -} - -main().catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/projects/bridge-lz/scripts/livetest/call-on-opt.ts b/projects/bridge-lz/scripts/livetest/call-on-opt.ts deleted file mode 100644 index 4eaa31f9..00000000 --- a/projects/bridge-lz/scripts/livetest/call-on-opt.ts +++ /dev/null @@ -1,68 +0,0 @@ -const { ethers } = require("hardhat"); - -const Options = require("@layerzerolabs/lz-v2-utilities").Options; -const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString(); - -async function main() { - // const myOAppAddressA = "0xB9B9AfA6B41c26A4EC360248ebC7787d60f85AFd"; - const myOAppAddressA = "0x9FfCcD2684236AA029e3EE2aFD36f785CB7cF4E2"; - // const MyOAppA = await ethers.getContractAt("MyOApp", myOAppAddressA); - const MyOAppA = await ethers.getContractAt("LZCrossChainBridge", myOAppAddressA); - - // Destination - Ethereum Sepolia, so we're setting its Chain ID - const chainId = 11155111; - //LZ Endpoint ID for Ethereum Sepolia - const eId = 40161; - - // let's set the eid and chainId - // const txSetChainId = await MyOAppA.setChainIdFromEid(eId, chainId); - // txSetChainId.wait(); - // console.log("Chain ID and eID set"); - - - // Define message and options - - // Define the message with BigInt values - const timestamp = Math.floor(Date.now() / 1000) - 200; // Current timestamp in seconds - const balance = ethers.utils.parseUnits("1000", 18); // BigInt Balance - const totalSupply = ethers.utils.parseUnits("50000", 18); // BigInt Total supply - - // ABI encode the BigInt values - // const message = ethers.utils.defaultAbiCoder.encode( - // ["uint256", "uint256", "uint256"], - // [timestamp, balance, totalSupply] - // ); - - const message = ethers.utils.defaultAbiCoder.encode( - ["uint256", "uint256", "uint256"], - [timestamp, balance, totalSupply] - ); - - const options = Options.newOptions().addExecutorLzReceiveOption(200000, 2000).toHex().toString(); - - - // Estimate fees - const nativeFee = await MyOAppA.quote(chainId, message, options, false); - - console.log(`nativeFee: ${nativeFee}`); - - - // Send message with some ETH for messaging fees - const tx = await MyOAppA.sendCrosschain(chainId, message, options, { - value: nativeFee, // Ensure to provide enough fee - gasLimit: 500000, // You can set a manual gas limit - }); - - console.log("Transaction sent:", tx.hash); - - // Wait for the transaction to be confirmed - await tx.wait(); - console.log("Message sent successfully!"); -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/mainnet/set-peers-l1.ts b/projects/bridge-lz/scripts/mainnet/set-peers-l1.ts deleted file mode 100644 index fec555f8..00000000 --- a/projects/bridge-lz/scripts/mainnet/set-peers-l1.ts +++ /dev/null @@ -1,46 +0,0 @@ -const { ethers } = require("hardhat"); -import { zeroPadValue } from "ethers"; - -async function main() { - const [deployer] = await ethers.getSigners(); - - // Fetch addresses from the checkpoint files - const CrossChainBridgeEthereumAddress = - "0x1E0Bd0291165F789b794e9513Eb07a76849c1448"; //TODO! Insert LZCrossChainBridgeL1 address here - const CrossChainBridgeOptimismAddress = - "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; //TODO! Insert LZCrossChainBridgeL2 Optimism address here - const CrossChainBridgeArbitrumAddress = - "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; //TODO! Insert LZCrossChainBridgeL2 Optimism address here - - if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeOptimismAddress || !CrossChainBridgeArbitrumAddress) { - throw new Error("CrossChainBridge addresses are not set."); - } - - // Get contract instances - const CrossChainBridgeSepolia = await ethers.getContractAt( - "LZCrossChainAdapterL1", - CrossChainBridgeEthereumAddress, - ); - const eIDArbitrumSepolia = 30110; //Arbitrum Mainnet eID - const eIDOptimismSepolia = 30111; //Optimism Mainnet eID - - // Set peer for OptimismSepolia - let tx = await CrossChainBridgeSepolia.connect(deployer).setPeer( - eIDOptimismSepolia, - zeroPadValue(CrossChainBridgeOptimismAddress, 32), - ); - await tx.wait(); - tx = await CrossChainBridgeSepolia.connect(deployer).setPeer( - eIDArbitrumSepolia, - zeroPadValue(CrossChainBridgeArbitrumAddress, 32), - ); - await tx.wait(); - console.log("Peers set successfully"); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/mainnet/set-peers-l2-arb.ts b/projects/bridge-lz/scripts/mainnet/set-peers-l2-arb.ts deleted file mode 100644 index 8ffe2982..00000000 --- a/projects/bridge-lz/scripts/mainnet/set-peers-l2-arb.ts +++ /dev/null @@ -1,40 +0,0 @@ -const { ethers } = require("hardhat"); -const fs = require("fs"); -const path = require("path"); -import { zeroPadValue } from "ethers"; - -async function main() { - const [deployer] = await ethers.getSigners(); - - const CrossChainBridgeEthereumAddress = - "0x1E0Bd0291165F789b794e9513Eb07a76849c1448"; //TODO! Insert LZCrossChainBridgeL1 address here - const CrossChainBridgeArbitrumAddress = - "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; //TODO! Insert LZCrossChainBridgeL2 Arbitrum address here - - if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeArbitrumAddress) { - throw new Error("CrossChainBridge addresses are not set."); - } - - // Get contract instance - const CrossChainBridgeOptimism = await ethers.getContractAt( - "LZCrossChainAdapterL2", - CrossChainBridgeArbitrumAddress, - ); - const eIdSepolia = 30101; //Ethereum Mainnet eID - - // Set peer for Ethereum Mainnet - await CrossChainBridgeOptimism.connect(deployer).setPeer( - eIdSepolia, - zeroPadValue(CrossChainBridgeEthereumAddress, 32), - ); - console.log( - `Bridge at address ${CrossChainBridgeArbitrumAddress} was set successfully with peer at address ${CrossChainBridgeEthereumAddress} at Ethereum`, - ); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/mainnet/set-peers-l2-opt.ts b/projects/bridge-lz/scripts/mainnet/set-peers-l2-opt.ts deleted file mode 100644 index 00af96b4..00000000 --- a/projects/bridge-lz/scripts/mainnet/set-peers-l2-opt.ts +++ /dev/null @@ -1,40 +0,0 @@ -const { ethers } = require("hardhat"); -const fs = require("fs"); -const path = require("path"); -import { zeroPadValue } from "ethers"; - -async function main() { - const [deployer] = await ethers.getSigners(); - - const CrossChainBridgeEthereumAddress = - "0x1E0Bd0291165F789b794e9513Eb07a76849c1448"; //TODO! Insert LZCrossChainBridgeL1 address here - const CrossChainBridgeOptimismAddress = - "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; //TODO! Insert LZCrossChainBridgeL2 Optimism address here - - if (!CrossChainBridgeEthereumAddress || !CrossChainBridgeOptimismAddress) { - throw new Error("CrossChainBridge addresses are not set."); - } - - // Get contract instance - const CrossChainBridgeOptimism = await ethers.getContractAt( - "LZCrossChainAdapterL2", - CrossChainBridgeOptimismAddress, - ); - const eIdSepolia = 30101; //Ethereum Mainnet eID - - // Set peer for Ethereum Mainnet - await CrossChainBridgeOptimism.connect(deployer).setPeer( - eIdSepolia, - zeroPadValue(CrossChainBridgeEthereumAddress, 32), - ); - console.log( - `Bridge at address ${CrossChainBridgeOptimismAddress} was set successfully with peer at address ${CrossChainBridgeEthereumAddress} at Ethereum`, - ); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/send-assets-info-bridge.ts b/projects/bridge-lz/scripts/send-assets-info-bridge.ts deleted file mode 100644 index 6fe3b8e4..00000000 --- a/projects/bridge-lz/scripts/send-assets-info-bridge.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { ethers } from "hardhat"; - -const LZ_CROSS_CHAIN_ADAPTER_L2_ADDRESS = "0x838a7fe80f1AF808Bc5ad0f9B1AC6e26B2475E17"; -const OPTIONS_CREATOR_ADDRESS = "0x8149Df043F5376aa0E5e34A18171Da7Cc0212cF4"; - -async function main() { - const [signer] = await ethers.getSigners(); - console.log("Using signer address:", await signer.getAddress()); - - const tokensAmount = ethers.parseUnits("524000001092000000", 0); - const blockTimestamp = Math.floor(Date.now() / 1000); - const ethAmount = 0; - - const LZCrossChainAdapterL2 = await ethers.getContractAt("LZCrossChainAdapterL2", LZ_CROSS_CHAIN_ADAPTER_L2_ADDRESS); - const OptionsCreator = await ethers.getContractAt("OptionsCreator", OPTIONS_CREATOR_ADDRESS); - - const payload = ethers.AbiCoder.defaultAbiCoder().encode( - ["uint256", "uint256", "uint256"], - [blockTimestamp, tokensAmount, ethAmount] - ); - console.log("Encoded payload:", payload); - - const gas = 300000; - const value = 0; - const options = await OptionsCreator.createLzReceiveOption(gas, value); - console.log("Created options:", options); - - console.log("Getting quote..."); - const msgValue = await LZCrossChainAdapterL2.quote(payload, options); - console.log(`Quote (msg.value): ${ethers.formatEther(msgValue)} ETH`); - - console.log("Calling sendDataL1..."); - const tx = await LZCrossChainAdapterL2.sendDataL1(payload, options, { value: msgValue }); - console.log("Transaction hash:", tx.hash); - - const receipt = await tx.wait(); - console.log("Transaction confirmed in block:", receipt.blockNumber); -} - -main().catch((error) => { - console.error("Error:", error); - process.exit(1); -}); diff --git a/projects/bridge-lz/scripts/set-chain-ids.ts b/projects/bridge-lz/scripts/set-chain-ids.ts deleted file mode 100644 index 408a49c3..00000000 --- a/projects/bridge-lz/scripts/set-chain-ids.ts +++ /dev/null @@ -1,41 +0,0 @@ -const { ethers } = require("hardhat"); - -const Options = require("@layerzerolabs/lz-v2-utilities").Options; -const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString(); - -async function main() { - const myOAppAddressA = "0x3f2dF8698b09c02Ea7aeBC5aC3E56a05afb870cf"; - const MyOAppA = await ethers.getContractAt("LZCrossChainBridge", myOAppAddressA); - - // Destination - Ethereum Sepolia, so we're setting its Chain ID - const chainId = 11155111; - //LZ Endpoint ID for Ethereum Sepolia - const eId = 40161; - - //LZ Endpoint ID for Optimism Sepolia - const chainIdOpt = 11155420; - const eIdOpt = 40232; - - - //LZ Endpoint ID for Arbitrum Sepolia - const chainIdArb = 421614; - const eIdArb = 40231; - - // let's set the eid and chainId - let txSetChainId = await MyOAppA.setChainIdFromEid(eId, chainId); - txSetChainId.wait(); - txSetChainId = await MyOAppA.setChainIdFromEid(eIdOpt, chainIdOpt); - txSetChainId.wait(); - txSetChainId = await MyOAppA.setChainIdFromEid(eIdArb, chainIdArb); - txSetChainId.wait(); - console.log("Chain IDs and eIDs set"); - - -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/setup-iov.ts b/projects/bridge-lz/scripts/setup-iov.ts deleted file mode 100644 index 7ab461dd..00000000 --- a/projects/bridge-lz/scripts/setup-iov.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { ethers, network } from "hardhat"; - -async function main() { - console.log("Setting up InceptionOmniVault..."); - - const networkName = network.name; - console.log(`Network: ${networkName}`); - - let INCEPTION_TOKEN_ADDRESS: string; - let CROSS_CHAIN_BRIDGE_ADDRESS_L2: string; - let IOV_ADDRESS: string; - let RATIO_FEED: string; - - switch (networkName) { - case "arbitrum": - IOV_ADDRESS = "0x7EEd6897D9F032AbccffD2f6AAFCfb59b24BD58E"; // TODO: Insert InceptionOmniVault address for Arbitrum here - INCEPTION_TOKEN_ADDRESS = "0x5A7a183B6B44Dc4EC2E3d2eF43F98C5152b1d76d"; - CROSS_CHAIN_BRIDGE_ADDRESS_L2 = - "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; // TODO: Insert LZCrossChainBridgeL2 address for Arbitrum here - RATIO_FEED = "0xfE715358368416E01d3A961D3a037b7359735d5e"; // Value from inception-service contracts-prod.yaml - break; - case "optimism": - IOV_ADDRESS = "0x7EEd6897D9F032AbccffD2f6AAFCfb59b24BD58E"; // TODO: Insert InceptionOmniVault address for Optimism here - INCEPTION_TOKEN_ADDRESS = "0x5A7a183B6B44Dc4EC2E3d2eF43F98C5152b1d76d"; - CROSS_CHAIN_BRIDGE_ADDRESS_L2 = - "0x19Ba5CcC603e1224B8502C56087e4147cEDD2522"; // TODO: Insert LZCrossChainBridgeL2 address for Optimism here - RATIO_FEED = "0xfD07fD5EBEa6F24888a397997E262179Bf494336"; // Value from inception-service contracts-prod.yaml - break; - case "arbitrumSepolia": - IOV_ADDRESS = ""; // TODO: Insert InceptionOmniVault address for Arbitrum Sepolia here - INCEPTION_TOKEN_ADDRESS = ""; - CROSS_CHAIN_BRIDGE_ADDRESS_L2 = - "0xb7A8CA74cbfe313804c3D52663e9b0C0585B5C4e"; - RATIO_FEED = ""; // TODO: Insert IInceptionRatioFeed address here - break; - case "optimismSepolia": - IOV_ADDRESS = ""; // TODO: Insert InceptionOmniVault address for Optimism Sepolia here - INCEPTION_TOKEN_ADDRESS = "0xb1692ed9b08f8dd641f4109568ed6f471166c7e5"; - CROSS_CHAIN_BRIDGE_ADDRESS_L2 = - "0x838a7fe80f1AF808Bc5ad0f9B1AC6e26B2475E17"; - RATIO_FEED = ""; // TODO: Insert IInceptionRatioFeed address here - break; - default: - throw new Error(`Unsupported network: ${networkName}`); - } - - if (!IOV_ADDRESS) { - throw new Error("Please set the IOV_ADDRESS for the current network"); - } - - if (!RATIO_FEED) { - throw new Error("Please set the RATIO_FEED for the current network"); - } - - const operatorAddress = process.env.OPERATOR_ADDRESS; - if (!operatorAddress) { - throw new Error("Please set the OPERATOR_ADDRESS environment variable"); - } - - console.log("Deployment parameters:"); - console.log("Network:", networkName); - console.log("Operator Address:", operatorAddress); - console.log("Inception Token Address:", INCEPTION_TOKEN_ADDRESS); - console.log("Inception Omni Vault:", IOV_ADDRESS); - console.log("CrossChainBridge Address:", CROSS_CHAIN_BRIDGE_ADDRESS_L2); - console.log("Ratio Feed:", RATIO_FEED); - - console.log("Setting target receiver on LZCrossChainAdapterL2..."); - - const lzCrossChainAdapterL2 = await ethers.getContractAt( - "LZCrossChainAdapterL2", - CROSS_CHAIN_BRIDGE_ADDRESS_L2, - ); - - // const tx1 = await lzCrossChainAdapterL2.setTargetReceiver(IOV_ADDRESS); - // console.log("Waiting for target receiver transaction to complete..."); - // await tx1.wait(); - - console.log( - `Target receiver set successfully on LZCrossChainAdapterL2: ${IOV_ADDRESS}`, - ); - - console.log("Setting Ratio Feed on InceptionOmniVault..."); - - const inceptionOmniVaultABI = [ - "function setRatioFeed(address newRatioFeed) external", - ]; - const inceptionOmniVault = await ethers.getContractAt( - inceptionOmniVaultABI, - IOV_ADDRESS, - ); - - const tx2 = await inceptionOmniVault.setRatioFeed(RATIO_FEED); - console.log("Waiting for Ratio Feed transaction to complete..."); - await tx2.wait(); - - console.log( - `Ratio Feed set successfully on InceptionOmniVault: ${RATIO_FEED}`, - ); - - console.log("Deployment complete."); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error("Error deploying InceptionOmniVault:", error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/update_crosschain_adapter_l1.ts b/projects/bridge-lz/scripts/update_crosschain_adapter_l1.ts deleted file mode 100644 index 1e5c1dbc..00000000 --- a/projects/bridge-lz/scripts/update_crosschain_adapter_l1.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { ethers, network } from "hardhat"; - -async function main() { - console.log("Setting target receiver for CrossChainAdapterL1..."); - - const networkName = network.name; - console.log(`Network: ${networkName}`); - - let nativeRebalancerAddress = ""; - let crossChainBridgeAddress = ""; - - if (network.name === "mainnet") { - // TODO - nativeRebalancerAddress = ""; - crossChainBridgeAddress = ""; - } else if (network.name === "holesky") { - nativeRebalancerAddress = "0xd13469584C26c329D56176b243f0507f84Fb778A"; - crossChainBridgeAddress = "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E"; - } else { - throw new Error(`Unknown network: ${network.name}`); - } - console.log("NativeRebalancer address:", nativeRebalancerAddress); - console.log("crossChainBridge address:", crossChainBridgeAddress); - - const lzCrossChainAdapterL1 = await ethers.getContractAt("LZCrossChainAdapterL1", crossChainBridgeAddress); - - console.log(`Setting targetReceiver to NativeRebalancer address at ${nativeRebalancerAddress}`); - const tx = await lzCrossChainAdapterL1.setTargetReceiver(nativeRebalancerAddress); - - await tx.wait(); - console.log("targetReceiver set successfully in transaction:", tx.hash); - -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error("Error deploying InceptionOmniVault:", error); - process.exit(1); - }); diff --git a/projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL1.ts b/projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL1.ts deleted file mode 100644 index c77ba6d7..00000000 --- a/projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL1.ts +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { type DeployFunction } from 'hardhat-deploy/types'; -import fs from 'fs'; -import path from 'path'; - -const contractName = 'CrossChainAdapterOptimismL1'; - -const deploy: DeployFunction = async (hre) => { - const { getNamedAccounts, deployments, network } = hre; - const { deploy } = deployments; - const { deployer } = await getNamedAccounts(); - - assert(deployer, 'Missing named deployer account'); - - // Check if the network is 'sepolia' - if (network.name !== 'sepolia') { - throw new Error(`Deployment is only allowed on the 'sepolia' network. Current network: ${network.name}`); - } - - // Define the path to the checkpoint file - const checkpointFilePath = path.join(__dirname, '../deployment_checkpoint_sepolia.json'); - - // Check if the file exists, if not, create an empty JSON structure - let checkpointData = {}; - if (fs.existsSync(checkpointFilePath)) { - checkpointData = JSON.parse(fs.readFileSync(checkpointFilePath, 'utf8')); - } - - const rebalancer = checkpointData.Rebalancer; - const transactionStorage = checkpointData.TransactionStorage; - - if (!rebalancer || !transactionStorage) { - throw new Error('Missing Rebalancer or TransactionStorage address in deployment_checkpoint_sepolia.json'); - } - - console.log(`Network: ${network.name}`); - console.log(`Deployer and Operator: ${deployer}`); - console.log(`Rebalancer Address: ${rebalancer}`); - console.log(`TransactionStorage Address: ${transactionStorage}`); - - // Fetch the external LayerZero EndpointV2 deployment - const endpointV2Deployment = await hre.deployments.get('EndpointV2'); - - const operator = deployer; // Set deployer as operator - - const { address } = await deploy(contractName, { - from: deployer, - args: [ - endpointV2Deployment.address, // LayerZero's EndpointV2 address - deployer, // Delegate address (deployer as owner) - rebalancer, // Rebalancer address from JSON - transactionStorage, // Transaction storage address from JSON - operator, // Operator (deployer) - ], - log: true, - skipIfAlreadyDeployed: false, - }); - - console.log(`Deployed contract: ${contractName}, network: ${network.name}, address: ${address}`); - - // Write the new deployed address to deployment_checkpoint_sepolia.json - checkpointData.CrossChainAdapterOptimismL1 = address; - fs.writeFileSync(checkpointFilePath, JSON.stringify(checkpointData, null, 2), 'utf8'); - - console.log(`Updated deployment_checkpoint_sepolia.json with CrossChainAdapterOptimismL1: ${address}`); -}; - -deploy.tags = [contractName]; - -export default deploy; diff --git a/projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL2.ts b/projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL2.ts deleted file mode 100644 index dec7bc31..00000000 --- a/projects/bridge-lz/scripts/wasDeployment/CrossChainAdapterOptimismL2.ts +++ /dev/null @@ -1,64 +0,0 @@ -import assert from 'assert'; -import { type DeployFunction } from 'hardhat-deploy/types'; -import fs from 'fs'; -import path from 'path'; - -const contractName = 'CrossChainAdapterOptimismL2'; - -const deploy: DeployFunction = async (hre) => { - const { getNamedAccounts, deployments, network } = hre; - const { deploy } = deployments; - const { deployer } = await getNamedAccounts(); - - assert(deployer, 'Missing named deployer account'); - - // Define the path to the checkpoint file - const checkpointFilePath = path.join(__dirname, '../deployment_checkpoint_optimism-sepolia.json'); - - // Check if the file exists, if not, throw an error - if (!fs.existsSync(checkpointFilePath)) { - throw new Error(`File not found: ${checkpointFilePath}`); - } - - // Read the JSON file to get rebalancer, transactionStorage, and vault addresses - const checkpointData = JSON.parse(fs.readFileSync(checkpointFilePath, 'utf8')); - - const vault = checkpointData.InceptionOmniVault; - - if (!vault) { - throw new Error('Missing InceptionOmniVault address in deployment_checkpoint_optimism_sepolia.json'); - } - - console.log(`Network: ${network.name}`); - console.log(`Deployer and Operator: ${deployer}`); - console.log(`Vault Address: ${vault}`); - - // Fetch the external LayerZero EndpointV2 deployment - const endpointV2Deployment = await hre.deployments.get('EndpointV2'); - - const operator = deployer; // Set deployer as operator - - const { address } = await deploy(contractName, { - from: deployer, - args: [ - endpointV2Deployment.address, // LayerZero's EndpointV2 address - deployer, // Delegate address (deployer as owner) - vault, // Vault address from JSON - operator, // Operator (deployer) - ], - log: true, - skipIfAlreadyDeployed: false, - }); - - console.log(`Deployed contract: ${contractName}, network: ${network.name}, address: ${address}`); - - // Write the new deployed address to deployment_checkpoint_optimism_sepolia.json - checkpointData.CrossChainAdapterOptimismL2 = address; - fs.writeFileSync(checkpointFilePath, JSON.stringify(checkpointData, null, 2), 'utf8'); - - console.log(`Updated deployment_checkpoint_optimism_sepolia.json with CrossChainAdapterOptimismL2: ${address}`); -}; - -deploy.tags = [contractName]; - -export default deploy; diff --git a/projects/bridge-lz/scripts/wasDeployment/MyOApp.ts b/projects/bridge-lz/scripts/wasDeployment/MyOApp.ts deleted file mode 100644 index b3854fa9..00000000 --- a/projects/bridge-lz/scripts/wasDeployment/MyOApp.ts +++ /dev/null @@ -1,53 +0,0 @@ -import assert from 'assert' - -import { type DeployFunction } from 'hardhat-deploy/types' - -// TODO declare your contract name here -const contractName = 'MyOApp' - -const deploy: DeployFunction = async (hre) => { - const { getNamedAccounts, deployments } = hre - - const { deploy } = deployments - const { deployer } = await getNamedAccounts() - - assert(deployer, 'Missing named deployer account') - - console.log(`Network: ${hre.network.name}`) - console.log(`Deployer: ${deployer}`) - - // This is an external deployment pulled in from @layerzerolabs/lz-evm-sdk-v2 - // - // @layerzerolabs/toolbox-hardhat takes care of plugging in the external deployments - // from @layerzerolabs packages based on the configuration in your hardhat config - // - // For this to work correctly, your network config must define an eid property - // set to `EndpointId` as defined in @layerzerolabs/lz-definitions - // - // For example: - // - // networks: { - // fuji: { - // ... - // eid: EndpointId.AVALANCHE_V2_TESTNET - // } - // } - const endpointV2Deployment = await hre.deployments.get('EndpointV2') - - - const { address } = await deploy(contractName, { - from: deployer, - args: [ - endpointV2Deployment.address, // LayerZero's EndpointV2 address - deployer, // owner - ], - log: true, - skipIfAlreadyDeployed: false, - }) - - console.log(`Deployed contract: ${contractName}, network: ${hre.network.name}, address: ${address}`) -} - -deploy.tags = [contractName] - -export default deploy diff --git a/projects/tests/omnivault-rebalancer/test/ERC20Rebalancer.test.ts b/projects/tests/omnivault-rebalancer/test/ERC20Rebalancer.test.ts deleted file mode 100644 index 6a237609..00000000 --- a/projects/tests/omnivault-rebalancer/test/ERC20Rebalancer.test.ts +++ /dev/null @@ -1,3222 +0,0 @@ -import { ethers, network, upgrades } from "hardhat"; -import { expect } from "chai"; -import { takeSnapshot, time } from "@nomicfoundation/hardhat-network-helpers"; -import { e18, getSlotByName, impersonateWithEth, randomBI, randomBIMax, toWei } from "./helpers/utils.js"; -import { SnapshotRestorer } from "@nomicfoundation/hardhat-network-helpers/src/helpers/takeSnapshot"; -import { AbiCoder, Signer } from "ethers"; -import { Options } from "@layerzerolabs/lz-v2-utilities"; -import { - EndpointMock, - ERC20, - InceptionERC20OmniVault, - InceptionRatioFeed, - InceptionToken, - FerryAdapter, - LZCrossChainAdapterL1, - LZCrossChainAdapterL2, - ERC20Rebalancer, - RatioFeed, - RestakingPool, - InceptionVault, - IERC20Mintable, - MockFraxferry, - FraxFerryLZCrossChainAdapterL2, -} from "../typechain-types"; -import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; -import { min } from "hardhat/internal/util/bigint"; - -BigInt.prototype.format = function () { - return this.toLocaleString("de-DE"); -}; - -const FRAX_ID = 252n; -const ETH_ID = 1n; -const FRAX_EID = 30255n; -const FRAX_TESTNET_EID = 40255n; -const ETH_EID = 30111n; -const eIds = [ETH_EID, FRAX_EID]; -const chainIds = [ETH_ID, FRAX_ID]; -const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); - -describe("Omnivault integration tests", function () { - this.timeout(150000); - // new - let underlyingL1, underlyingL2: IERC20Mintable; - let ferryL2: MockFraxferry; - let adapterL2: FraxFerryLZCrossChainAdapterL2; - // end new - //Adapters - // let adapterL1: LZCrossChainAdapterL1; - //let maliciousAdapterL1: LZCrossChainAdapterL1; - //let adapterFrax: LZCrossChainAdapterL2; - - let ethEndpoint: EndpointMock; - let fraxEndpoint: EndpointMock; - - //let maliciousAdapterL2: LZCrossChainAdapterL2; - - // ============ L1 ============ - let ratioFeedL1: RatioFeed; - let iTokenL1: InceptionToken; - let rebalancer: ERC20Rebalancer; - let inceptionVault: InceptionVault; - - // ============ L2 ============ - let iTokenL2: InceptionToken; - //let fraxToken: ERC20; - let omniVault: InceptionERC20OmniVault; // Frax chain - let ratioFeedL2: InceptionRatioFeed; - - let owner: Signer; - let operator: Signer; - let treasury: Signer; - let signer1: Signer; - let signer2: Signer; - let signer3: Signer; - let target: Signer; - - let snapshot: SnapshotRestorer; - let lockboxAddress: String; - - let TARGET = toWei(10); - - async function init(owner: Signer, operator: Signer) { - const block = await ethers.provider.getBlock("latest"); - console.log(`Starting at block number: ${block.number}`); - lockboxAddress = network.config.addresses.lockbox; - - // Deploy fake ERC20 and Ferries - // then deploy L1 incToken - // L1 reb - // L2 CCA - // L2 incToken - // deploy and set ratio feeds - // set target receivers - // set reb in L1it - // set reb delays - // set ratios - - console.log("=== Underlying asset mocks"); - const DummyTokenFactory = await ethers.getContractFactory("DummyToken"); - underlyingL1 = await DummyTokenFactory.deploy(); - (underlyingL1 as any).address = await underlyingL1.getAddress(); - - underlyingL2 = await DummyTokenFactory.deploy(); - (underlyingL2 as any).address = await underlyingL2.getAddress(); - - console.log("=== Ferry mocks"); - const MockFerryFactory = await ethers.getContractFactory("MockFraxferry"); - ferryL2 = await MockFerryFactory.deploy(underlyingL2); - (ferryL2 as any).address = await ferryL2.getAddress(); - - // console.log("=== CrossChainAdapterL1"); - // const ethEndpoint = await ethers.deployContract("EndpointMock", [ETH_EID]); - // (ethEndpoint as any).address = await ethEndpoint.getAddress(); - // const LZCrossChainAdapterL1 = await ethers.getContractFactory("LZCrossChainAdapterL1"); - // const adapterL1 = await upgrades.deployProxy(LZCrossChainAdapterL1, [ - // (ethEndpoint as any).address, - // (ethEndpoint as any).address, - // eIds, - // chainIds, - // ]); - // (adapterL1 as any).address = await adapterL1.getAddress(); - - // ____ _ _ _ _ - // / ___|_ __ ___ ___ ___ ___| |__ __ _(_)_ __ __ _ __| | __ _ _ __ | |_ ___ _ __ ___ - // | | | '__/ _ \/ __/ __|/ __| '_ \ / _` | | '_ \ / _` |/ _` |/ _` | '_ \| __/ _ \ '__/ __| - // | |___| | | (_) \__ \__ \ (__| | | | (_| | | | | | | (_| | (_| | (_| | |_) | || __/ | \__ \ - // \____|_| \___/|___/___/\___|_| |_|\__,_|_|_| |_| \__,_|\__,_|\__,_| .__/ \__\___|_| |___/ - // |_| - console.log("============ Crosschain adapters ============"); - - console.log("=== CrossChainAdapterL1"); - const ethEndpoint = await ethers.deployContract("EndpointMock", [ETH_EID]); - (ethEndpoint as any).address = await ethEndpoint.getAddress(); - const LZCrossChainAdapterL1 = await ethers.getContractFactory("LZCrossChainAdapterL1"); - const adapterL1 = await upgrades.deployProxy(LZCrossChainAdapterL1, [ - (ethEndpoint as any).address, - (ethEndpoint as any).address, - eIds, - chainIds, - ]); - (adapterL1 as any).address = await adapterL1.getAddress(); - - console.log("=== Frax LZCrossChainAdapterL2"); - const fraxEndpoint = await ethers.deployContract("EndpointMock", [FRAX_EID]); - (fraxEndpoint as any).address = await fraxEndpoint.getAddress(); - const FraxFerryLZCrossChainAdapterL2 = await ethers.getContractFactory("FraxFerryLZCrossChainAdapterL2"); - const adapterFrax = await upgrades.deployProxy(FraxFerryLZCrossChainAdapterL2, [ - (underlyingL2 as any).address, // underlying token - (ferryL2 as any).address, // ferry mock bridge - (fraxEndpoint as any).address, // endpoint - (owner as any).address, // delegate - ETH_ID, // chainID - eIds, - chainIds, - ]); - (adapterFrax as any).address = await adapterFrax.getAddress(); - - // (adapterFrax as any).sendData = async function (timestamp: any, vaultBalance: any, totalSupply: any) { - // const message = encodePayload(timestamp, vaultBalance, totalSupply); - // const fees = await this.quote(message, options); - // return await this.sendDataL1(message, options, { value: fees }); - // }; - - // Connect endpoints - // await fraxEndpoint.setDestLzEndpoint(adapterL1.address, ethEndpoint.address); - // await ethEndpoint.setDestLzEndpoint((adapterFrax as any).address, (fraxEndpoint as any).address); - - /************************************ - ******** Malicious adapters ******** - ************************************/ - - const maliciousAdapterL1 = await upgrades.deployProxy(LZCrossChainAdapterL1, [ethEndpoint.address, owner.address, eIds, chainIds]); - (maliciousAdapterL1 as any).address = await maliciousAdapterL1.getAddress(); - - const maliciousAdapterL2 = await upgrades.deployProxy(FraxFerryLZCrossChainAdapterL2, [ - (underlyingL2 as any).address, // underlying token - (ferryL2 as any).address, // ferry mock bridge - fraxEndpoint.address, - owner.address, - ETH_ID, - eIds, - chainIds, - ]); - (maliciousAdapterL2 as any).address = await maliciousAdapterL2.getAddress(); - - // ____ _ - // | | / | - // | | | | - // | |___| | - // |_____| | - - console.log("============ FraxETH ============"); - const sfrxETH = await ethers.getContractAt("ERC20", (network.config as any).addresses.sfrxETH); - - // impersonateStaker: async (staker, iVault, asset, assetPool) => { - // const donor = await impersonateWithEth("0xe7d40d9a77caddd8e8b4b484ed14c42f3b8d763a", toWei(1)); - // console.log(`balance of the donor: ${(await asset.balanceOf(donor.address)).toString()}`); - // await asset.connect(donor).transfer(staker.address, toWei(1000)); - // const balanceAfter = await asset.balanceOf(staker.address); - // await asset.connect(staker).approve(await iVault.getAddress(), balanceAfter); - // return staker; - // }, - // }, - - console.log("============ InceptionVault Layer1 ============"); - - console.log("=== InceptionVault"); - console.log((network.config as any).addresses.inceptionVault); - const restakingPoolAdminAddress = await upgrades.erc1967.getAdminAddress((network.config as any).addresses.inceptionVault); - let slot = "0x" + (0).toString(16); - let value = ethers.zeroPadValue((owner as any).address, 32); - await network.provider.send("hardhat_setStorageAt", [restakingPoolAdminAddress, slot, value]); - - const InceptionVaultFactory = await ethers.getContractFactory("InceptionVault", { - signer: owner, - libraries: { InceptionLibrary: network.config.addresses.lib }, - }); - await upgrades.forceImport(network.config.addresses.inceptionVault, InceptionVaultFactory); - const inceptionVault = await upgrades.upgradeProxy(network.config.addresses.inceptionVault, InceptionVaultFactory, { - unsafeAllowLinkedLibraries: true, - }); - inceptionVault.address = await inceptionVault.getAddress(); - - console.log("=== InceptionToken"); - const inceptionTokenAdminAddress = await upgrades.erc1967.getAdminAddress(network.config.addresses.inceptionToken); - console.log(inceptionTokenAdminAddress); - slot = "0x" + (0).toString(16); - value = ethers.zeroPadValue(owner.address, 32); - await network.provider.send("hardhat_setStorageAt", [inceptionTokenAdminAddress, slot, value]); - const InceptionTokenFactory = await ethers.getContractFactory("InceptionToken", owner); - await upgrades.forceImport(network.config.addresses.inceptionToken, InceptionTokenFactory); - const inceptionToken = await upgrades.upgradeProxy(network.config.addresses.inceptionToken, InceptionTokenFactory); - inceptionToken.address = await inceptionToken.getAddress(); - - console.log("=== RatioFeed"); - const ratioFeedAdminAddress = await upgrades.erc1967.getAdminAddress(network.config.addresses.ratioFeed); - slot = "0x" + (0).toString(16); - value = ethers.zeroPadValue(owner.address, 32); - await network.provider.send("hardhat_setStorageAt", [ratioFeedAdminAddress, slot, value]); - const RatioFeed = await ethers.getContractFactory("RatioFeed", owner); - const ratioFeedL1 = await upgrades.upgradeProxy(network.config.addresses.ratioFeed, RatioFeed); - ratioFeedL1.address = await ratioFeedL1.getAddress(); - - console.log("=== ERC20Rebalancer"); - const Rebalancer = await ethers.getContractFactory("ERC20Rebalancer"); - const rebalancer = await upgrades.deployProxy(Rebalancer, [ - 31337, // def chainid - // incToken - // underlying asset - // lockbox - // ivault - // adapter - // operator - inceptionToken.address, - lockboxAddress, - inceptionVault.address, - adapterL1.address, - ratioFeedL1.address, - operator.address, - ]); - rebalancer.address = await rebalancer.getAddress(); - await rebalancer.connect(owner).addChainId(FRAX_ID); - await rebalancer.connect(owner).addChainId(OPT_ID); - - // ___ ___ __ _ _ _ ____ - // / _ \ _ __ ___ _ __ (_) \ / /_ _ _ _| | |_ | | |___ \ - // | | | | '_ ` _ \| '_ \| |\ \ / / _` | | | | | __| | | __) | - // | |_| | | | | | | | | | | \ V / (_| | |_| | | |_ | |___ / __/ - // \___/|_| |_| |_|_| |_|_| \_/ \__,_|\__,_|_|\__| |_____|_____| - // - console.log("============ OmniVault Layer2 ============"); - console.log("=== iToken"); - const iTokenFactory = await ethers.getContractFactory("InceptionToken", owner); - const iToken = await upgrades.deployProxy(iTokenFactory, ["TEST InceptionLRT Token", "tINt"]); - await iToken.waitForDeployment(); - iToken.address = await iToken.getAddress(); - - console.log("=== InceptionRatioFeed"); - const iRatioFeedFactory = await ethers.getContractFactory("InceptionRatioFeed", owner); - const ratioFeedL2 = await upgrades.deployProxy(iRatioFeedFactory, []); - await ratioFeedL2.waitForDeployment(); - ratioFeedL2.address = await ratioFeedL2.getAddress(); - await (await ratioFeedL2.updateRatioBatch([iToken.address], [e18])).wait(); - - console.log("=== OmniVault"); - const omniVaultFactory = await ethers.getContractFactory("ERC20OmniVault_E2", owner); - const omniVault = await upgrades.deployProxy(omniVaultFactory, [ - "OmniVault", - operator.address, - iToken.address, - await sfrxETH.getAddress(), - adapterFrax.address, - ]); - omniVault.address = await omniVault.getAddress(); - await omniVault.setRatioFeed(ratioFeedL2.address); - await omniVault.setTreasuryAddress(treasury.address); - await iToken.setVault(omniVault.address); - - // Adapters final setup - await adapterL1.setTargetReceiver(rebalancer.address); - await adapterL1.setPeer(FRAX_EID, ethers.zeroPadValue(adapterFrax.address, 32)); - await adapterFrax.setTargetReceiver(omniVault.address); - await adapterFrax.setPeer(ETH_EID, ethers.zeroPadValue(adapterL1.address, 32)); - - await maliciousAdapterL1.setPeer(FRAX_EID, ethers.zeroPadValue(adapterFrax.address, 32)); - await maliciousAdapterL2.setPeer(ETH_EID, ethers.zeroPadValue(adapterL1.address, 32)); - - return [ - adapterL1, - ethEndpoint, - adapterFrax, - fraxEndpoint, - inceptionToken, - rebalancer, - ratioFeedL1, - inceptionVault, - iToken, - ratioFeedL2, - omniVault, - maliciousAdapterL1, - maliciousAdapterL2, - ]; - } - - async function addReplenishBonusToOmniVault(amount) { - if (amount > 0n) { - expect(await iToken.balanceOf(signer3.address)).to.be.eq(0n); - await omniVault.connect(signer3).deposit(signer3.address, { value: amount }); - const shares = await iToken.balanceOf(signer3.address); - await omniVault.connect(signer3).flashWithdraw(shares, signer3.address); - } - return await omniVault.depositBonusAmount(); - } - - function encodePayload(timestamp, ethAmount, totalSupply) { - const abiCoder = new AbiCoder(); - return abiCoder.encode(["uint256", "uint256", "uint256"], [timestamp, totalSupply, ethAmount]); - } - - before(async function () { - [owner, operator, treasury, signer1, signer2, signer3, target] = await ethers.getSigners(); - [ - adapterL1, - ethEndpoint, - adapterFrax, - fraxEndpoint, - underlyingToken, - rebalancer, - ratioFeedL1, - inceptionVault, - iToken, - ratioFeedL2, - omniVault, - maliciousAdapterL1, - maliciousAdapterL2, - ] = await init(owner, operator); - - snapshot = await takeSnapshot(); - }); - - describe("InceptionVault", function () { - describe("After deployments checks", function () { - before(async function () { - await snapshot.restore(); - }); - - it("Signer can stake", async function () { - await inceptionVault.connect(signer1).deposit(2n * e18, signer1); - }); - - it("Get min stake amount", async function () { - console.log("Min stake amount: ", await inceptionVault.minAmount()); - }); - }); - }); - - describe("Bridge base flow", function () { - const TARGET = e18 / 10n; - let iTokenOpt: InceptionToken; - let omniVaultOpt: InceptionERC20OmniVault; - let ratioFeedL2Opt: InceptionRatioFeed; - before(async function () { - await snapshot.restore(); - - console.log("============ OmniVault Layer2 Optimism============"); - console.log("=== iTokenOpt"); - const iTokenFactory = await ethers.getContractFactory("InceptionToken", owner); - iTokenOpt = await upgrades.deployProxy(iTokenFactory, ["TEST InceptionLRT Token", "tINt"]); - await iTokenOpt.waitForDeployment(); - iTokenOpt.address = await iTokenOpt.getAddress(); - - console.log("=== InceptionRatioFeed"); - const iRatioFeedFactory = await ethers.getContractFactory("InceptionRatioFeed", owner); - ratioFeedL2Opt = await upgrades.deployProxy(iRatioFeedFactory, []); - ratioFeedL2Opt.waitForDeployment(); - ratioFeedL2Opt.address = await ratioFeedL2Opt.getAddress(); - await (await ratioFeedL2Opt.updateRatioBatch([iTokenOpt.address], [e18])).wait(); - - console.log("=== OmniVault"); - const omniVaultFactory = await ethers.getContractFactory("InceptionERC20OmniVault", owner); - omniVaultOpt = await upgrades.deployProxy(omniVaultFactory, ["omniVault", operator.address, iTokenOpt.address, adapterFrax.address], { - initializer: "initialize", - }); - omniVaultOpt.address = await omniVaultOpt.getAddress(); - await omniVaultOpt.setRatioFeed(ratioFeedL2Opt.address); - await omniVaultOpt.setTreasuryAddress(treasury.address); - await iTokenOpt.setVault(omniVaultOpt.address); - - await omniVault.setTargetFlashCapacity(TARGET); - await omniVaultOpt.setTargetFlashCapacity(TARGET); - - // await rebalancer.setUpdateable(true); - }); - - it("Sync ratio from ETH to FRAX", async function () { - const l1Ratio = await underlyingToken.ratio(); - console.log("L1 ratio:", l1Ratio.format()); - await ratioFeedL2.updateRatioBatch([iToken.address], [l1Ratio]); - await ratioFeedL2Opt.updateRatioBatch([iTokenOpt.address], [l1Ratio]); - console.log("Frax ratio:", (await omniVault.ratio()).format()); - }); - - it("Stake on FRAX", async function () { - await omniVault.connect(signer1).deposit(TARGET + e18, signer1); - await omniVault.connect(signer2).deposit(e18, signer2); - expect(await omniVault.getFreeBalance()).to.be.eq(e18 + e18); - console.log(await iToken.totalSupply()); - console.log(await omniVault.getFlashCapacity()); - console.log(await omniVault.getFreeBalance()); - console.log(await ethers.provider.getBalance(omniVault.address)); - }); - - let mintShares = 0n; - it("Send info from FRAX", async function () { - const totalSupply = await iToken.totalSupply(); - mintShares += totalSupply; - const ethBalance = await omniVault.getFlashCapacity(); - - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); - const fee = await omniVault.quoteSendAssetsInfoToL1(options); - const timestamp = (await time.latest()) + 1; - const tx = await omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee }); - - const txData = await rebalancer.getTransactionData(FRAX_ID); - await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(FRAX_ID, timestamp, ethBalance, totalSupply); - expect(txData.inceptionTokenSupply).to.be.eq(totalSupply); - expect(txData.underlyingBalance).to.be.eq(ethBalance); - expect(txData.timestamp).to.be.eq(timestamp); - }); - - it("Add OPT and send data from OPT", async function () { - await rebalancer.connect(owner).addChainId(OPT_ID); - // await adapterOpt.connect(owner).setTargetReceiver(omniVaultOpt.address); - - const totalSupply = await iTokenOpt.totalSupply(); - mintShares += totalSupply; - const ethBalance = await omniVaultOpt.getFlashCapacity(); - - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); - const fee = await omniVaultOpt.quoteSendAssetsInfoToL1(options); - const timestamp = (await time.latest()) + 1; - const tx = await omniVaultOpt.connect(operator).sendAssetsInfoToL1(options, { value: fee }); - - const txData = await rebalancer.getTransactionData(OPT_ID); - await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(OPT_ID, timestamp, ethBalance, totalSupply); - expect(txData.inceptionTokenBalance).to.be.eq(totalSupply); - expect(txData.ethBalance).to.be.eq(ethBalance); - expect(txData.timestamp).to.be.eq(timestamp); - }); - - it("Update data and mint", async function () { - const inEthSupplyBefore = await underlyingToken.totalSupply(); - - const tx = await rebalancer.connect(signer1).updateTreasuryData(); - - const inEthSupplyAfter = await underlyingToken.totalSupply(); - await expect(tx).to.emit(rebalancer, "SyncedSupplyChanged").withArgs(0n, mintShares); - await expect(tx).to.emit(rebalancer, "TreasuryUpdateMint").withArgs(mintShares); - await expect(tx).changeTokenBalance(underlyingToken, lockboxAddress, mintShares); - expect(inEthSupplyAfter - inEthSupplyBefore).to.be.eq(mintShares); - }); - - it("updateTreasuryData reverts when there are no changes", async function () { - await expect(rebalancer.connect(signer1).updateTreasuryData()).to.be.revertedWithCustomError(rebalancer, "NoRebalancingRequired"); - }); - - it("Send free balance from ARB", async function () { - const inEthSupplyBefore = await underlyingToken.totalSupply(); - - const freeBalance = await omniVault.getFreeBalance(); - - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, freeBalance).toHex().toString(); - const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); - const tx = await omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee }); - - const inEthSupplyAfter = await underlyingToken.totalSupply(); - console.log(await omniVault.getFlashCapacity()); - console.log(await omniVault.getFreeBalance()); - console.log(await ethers.provider.getBalance(omniVault.address)); - - await expect(tx).changeEtherBalance(rebalancer, freeBalance); - expect(inEthSupplyAfter).to.be.eq(inEthSupplyBefore); - }); - - /** - * Stake() only transfers Eth to inceptionVault without minting new shares, - * as the number of shares managed separately by updateTreasuryData() - */ - it("Stake eth by rebalancer", async function () { - const inEthSupplyBefore = await underlyingToken.totalSupply(); - const pendingBefore = await inceptionVault.getPending(); - - const amount = await ethers.provider.getBalance(rebalancer.address); - const tx = await rebalancer.connect(operator).stake(amount); - - const pendingAfter = await inceptionVault.getPending(); - - await expect(tx).changeEtherBalance(inceptionVault, amount); - const inEthSupplyAfter = await underlyingToken.totalSupply(); - expect(inEthSupplyAfter).to.be.eq(inEthSupplyBefore); - expect(pendingAfter - pendingBefore).to.be.eq(amount); - }); - - let burntShares; - it("Flash withdraw on ARB", async function () { - const iTokenSupplyBefore = await iToken.totalSupply(); - - burntShares = await omniVault.convertToShares(await omniVault.getFlashCapacity()); - await omniVault.connect(signer2).flashWithdraw(burntShares, signer2.address); - - console.log(await omniVault.getFlashCapacity()); - console.log(await omniVault.getFreeBalance()); - console.log(await ethers.provider.getBalance(omniVault.address)); - - const iTokenSupplyAfter = await iToken.totalSupply(); - expect(iTokenSupplyBefore - iTokenSupplyAfter).to.be.eq(burntShares); - }); - - it("Update data and burn", async function () { - mintShares = await iToken.totalSupply(); - const ethBalance = await omniVault.getFlashCapacity(); - - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); - const fee = await omniVault.quoteSendAssetsInfoToL1(options); - const timestamp = (await time.latest()) + 1; - let tx = await omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee }); - await expect(tx).to.emit(omniVault, "MessageToL1Sent").withArgs(mintShares, ethBalance); - - const txData = await rebalancer.getTransactionData(ARB_ID); - await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(ARB_ID, timestamp, ethBalance, mintShares); - expect(txData.inceptionTokenBalance).to.be.eq(mintShares); - expect(txData.ethBalance).to.be.eq(ethBalance); - expect(txData.timestamp).to.be.eq(timestamp); - - const inEthSupplyBefore = await underlyingToken.totalSupply(); - const syncBefore = await rebalancer.syncedSupply(); - tx = await rebalancer.connect(signer1).updateTreasuryData(); - - const inEthSupplyAfter = await underlyingToken.totalSupply(); - await expect(tx) - .to.emit(rebalancer, "SyncedSupplyChanged") - .withArgs(syncBefore, syncBefore - burntShares); - await expect(tx).to.emit(rebalancer, "TreasuryUpdateBurn").withArgs(burntShares); - await expect(tx).changeTokenBalance(underlyingToken, lockboxAddress, -burntShares); - expect(inEthSupplyBefore - inEthSupplyAfter).to.be.eq(burntShares); - }); - - it("Deposit on ARB", async function () { - const depositBonus = await omniVault.depositBonusAmount(); - const amount = e18 * 2n; - const expectedShars = await omniVault.convertToShares(amount + depositBonus); - const balanceBefore = await iToken.balanceOf(signer2); - - let tx = await omniVault.connect(signer2).deposit(signer2, { value: amount }); - - const balanceAfter = await iToken.balanceOf(signer2); - - expect(balanceAfter - balanceBefore).to.be.closeTo(expectedShars, 1n); - mintShares = balanceAfter - balanceBefore; - console.log(await omniVault.getFlashCapacity()); - console.log(await omniVault.getFreeBalance()); - console.log(await ethers.provider.getBalance(omniVault.address)); - }); - - it("Send free balance from ARB", async function () { - const freeBalance = await omniVault.getFreeBalance(); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, freeBalance).toHex().toString(); - const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); - let tx = await omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee }); - - await expect(tx).changeEtherBalance(rebalancer, freeBalance); - console.log(await omniVault.getFlashCapacity()); - console.log(await omniVault.getFreeBalance()); - console.log(await ethers.provider.getBalance(omniVault.address)); - - const inEthSupplyBefore = await underlyingToken.totalSupply(); - const amount = await ethers.provider.getBalance(rebalancer.address); - tx = await rebalancer.connect(operator).stake(amount); - - await expect(tx).changeEtherBalance(inceptionVault, amount); - const inEthSupplyAfter = await underlyingToken.totalSupply(); - expect(inEthSupplyAfter).to.be.eq(inEthSupplyBefore); - }); - - it("Send info and update data", async function () { - const totalSupplyArb = await iToken.totalSupply(); - const ethBalance = await omniVault.getFlashCapacity(); - - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); - const fee = await omniVault.quoteSendAssetsInfoToL1(options); - const timestamp = (await time.latest()) + 1; - let tx = await omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee }); - - const txData = await rebalancer.getTransactionData(ARB_ID); - await expect(tx).to.emit(rebalancer, "L2InfoReceived").withArgs(ARB_ID, timestamp, ethBalance, totalSupplyArb); - expect(txData.inceptionTokenBalance).to.be.eq(totalSupplyArb); - expect(txData.ethBalance).to.be.eq(ethBalance); - expect(txData.timestamp).to.be.eq(timestamp); - - const inEthSupplyBefore = await underlyingToken.totalSupply(); - const syncBefore = await rebalancer.syncedSupply(); - tx = await rebalancer.connect(signer1).updateTreasuryData(); - - const inEthSupplyAfter = await underlyingToken.totalSupply(); - const syncAfter = await rebalancer.syncedSupply(); - await expect(tx) - .to.emit(rebalancer, "SyncedSupplyChanged") - .withArgs(syncBefore, syncBefore + mintShares); - await expect(tx).to.emit(rebalancer, "TreasuryUpdateMint").withArgs(mintShares); - await expect(tx).changeTokenBalance(underlyingToken, lockboxAddress, mintShares); - expect(inEthSupplyAfter - inEthSupplyBefore).to.be.eq(mintShares); - expect(syncAfter - syncBefore).to.be.eq(mintShares); - }); - - it("Stake to restaking pool", async function () { - const amount = await inceptionVault.availableToStake(); - const expectedShares = await underlyingToken.convertToShares(amount); - const totalSupplyBefore = await underlyingToken.totalSupply(); - const pendingBefore = await inceptionVault.getPending(); - - let tx = await inceptionVault.connect(signer1)["stake()"]({ value: amount }); - - const totalSupplyAfter = await underlyingToken.totalSupply(); - const pendingAfter = await inceptionVault.getPending(); - - await expect(tx).changeEtherBalance(inceptionVault, amount); - await expect(tx).changeTokenBalance(underlyingToken, signer1, expectedShares); - expect(totalSupplyAfter - totalSupplyBefore).to.be.eq(expectedShares); - expect(pendingAfter - pendingBefore).to.be.eq(amount); - }); - }); - return; - describe("Rebalancer", function () { - describe("Deployments checks", function () { - let NativeRebalancer; - before(async function () { - await snapshot.restore(); - NativeRebalancer = await ethers.getContractFactory("NativeRebalancer"); - }); - - it("MULTIPLIER", async function () { - expect(await rebalancer.MULTIPLIER()).to.be.eq(e18); - }); - - it("Inception token address", async function () { - expect(await rebalancer.inceptionToken()).to.be.eq(underlyingToken.address); - }); - - it("Lockbox address", async function () { - expect(await rebalancer.lockboxAddress()).to.be.eq(lockboxAddress); - }); - - it("Restaking pool address", async function () { - expect(await rebalancer.liqPool()).to.be.eq(inceptionVault.address); - }); - - it("Default adapter", async function () { - expect(await rebalancer.defaultAdapter()).to.be.eq(adapterL1.address); - }); - - it("Ratio feed address", async function () { - expect(await rebalancer.ratioFeed()).to.be.eq(ratioFeedL1.address); - }); - - it("Operator address", async function () { - expect(await rebalancer.operator()).to.be.eq(operator.address); - }); - - it("Owner", async function () { - expect(await rebalancer.owner()).to.be.eq(owner.address); - }); - - const args = [ - { - name: "invalid iToken address", - args: () => [ - ethers.ZeroAddress, - lockboxAddress, - inceptionVault.address, - adapterL1.address, - ratioFeedL1.address, - operator.address, - ], - }, - { - name: "invalid lockbox address", - args: () => [ - iToken.address, - ethers.ZeroAddress, - inceptionVault.address, - adapterL1.address, - ratioFeedL1.address, - operator.address, - ], - }, - { - name: "invalid restaking pool address", - args: () => [iToken.address, lockboxAddress, ethers.ZeroAddress, adapterL1.address, ratioFeedL1.address, operator.address], - }, - { - name: "invalid adapter address", - args: () => [iToken.address, lockboxAddress, inceptionVault.address, ethers.ZeroAddress, ratioFeedL1.address, operator.address], - }, - { - name: "invalid ratio feed address", - args: () => [iToken.address, lockboxAddress, inceptionVault.address, adapterL1.address, ethers.ZeroAddress, operator.address], - }, - { - name: "invalid operator address", - args: () => [iToken.address, lockboxAddress, inceptionVault.address, adapterL1.address, ratioFeedL1.address, ethers.ZeroAddress], - }, - ]; - - args.forEach(function (arg) { - it(`NativeRebalancer: ${arg.name}`, async function () { - const args = arg.args(); - await expect(upgrades.deployProxy(NativeRebalancer, args)).to.be.reverted; - }); - }); - - it("Synced Supply", async function () { - expect(await rebalancer.syncedSupply()).to.be.eq(0n); - }); - }); - - describe("Getters and setters", function () { - beforeEach(async function () { - await snapshot.restore(); - await rebalancer.connect(owner).addChainId(OPT_ID); - }); - - const setters = [ - { - name: "default adapter address", - setter: "setDefaultAdapter", - getter: "defaultAdapter", - event: "DefaultBridgeChanged", - }, - { - name: "Inception token address", - setter: "setInceptionToken", - getter: "inceptionToken", - event: "InceptionTokenChanged", - }, - { - name: "restaking pool address", - setter: "setLiqPool", - getter: "liqPool", - event: "LiqPoolChanged", - }, - { - name: "lockbox address", - setter: "setLockboxAddress", - getter: "lockboxAddress", - event: "LockboxChanged", - }, - { - name: "operator address", - setter: "setOperator", - getter: "operator", - event: "OperatorChanged", - }, - ]; - - setters.forEach(function (arg) { - it(`Set new ${arg.name}`, async function () { - const prevValue = await rebalancer[arg.getter](); - const newValue = ethers.Wallet.createRandom().address; - await expect(rebalancer[arg.setter](newValue)).to.emit(rebalancer, arg.event).withArgs(prevValue, newValue); - - expect(await rebalancer[arg.getter]()).to.be.eq(newValue); - }); - - it(`Reverts: ${arg.setter} when called by not an owner`, async function () { - const newValue = ethers.Wallet.createRandom().address; - await expect(rebalancer.connect(signer1)[arg.setter](newValue)) - .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") - .withArgs(signer1.address); - }); - - it(`Reverts: ${arg.setter} new value is 0 address`, async function () { - const newValue = ethers.ZeroAddress; - await expect(rebalancer[arg.setter](newValue)).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); - }); - }); - - it("addChainId owner can", async function () { - let chain = randomBI(4); - await expect(rebalancer.connect(owner).addChainId(chain)).to.emit(rebalancer, "ChainIdAdded").withArgs(chain); - expect(await rebalancer.chainIds(2n)).to.be.eq(chain); - }); - - it("addChainId skips if the chain has been added already", async function () { - let chain = randomBI(4); - await rebalancer.connect(owner).addChainId(chain); - await expect(rebalancer.connect(owner).addChainId(chain)).to.not.emit(rebalancer, "ChainIdAdded"); - }); - - it("addChainId reverts when called by not an owner", async function () { - await expect(rebalancer.connect(signer1).addChainId(randomBI(4))) - .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") - .withArgs(signer1.address); - }); - - it("deleteChainId operator can delete the 1st chain in the list", async function () { - const chain = ARB_ID; - await expect(rebalancer.connect(owner).deleteChainId(chain)).to.emit(rebalancer, "ChainIdDeleted").withArgs(chain, 0n); - expect(await rebalancer.chainIds(0n)).to.be.eq(OPT_ID); - await expect(rebalancer.chainIds(1n)).to.be.reverted; - }); - - it("deleteChainId owner can delete the last chain in the list", async function () { - const chain = OPT_ID; - await expect(rebalancer.connect(owner).deleteChainId(chain)).to.emit(rebalancer, "ChainIdDeleted").withArgs(chain, 1n); - expect(await rebalancer.chainIds(0n)).to.be.eq(ARB_ID); - await expect(rebalancer.chainIds(1n)).to.be.reverted; - }); - - it("deleteChainId reverts when chain does not exist", async function () { - let chain = randomBI(4); - await expect(rebalancer.connect(owner).deleteChainId(chain)) - .to.be.revertedWithCustomError(rebalancer, "ChainIdNotFound") - .withArgs(chain); - }); - - it("addChainId reverts when called by not an owner", async function () { - await expect(rebalancer.connect(signer1).deleteChainId(ARB_ID)) - .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") - .withArgs(signer1.address); - }); - - it("addAdapter for a new chain", async function () { - let adapter = ethers.Wallet.createRandom().address; - let chain = randomBI(4); - await expect(rebalancer.connect(owner).addAdapter(chain, adapter)) - .to.emit(rebalancer, "AdapterAdded") - .withArgs(chain, adapter) - .and.to.emit(rebalancer, "ChainIdAdded") - .withArgs(chain); - - const [adapterAddress, isDefault] = await rebalancer.getAdapter(chain); - expect(adapterAddress).to.be.eq(adapter); - expect(isDefault).to.be.false; - }); - - it("addAdapter for existing chain", async function () { - let adapter = ethers.Wallet.createRandom().address; - let chain = ARB_ID; - await expect(rebalancer.connect(owner).addAdapter(chain, adapter)) - .to.emit(rebalancer, "AdapterAdded") - .withArgs(chain, adapter) - .and.to.not.emit(rebalancer, "ChainIdAdded"); - - const [adapterAddress, isDefault] = await rebalancer.getAdapter(chain); - expect(adapterAddress).to.be.eq(adapter); - expect(isDefault).to.be.false; - }); - - it("addAdapter reverts when adapter address is 0", async function () { - let adapter = ethers.ZeroAddress; - let chain = randomBI(4); - await expect(rebalancer.connect(owner).addAdapter(chain, adapter)).to.be.revertedWithCustomError(rebalancer, "SettingZeroAddress"); - }); - - it("addAdapter reverts when called by not an owner", async function () { - let adapter = ethers.Wallet.createRandom().address; - let chain = randomBI(4); - await expect(rebalancer.connect(signer1).addAdapter(chain, adapter)) - .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") - .withArgs(signer1.address); - }); - - it("getAdapter returns default adapter if no other set", async function () { - const [adapterAddress, isDefault] = await rebalancer.getAdapter(ARB_ID); - expect(adapterAddress).to.be.eq(adapterL1.address); - expect(isDefault).to.be.true; - }); - - it("getTransactionData when there is no data for the chain", async function () { - let chain = randomBI(4); - const txData = await rebalancer.getTransactionData(chain); - expect(txData.timestamp).to.be.eq(0n); - expect(txData.ethBalance).to.be.eq(0n); - expect(txData.inceptionTokenBalance).to.be.eq(0n); - }); - - it("Enable and disable update", async function () { - expect(await rebalancer.updateable()).to.be.false; - - await expect(rebalancer.setUpdateable(true)).to.emit(rebalancer, "UpdateableChanged").withArgs(false, true); - expect(await rebalancer.updateable()).to.be.true; - - await expect(rebalancer.setUpdateable(false)).to.emit(rebalancer, "UpdateableChanged").withArgs(true, false); - expect(await rebalancer.updateable()).to.be.false; - }); - - it("setUpdateable reverts when called by not an owner", async function () { - await expect(rebalancer.connect(signer1).setUpdateable(true)) - .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") - .withArgs(signer1.address); - }); - - it("setSyncedSupply owner can", async function () { - const prevValue = await rebalancer.syncedSupply(); - const newValue = randomBI(18); - await expect(rebalancer.setSyncedSupply(newValue)).to.emit(rebalancer, "SyncedSupplyChanged").withArgs(prevValue, newValue); - - expect(await rebalancer.syncedSupply()).to.be.eq(newValue); - }); - - it("setSyncedSupply reverts when called by not an owner", async function () { - const newValue = randomBI(18); - await expect(rebalancer.connect(signer1).setSyncedSupply(newValue)) - .to.be.revertedWithCustomError(rebalancer, "OwnableUnauthorizedAccount") - .withArgs(signer1.address); - }); - }); - - describe("Update data", function () { - let currentArbAmount = 0n; - let currentArbSupply = 0n; - let currentOptAmount = 0n; - let currentOptSupply = 0n; - let initialLockBoxBalance; - - before(async function () { - await snapshot.restore(); - await rebalancer.connect(owner).addChainId(OPT_ID); - initialLockBoxBalance = await underlyingToken.balanceOf(lockboxAddress); - await rebalancer.setUpdateable(true); - }); - - it("Reverts when there is no data for one of the chains", async function () { - //Call when there is no data at all - await expect(rebalancer.updateTreasuryData()).to.revertedWithCustomError(rebalancer, "MissingOneOrMoreL2Transactions"); - - const block = await ethers.provider.getBlock("latest"); - const timestamp = block.timestamp; - const balance = randomBI(19); - const totalSupply = randomBI(19); - const message = encodePayload(timestamp, balance, totalSupply); - - //Send data for the 1 chain of 2 - const fees = await adapterFrax.quote(message, options); - await adapterFrax.sendDataL1(message, options, { value: fees }); - await expect(rebalancer.updateTreasuryData()) - .to.revertedWithCustomError(rebalancer, "MissingOneOrMoreL2Transactions") - .withArgs(OPT_ID); - }); - - const args = [ - { - name: "Increase amount and supply ARB and OPT", - arb: { - l2BalanceDiff: () => ethers.parseEther("1.5"), - l2TotalSupplyDiff: () => e18, - }, - opt: { - l2BalanceDiff: () => ethers.parseEther("1.5"), - l2TotalSupplyDiff: () => e18, - }, - }, - { - name: "Increase only underlyingToken supply ARB", - arb: { - l2BalanceDiff: () => e18, - l2TotalSupplyDiff: () => ethers.parseEther("1.5"), - }, - }, - { - name: "Increase only underlyingToken supply OPT", - opt: { - l2BalanceDiff: () => e18, - l2TotalSupplyDiff: () => ethers.parseEther("1.5"), - }, - }, - { - name: "Decrease amount and total supply ARB only", - arb: { - l2BalanceDiff: () => -ethers.parseEther("0.5"), - l2TotalSupplyDiff: () => -ethers.parseEther("0.5"), - }, - }, - { - name: "Decrease amount and total supply OPT only", - opt: { - l2BalanceDiff: () => -ethers.parseEther("0.5"), - l2TotalSupplyDiff: () => -ethers.parseEther("0.5"), - }, - }, - { - name: "Decrease only total supply ARB abd OPT", - arb: { - l2BalanceDiff: () => 0n, - l2TotalSupplyDiff: () => -e18, - }, - opt: { - l2BalanceDiff: () => 0n, - l2TotalSupplyDiff: () => -e18, - }, - }, - { - name: "Increase for ARB and decrease for OPT for the same amount", - arb: { - l2BalanceDiff: () => e18, - l2TotalSupplyDiff: () => e18, - }, - opt: { - l2BalanceDiff: () => -ethers.parseEther("0.5"), - l2TotalSupplyDiff: () => -ethers.parseEther("0.5"), - }, - }, - { - name: "Decrease to 0 ARB", - arb: { - l2BalanceDiff: () => -currentArbSupply, - l2TotalSupplyDiff: () => -currentArbSupply, - }, - }, - { - name: "Decrease to 0 OPT", - opt: { - l2BalanceDiff: () => -currentOptSupply, - l2TotalSupplyDiff: () => -currentOptSupply, - }, - }, - ]; - - args.forEach(function (arg) { - it(`updateTreasuryData: ${arg.name}`, async () => { - const block = await ethers.provider.getBlock("latest"); - const timestamp = block.timestamp; - let expectedTotalSupplyDiff = 0n; - if (arg.arb) { - expectedTotalSupplyDiff += arg.arb.l2TotalSupplyDiff(); - currentArbAmount += arg.arb.l2BalanceDiff(); - currentArbSupply += arg.arb.l2TotalSupplyDiff(); - await adapterFrax.sendData(timestamp, currentArbAmount, currentArbSupply); - } - if (arg.opt) { - expectedTotalSupplyDiff += arg.opt.l2TotalSupplyDiff(); - currentOptAmount += arg.opt.l2BalanceDiff(); - currentOptSupply += arg.opt.l2TotalSupplyDiff(); - await adapterOpt.sendData(timestamp, currentOptAmount, currentOptSupply); - } - const totalSupplyBefore = await underlyingToken.totalSupply(); - const lockboxBalanceBefore = await underlyingToken.balanceOf(lockboxAddress); - const syncedSupplyBefore = await rebalancer.syncedSupply(); - - let tx = await rebalancer.updateTreasuryData(); - await expect(tx) - .to.emit(rebalancer, "SyncedSupplyChanged") - .withArgs(syncedSupplyBefore, syncedSupplyBefore + expectedTotalSupplyDiff); - - const totalSupplyAfter = await underlyingToken.totalSupply(); - const lockboxBalanceAfter = await underlyingToken.balanceOf(lockboxAddress); - const syncedSupplyAfter = await rebalancer.syncedSupply(); - - console.log("Total supply diff:", (totalSupplyAfter - totalSupplyBefore).format()); - console.log("Lockbox balance diff:", (lockboxBalanceAfter - lockboxBalanceBefore).format()); - console.log("Synced supply diff:", (syncedSupplyAfter - syncedSupplyBefore).format()); - - expect(totalSupplyAfter - totalSupplyBefore).to.be.eq(expectedTotalSupplyDiff); - expect(lockboxBalanceAfter - lockboxBalanceBefore).to.be.eq(expectedTotalSupplyDiff); - expect(syncedSupplyAfter - syncedSupplyBefore).to.be.eq(expectedTotalSupplyDiff); - if (expectedTotalSupplyDiff > 0n) { - console.log("Mint"); - await expect(tx).emit(rebalancer, "TreasuryUpdateMint").withArgs(expectedTotalSupplyDiff); - } - if (expectedTotalSupplyDiff == 0n) { - console.log("No mint, no burn"); - await expect(tx).to.not.emit(rebalancer, "TreasuryUpdateMint").and.to.not.emit(rebalancer, "TreasuryUpdateBurn"); - } - if (expectedTotalSupplyDiff < 0n) { - console.log("Burn"); - await expect(tx).emit(rebalancer, "TreasuryUpdateBurn").withArgs(-expectedTotalSupplyDiff); - } - }); - }); - - it("Lockbox balance is the ame after all", async function () { - expect(await underlyingToken.balanceOf(lockboxAddress)).to.be.eq(initialLockBoxBalance); - }); - - it("updateTreasuryData reverts when total supply is the same", async function () { - const block = await ethers.provider.getBlock("latest"); - const timestamp = block.timestamp; - await adapterFrax.sendData(timestamp, e18, e18); - await adapterOpt.sendData(timestamp, e18, e18); - await rebalancer.updateTreasuryData(); - - await expect(rebalancer.updateTreasuryData()).to.be.revertedWithCustomError(rebalancer, "NoRebalancingRequired"); - }); - - it("Reverts when updateable is false", async function () { - await snapshot.restore(); - await expect(rebalancer.updateTreasuryData()).to.revertedWithCustomError(rebalancer, "TreasuryUpdatesPaused"); - }); - - it("underlyingToken leftover on rebalancer will be transferred to the lockbox", async function () { - await snapshot.restore(); - await rebalancer.setUpdateable(true); - const block = await ethers.provider.getBlock("latest"); - const timestamp = block.timestamp; - await inceptionVault.connect(signer1)["stake()"]({ value: 2n * e18 }); - - const totalSupplyBefore = await underlyingToken.totalSupply(); - const lockboxBalanceBefore = await underlyingToken.balanceOf(lockboxAddress); - //Report L2 info - const inEthChange = e18; - const supplyChange = e18; - await adapterFrax.sendData(timestamp, inEthChange, supplyChange); - await adapterOpt.sendData(timestamp, inEthChange, supplyChange); - - const amount = randomBI(17); - await underlyingToken.connect(signer1).transfer(rebalancer.address, amount); - - await expect(rebalancer.updateTreasuryData()).to.emit(rebalancer, "InceptionTokenDepositedToLockbox").withArgs(amount); - console.log(`Total supply: ${(await underlyingToken.totalSupply()).format()}`); - - const totalSupplyAfter = await underlyingToken.totalSupply(); - const lockboxBalanceAfter = await underlyingToken.balanceOf(lockboxAddress); - // expect(totalSupplyAfter - totalSupplyBefore).to.be.closeTo(supplyChange * 2n, 1n); - expect(totalSupplyAfter - totalSupplyBefore).to.be.closeTo(supplyChange, 1n); - // expect(lockboxBalanceAfter - lockboxBalanceBefore).to.be.closeTo(supplyChange * 2n + amount, 1n); - expect(lockboxBalanceAfter - lockboxBalanceBefore).to.be.closeTo(supplyChange + amount, 1n); - }); - }); - - describe("Stake", function () { - beforeEach(async function () { - await snapshot.restore(); - await rebalancer.connect(owner).addChainId(OPT_ID); - }); - - const args = [ - { - name: "Part of the balance", - balance: async () => await inceptionVault.availableToStake(), - amount: async (amount) => amount / 2n, - }, - { - name: "All balance", - balance: async () => await inceptionVault.availableToStake(), - amount: async (amount) => amount, - }, - { - name: "Restaking pool min amount", - balance: async () => await inceptionVault.availableToStake(), - amount: async () => await inceptionVault.getMinStake(), - }, - { - name: "Less than restaking pool min amount", - balance: async () => await inceptionVault.availableToStake(), - amount: async () => (await inceptionVault.getMinStake()) - 1n, - }, - ]; - - args.forEach(function (arg) { - it(`${arg.name}`, async function () { - const balance = await arg.balance(); - await signer1.sendTransaction({ value: balance, to: rebalancer.address }); - - const amount = await arg.amount(balance); - const shares = await underlyingToken.convertToShares(amount); - const lockboxInEthBalanceBefore = await underlyingToken.balanceOf(lockboxAddress); - - const tx = await rebalancer.connect(operator).stake(amount); - await expect(tx).emit(inceptionVault, "Received").withArgs(rebalancer.address, amount); - - const lockboxInEthBalanceAfter = await underlyingToken.balanceOf(lockboxAddress); - console.log("Signer eth balance after: ", await ethers.provider.getBalance(signer1.address)); - console.log("Restaking pool eth balance: ", await ethers.provider.getBalance(inceptionVault.address)); - console.log("lockbox underlyingToken balance: ", await underlyingToken.balanceOf(lockboxAddress)); - - //No new shares minted - expect(lockboxInEthBalanceAfter).to.be.eq(lockboxInEthBalanceBefore); - expect(await underlyingToken.balanceOf(rebalancer.address)).to.be.eq(0n); - }); - }); - - it("Reverts when amount > available to stake from restaking pool", async function () { - const amount = (await inceptionVault.availableToStake()) + 1n; - await signer1.sendTransaction({ value: amount, to: rebalancer.address }); - await expect(rebalancer.connect(operator).stake(amount)).to.revertedWithCustomError(rebalancer, "StakeAmountExceedsMaxTVL"); - }); - - it("Reverts when amount > eth balance", async function () { - const amount = (await inceptionVault.availableToStake()) / 2n; - await signer1.sendTransaction({ value: amount, to: rebalancer.address }); - await expect(rebalancer.connect(operator).stake(amount + 1n)).to.revertedWithCustomError( - rebalancer, - "StakeAmountExceedsEthBalance" - ); - }); - - it.skip("Reverts when amount < restaking pool min stake", async function () { - const amount = (await inceptionVault.getMinStake()) - 1n; - await signer1.sendTransaction({ value: amount, to: rebalancer.address }); - await expect(rebalancer.connect(operator).stake(amount)).to.revertedWithCustomError(inceptionVault, "PoolStakeAmLessThanMin"); - }); - - it("Reverts when called by not an operator", async function () { - const amount = (await inceptionVault.availableToStake()) / 2n; - await signer1.sendTransaction({ value: amount, to: rebalancer.address }); - await expect(rebalancer.connect(signer1).stake(amount)).to.revertedWithCustomError(rebalancer, "OnlyOperator"); - }); - }); - - describe("sendEthToL2", function () { - beforeEach(async function () { - await snapshot.restore(); - const balance = await inceptionVault.availableToStake(); - await signer1.sendTransaction({ value: balance, to: rebalancer.address }); - }); - - const args = [ - { - name: "Part of the balance to ARB", - amount: async (amount) => amount / 2n, - chainId: ARB_ID, - adapter: () => adapterFrax, - sender: () => operator, - }, - { - name: "Part of the balance to ARB by owner", - amount: async (amount) => amount / 2n, - chainId: ARB_ID, - adapter: () => adapterFrax, - sender: () => owner, - }, - { - name: "Part of the balance to OPT", - amount: async (amount) => amount / 2n, - chainId: OPT_ID, - adapter: () => adapterOpt, - sender: () => operator, - }, - { - name: "All balance to ARB", - amount: async (amount) => amount, - chainId: ARB_ID, - adapter: () => adapterFrax, - sender: () => operator, - }, - { - name: "All balance to OPT", - amount: async (amount) => amount, - chainId: OPT_ID, - adapter: () => adapterOpt, - sender: () => operator, - }, - ]; - - args.forEach(function (arg) { - it(`${arg.name}`, async function () { - const balance = await ethers.provider.getBalance(rebalancer.address); - const amount = await arg.amount(balance); - - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const fees = await rebalancer.quoteSendEthToL2(arg.chainId, options); - const tx = await rebalancer.connect(arg.sender()).sendEthToL2(arg.chainId, amount, options, { value: fees }); - await expect(tx).to.emit(adapterL1, "CrossChainMessageSent"); - await expect(tx).to.changeEtherBalance(omniVault, amount); - await expect(tx).to.changeEtherBalance(rebalancer, -amount); - await expect(tx).to.changeEtherBalance(arg.sender(), -fees, { includeFee: false }); - }); - }); - - it("Reverts when amount > eth balance", async function () { - const amount = (await ethers.provider.getBalance(rebalancer.address)) + 1n; - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const fees = await rebalancer.quoteSendEthToL2(ARB_ID, options); - await expect(rebalancer.connect(operator).sendEthToL2(ARB_ID, amount, options, { value: fees })).to.revertedWithCustomError( - rebalancer, - "SendAmountExceedsEthBalance" - ); - }); - - it("Reverts when called by not an operator", async function () { - const amount = await ethers.provider.getBalance(rebalancer.address); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const fees = await rebalancer.quoteSendEthToL2(ARB_ID, options); - await expect(rebalancer.connect(signer1).sendEthToL2(ARB_ID, amount, options, { value: fees })).to.revertedWithCustomError( - rebalancer, - "OnlyOperator" - ); - }); - - it("Reverts when there is no adapter for the chain", async function () { - const amount = await ethers.provider.getBalance(rebalancer.address); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const fees = await rebalancer.quoteSendEthToL2(ARB_ID, options); - await expect(rebalancer.connect(operator).sendEthToL2(randomBI(8), amount, options, { value: fees })).to.revertedWithCustomError( - adapterFrax, - "NoPeer" - ); - }); - }); - - describe("handleL2Info", function () { - it("handleL2Info reverts when called by not an adapter", async function () { - const block = await ethers.provider.getBlock("latest"); - const chainId = ARB_ID; - const timestamp = block.timestamp; - const balance = e18; - const totalSupply = e18; - - await expect(rebalancer.connect(owner).handleL2Info(chainId, timestamp, balance, totalSupply)).to.be.revertedWithCustomError( - rebalancer, - "OnlyAdapter" - ); - }); - }); - }); - - describe("Adapters", function () { - before(async function () { - await snapshot.restore(); - }); - - describe("Deployment", function () { - let LZCrossChainAdapterL1; - let LZCrossChainAdapterL2; - before(async function () { - LZCrossChainAdapterL1 = await ethers.getContractFactory("LZCrossChainAdapterL1"); - LZCrossChainAdapterL2 = await ethers.getContractFactory("LZCrossChainAdapterL2"); - }); - - const argsL1 = [ - { - name: "invalid endpoint address", - args: () => [ethers.ZeroAddress, owner.address, eIds, chainIds], - }, - { - name: "invalid delegator address", - args: () => [ethEndpoint.address, ethers.ZeroAddress, eIds, chainIds], - }, - { - name: "Id arrays lengths do not match", - args: () => [ethEndpoint.address, owner.address, [ARB_EID], [ARB_ID, OPT_ID]], - }, - ]; - - argsL1.forEach(function (arg) { - it(`LZCrossChainAdapterL1: ${arg.name}`, async function () { - const args = arg.args(); - await expect(upgrades.deployProxy(LZCrossChainAdapterL1, args)).to.be.reverted; - }); - }); - - const argsL2 = [ - { - name: "invalid endpoint address", - args: () => [ethers.ZeroAddress, owner.address, ETH_ID, eIds, chainIds], - }, - { - name: "invalid delegator address", - args: () => [ethEndpoint.address, ethers.ZeroAddress, ETH_ID, eIds, chainIds], - }, - { - name: "Id arrays lengths do not match", - args: () => [ethEndpoint.address, owner.address, ETH_ID, [ARB_EID], [ARB_ID, OPT_ID]], - }, - ]; - - argsL2.forEach(function (arg) { - it(`LZCrossChainAdapterL2: ${arg.name}`, async function () { - const args = arg.args(); - await expect(upgrades.deployProxy(LZCrossChainAdapterL2, args)).to.be.reverted; - }); - }); - }); - - //=== Getters and setters - const adapters = [ - { - name: "layer1", - adapter: () => adapterL1, - endpoint: () => ethEndpoint, - }, - { - name: "layer2", - adapter: () => adapterFrax, - endpoint: () => arbEndpoint, - }, - ]; - adapters.forEach(function (adapterArg) { - let adapter; - describe(`Getters and setters ${adapterArg.name}`, function () { - beforeEach(async function () { - await snapshot.restore(); - adapter = adapterArg.adapter(); - }); - - const setters = [ - { - name: "receiver address", - setter: "setTargetReceiver", - getter: "targetReceiver", - event: "TargetReceiverChanged", - }, - ]; - - setters.forEach(function (setterArg) { - it(`Set new ${setterArg.name}`, async function () { - const prevValue = await adapter[setterArg.getter](); - const newValue = ethers.Wallet.createRandom().address; - - await expect(adapter[setterArg.setter](newValue)).to.emit(adapter, setterArg.event).withArgs(prevValue, newValue); - expect(await adapter[setterArg.getter]()).to.be.eq(newValue); - }); - - it(`Reverts: ${setterArg.setter} when called by not an owner`, async function () { - const newValue = ethers.Wallet.createRandom().address; - await expect(adapter.connect(signer1)[setterArg.setter](newValue)).to.be.revertedWithCustomError( - adapter, - "OwnableUnauthorizedAccount" - ); - }); - - it(`Reverts: ${setterArg.setter} new value is 0 address`, async function () { - const newValue = ethers.ZeroAddress; - await expect(adapter[setterArg.setter](newValue)).to.be.revertedWithCustomError(adapter, "SettingZeroAddress"); - }); - }); - - it("setPeer sets target address by chain", async function () { - const eid = randomBI(8); - const target = ethers.Wallet.createRandom(); - const peer = ethers.zeroPadValue(target.address, 32); - - await expect(adapter.setPeer(eid, peer)).to.emit(adapter, "PeerSet").withArgs(eid, peer); - expect(await adapter.peers(eid)).to.be.eq(peer); - }); - - it("setPeer reverts when called by not an owner", async function () { - const eid = randomBI(8); - const target = ethers.Wallet.createRandom(); - const peer = ethers.zeroPadValue(target.address, 32); - - await expect(adapter.connect(signer1).setPeer(eid, peer)).to.be.revertedWithCustomError(adapter, "OwnableUnauthorizedAccount"); - }); - - it("setChainIdFromEid maps chaind id by eid", async function () { - const eid = randomBI(8); - const chainId = randomBI(8); - - await expect(adapter.setChainIdFromEid(eid, chainId)).to.emit(adapter, "ChainIdAdded").withArgs(chainId); - expect(await adapter.getChainIdFromEid(eid)).to.be.eq(chainId); - expect(await adapter.getEidFromChainId(chainId)).to.be.eq(eid); - }); - - it("setChainIdFromEid reverts when called by not an owner", async function () { - const eid = randomBI(8); - const chainId = randomBI(8); - - await expect(adapter.connect(signer1).setChainIdFromEid(eid, chainId)).to.be.revertedWithCustomError( - adapter, - "OwnableUnauthorizedAccount" - ); - }); - - it("Owner", async function () { - expect(await adapter.owner()).to.be.eq(owner.address); - }); - - it("Transfer ownership in two steps", async function () { - // Generate a new owner address and connect it to the provider - const newOwner = ethers.Wallet.createRandom().connect(ethers.provider); - - // Fund newOwner with some ETH from the current owner - await owner.sendTransaction({ - to: newOwner.address, - value: ethers.parseEther("1"), // Transfer 1 ETH for gas fees - }); - - // Initiate ownership transfer (step 1) - await expect(adapter.transferOwnership(newOwner.address)) - .to.emit(adapter, "OwnershipTransferStarted") - .withArgs(owner.address, newOwner.address); - - // Ensure that the new owner is set as the pending owner - expect(await adapter.pendingOwner()).to.equal(newOwner.address); - - // Simulate the new owner accepting the ownership (step 2) - await expect(adapter.connect(newOwner).acceptOwnership()) - .to.emit(adapter, "OwnershipTransferred") - .withArgs(owner.address, newOwner.address); - - // Check that the ownership transfer is complete - expect(await adapter.owner()).to.equal(newOwner.address); - }); - - it("Endpoint", async function () { - const endpoint = adapterArg.endpoint(); - expect(await adapter.endpoint()).to.be.eq(endpoint.address); - }); - }); - }); - - //=== Send eth between layers - const directions = [ - { - name: "L2 -> L1", - fromAdapter: () => adapterFrax, - fromEndpoint: () => arbEndpoint, - fromChainID: ARB_ID, - fromChainEID: ARB_EID, - toAdapter: () => adapterL1, - toEndpoint: () => ethEndpoint, - toChainID: ETH_ID, - target: () => rebalancer, - maliciousAdapter: () => maliciousAdapterL2, - }, - { - name: "L1 -> L2", - fromAdapter: () => adapterL1, - fromEndpoint: () => ethEndpoint, - fromChainID: ETH_ID, - fromChainEID: ETH_EID, - toAdapter: () => adapterFrax, - toEndpoint: () => arbEndpoint, - toChainID: ARB_ID, - target: () => omniVault, - maliciousAdapter: () => maliciousAdapterL1, - }, - ]; - directions.forEach(function (direction) { - describe(`Send eth ${direction.name}`, function () { - let fromAdapter; - let fromEndpoint; - let toAdapter; - let toEndpoint; - let target; - - before(async function () { - await snapshot.restore(); - fromAdapter = direction.fromAdapter(); - fromEndpoint = direction.fromEndpoint(); - toAdapter = direction.toAdapter(); - toEndpoint = direction.toEndpoint(); - target = direction.target(); - }); - - const args = [ - { - name: "1eth", - amount: async () => e18, - }, - { - name: "Random amount ~ 1e17", - amount: async () => randomBI(17), - }, - { - name: "1wei", - amount: async () => 1n, - }, - { - name: "Restaking pool min amount", - amount: async () => await inceptionVault.getMinStake(), - }, - { - name: "Greater than available to stake", - amount: async () => (await inceptionVault.availableToStake()) + 1n, - }, - ]; - - args.forEach(function (arg) { - it(arg.name, async function () { - const amount = await arg.amount(); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const amountWithFees = await fromAdapter.quoteSendEth(direction.toChainID, options); - const fee = amountWithFees - amount; - const tx = await fromAdapter.connect(owner).sendEthCrossChain(direction.toChainID, options, { value: amountWithFees }); - - await expect(tx).emit(fromAdapter, "CrossChainMessageSent").withArgs(direction.toChainID, amount, "0x", fee); - await expect(tx).emit(toAdapter, "CrossChainEthDeposit").withArgs(direction.fromChainID, amount); - if (direction.toChainID === ETH_ID) { - await expect(tx).emit(target, "ETHReceived").withArgs(toAdapter.address, amount); - } - await expect(tx).to.changeEtherBalance(target.address, amount); - await expect(tx).to.changeEtherBalance(owner.address, -amountWithFees, { includeFee: false }); - }); - }); - - it(`Send 0th ${direction.name}`, async function () { - const amount = 0n; - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const amountWithFees = await fromAdapter.quoteSendEth(direction.toChainID, options); - const tx = await fromAdapter.connect(owner).sendEthCrossChain(direction.toChainID, options, { value: amountWithFees }); - - await expect(tx).emit(fromAdapter, "CrossChainMessageSent").withArgs(direction.toChainID, 0n, "0x", 3202200000000000n); - await expect(tx).not.emit(toAdapter, "CrossChainEthDeposit"); - await expect(tx).not.emit(rebalancer, "ETHReceived"); - await expect(tx).to.changeEtherBalance(target.address, amount); - await expect(tx).to.changeEtherBalance(owner.address, -amountWithFees, { includeFee: false }); - }); - - it("sendEthCrossChain reverts when called by not a target", async function () { - await snapshot.restore(); - - const amount = randomBI(18); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const fees = await fromAdapter.quoteSendEth(direction.toChainID, options); - await expect(fromAdapter.connect(signer1).sendEthCrossChain(direction.toChainID, options, { value: fees })) - .to.revertedWithCustomError(toAdapter, "NotTargetReceiver") - .withArgs(signer1.address); - }); - - it("sendEthCrossChain reverts when caller is not endpoint", async function () { - await snapshot.restore(); - const maliciousEndpoint = await ethers.deployContract("EndpointMock", [direction.toChainID]); - maliciousEndpoint.address = await maliciousEndpoint.getAddress(); - await fromEndpoint.setDestLzEndpoint(toAdapter.address, maliciousEndpoint.address); - - const amount = randomBI(18); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const fees = await fromAdapter.quoteSendEth(direction.toChainID, options); - - await expect(fromAdapter.sendEthCrossChain(direction.toChainID, options, { value: fees })) - .to.revertedWithCustomError(toAdapter, "OnlyEndpoint") - .withArgs(maliciousEndpoint.address); - }); - - it("sendEthCrossChain reverts when sent from unknown adapter", async function () { - await snapshot.restore(); - const maliciousAdapter = direction.maliciousAdapter(); - - const amount = randomBI(18); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const fees = await maliciousAdapter.quoteSendEth(direction.toChainID, options); - await expect(maliciousAdapter.sendEthCrossChain(direction.toChainID, options, { value: fees })) - .to.be.revertedWithCustomError(toAdapter, "OnlyPeer") - .withArgs(direction.fromChainEID, ethers.zeroPadValue(maliciousAdapter.address, 32)); - }); - - it("sendEthCrossChain reverts when chain is unknown", async function () { - const amount = randomBI(18); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const amountWithFees = await fromAdapter.quoteSendEth(direction.toChainID, options); - await expect( - fromAdapter.connect(owner).sendEthCrossChain(randomBI(4), options, { value: amountWithFees }) - ).to.be.revertedWithCustomError(fromAdapter, "NoPeer"); - }); - - it("sendEthCrossChain reverts there is not enough fee", async function () { - const amount = randomBI(18); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const amountWithFees = await fromAdapter.quoteSendEth(direction.toChainID, options); - await expect( - fromAdapter.connect(owner).sendEthCrossChain(direction.toChainID, options, { value: amountWithFees - 1n }) - ).to.be.revertedWith("LayerZeroMock: not enough native for fees"); - }); - - it("quoteSendEth reverts when chain is unknown", async function () { - const chain = randomBI(4); - const amount = randomBI(18); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - await expect(fromAdapter.quoteSendEth(chain, options)) - .to.be.revertedWithCustomError(fromAdapter, "NoDestEidFoundForChainId") - .withArgs(chain); - }); - - it("quoteSendEth reverts when options value is invalid", async function () { - await expect(fromAdapter.quoteSendEth(direction.toChainID, "0x")) - .to.be.revertedWithCustomError(fromEndpoint, "LZ_ULN_InvalidWorkerOptions") - .withArgs(0n); - }); - }); - }); - - describe("sendDataL1 receiveL2Info", function () { - let lastHandleTime; - before(async function () { - await snapshot.restore(); - }); - - it("sendDataL1 reverts when called by not a target", async function () { - const block = await ethers.provider.getBlock("latest"); - const timestamp = block.timestamp; - const balance = randomBI(19); - const totalSupply = randomBI(19); - const message = encodePayload(timestamp, balance, totalSupply); - const fees = await adapterFrax.quote(message, options); - await expect(adapterFrax.connect(signer1).sendDataL1(message, options, { value: fees })) - .to.be.revertedWithCustomError(adapterFrax, "NotTargetReceiver") - .withArgs(signer1.address); - }); - - it("receiveL2Info", async () => { - const block = await ethers.provider.getBlock("latest"); - lastHandleTime = block.timestamp - 1000; - const _balance = 100; - const _totalSupply = 100; - - await expect(adapterFrax.sendData(lastHandleTime, _balance, _totalSupply)) - .to.emit(rebalancer, "L2InfoReceived") - .withArgs(ARB_ID, lastHandleTime, _balance, _totalSupply); - - const chainDataAfter = await rebalancer.getTransactionData(ARB_ID); - expect(chainDataAfter.timestamp).to.be.eq(lastHandleTime); - expect(chainDataAfter.ethBalance).to.be.eq(_balance); - expect(chainDataAfter.inceptionTokenBalance).to.be.eq(_totalSupply); - }); - - it("Reverts when there is a message with this timestamp", async function () { - const balance = 200; - const totalSupply = 200; - - await expect(adapterFrax.sendData(lastHandleTime, balance, totalSupply)) - .to.revertedWithCustomError(rebalancer, "TimeBeforePrevRecord") - .withArgs(lastHandleTime); - }); - - it("Reverts when timestamp is in the future", async function () { - const block = await ethers.provider.getBlock("latest"); - const timestamp = block.timestamp + 100; - const balance = 100; - const totalSupply = 100; - - await expect(adapterFrax.sendData(timestamp, balance, totalSupply)) - .to.revertedWithCustomError(rebalancer, "TimeCannotBeInFuture") - .withArgs(timestamp); - }); - - it("Reverts when caller is not endpoint", async function () { - const maliciousEndpoint = await ethers.deployContract("EndpointMock", [ETH_EID]); - maliciousEndpoint.address = await maliciousEndpoint.getAddress(); - await arbEndpoint.setDestLzEndpoint(adapterL1.address, maliciousEndpoint.address); - - const block = await ethers.provider.getBlock("latest"); - const timestamp = block.timestamp - 1; - const balance = 300; - const totalSupply = 300; - - await expect(adapterFrax.sendData(timestamp, balance, totalSupply)) - .to.revertedWithCustomError(adapterL1, "OnlyEndpoint") - .withArgs(maliciousEndpoint.address); - }); - - it("Reverts when l2 sender is unknown", async function () { - await snapshot.restore(); - const block = await ethers.provider.getBlock("latest"); - const timestamp = block.timestamp + 100; - const balance = 100; - const totalSupply = 100; - const message = encodePayload(timestamp, balance, totalSupply); - - const fees = await maliciousAdapterL2.quote(message, options); - await expect(maliciousAdapterL2.sendDataL1(message, options, { value: fees })) - .to.be.revertedWithCustomError(adapterL1, "OnlyPeer") - .withArgs(ARB_EID, ethers.zeroPadValue(maliciousAdapterL2.address, 32)); - }); - - it("quoteSendEth reverts when options value is invalid", async function () { - await snapshot.restore(); - const block = await ethers.provider.getBlock("latest"); - const timestamp = block.timestamp + 100; - const balance = 100; - const totalSupply = 100; - const message = encodePayload(timestamp, balance, totalSupply); - - await expect(adapterFrax.quote(message, "0x")) - .to.be.revertedWithCustomError(arbEndpoint, "LZ_ULN_InvalidWorkerOptions") - .withArgs(0n); - }); - }); - - describe("Recover funds", function () { - it("recoverFunds owner can send funds from adapter to the target", async function () { - const amount = randomBI(18); - await signer1.sendTransaction({ value: amount, to: adapterL1.address }); - expect(await ethers.provider.getBalance(adapterL1.address)).to.be.eq(amount); - - const tx = await adapterL1.connect(owner).recoverFunds(); - await expect(tx).to.emit(adapterL1, "RecoverFundsInitiated").withArgs(amount); - await expect(tx).changeEtherBalance(adapterL1, -amount); - await expect(tx).changeEtherBalance(rebalancer, amount); - }); - - it("recoverFunds reverts when called by not an owner", async function () { - const amount = randomBI(18); - await signer1.sendTransaction({ value: amount, to: adapterL1.address }); - expect(await ethers.provider.getBalance(adapterL1.address)).to.be.eq(amount); - - await expect(adapterL1.connect(signer1).recoverFunds()).to.revertedWithCustomError(adapterL1, "OwnableUnauthorizedAccount"); - }); - }); - }); - - describe("OmniVault", function () { - describe("Base flow", function () { - let deposited, freeBalance, depositFees; - - before(async function () { - await snapshot.restore(); - TARGET = toWei(10); - await omniVault.setTargetFlashCapacity(TARGET); - }); - - it("Initial ratio", async function () { - const ratio = await omniVault.ratio(); - console.log(`Initial ratio:\t\t${ratio.format()}`); - }); - - it("Deposit to vault", async function () { - freeBalance = randomBI(19); - deposited = TARGET + freeBalance; - const expectedShares = (deposited * e18) / (await omniVault.ratio()); - const tx = await omniVault.connect(signer1).deposit(signer1.address, { value: deposited }); - const receipt = await tx.wait(); - const events = receipt?.logs.filter((e) => e.eventName === "Deposit"); - expect(events.length).to.be.eq(1); - expect(events[0].args["sender"]).to.be.eq(signer1.address); - expect(events[0].args["receiver"]).to.be.eq(signer1.address); - expect(events[0].args["amount"]).to.be.eq(deposited); - expect(events[0].args["iShares"]).to.be.closeTo(expectedShares, 1n); - expect(receipt?.logs.find((l) => l.eventName === "DepositBonus")).to.be.undefined; //Because there is no replenish rewards has been collected yet - console.log(`Ratio after:\t\t${(await omniVault.ratio()).format()}`); - - expect(await iToken.balanceOf(signer1.address)).to.be.closeTo(expectedShares, 1n); - expect(await omniVault.totalAssets()).to.be.eq(deposited); - expect(await omniVault.getFlashCapacity()).to.be.eq(deposited); - expect(await omniVault.ratio()).to.be.eq(e18); - }); - - it("Flash withdraw all", async function () { - const sharesBefore = await iToken.balanceOf(signer1); - const senderBalanceBefore = await ethers.provider.getBalance(signer1); - const receiver = signer2; - const receiverBalanceBefore = await ethers.provider.getBalance(receiver); - const treasuryBalanceBefore = await ethers.provider.getBalance(treasury); - const totalAssetsBefore = await omniVault.totalAssets(); - const flashCapacityBefore = await omniVault.getFlashCapacity(); - console.log(`Flash capacity before:\t${flashCapacityBefore.format()}`); - - const amount = await omniVault.convertToAssets(sharesBefore); - const expectedFee = await omniVault.calculateFlashWithdrawFee(amount); - console.log(`Amount:\t\t\t\t\t${amount.format()}`); - console.log(`Shares:\t\t\t\t\t${sharesBefore.format()}`); - console.log(`Expected fee:\t\t\t${expectedFee.format()}`); - - let tx = await omniVault.connect(signer1).flashWithdraw(sharesBefore, receiver.address); - const receipt = await tx.wait(); - const txFee = BigInt(receipt.gasUsed * receipt.gasPrice); - const withdrawEvent = receipt?.logs.filter((e) => e.eventName === "FlashWithdraw"); - expect(withdrawEvent.length).to.be.eq(1); - expect(withdrawEvent[0].args["sender"]).to.be.eq(signer1.address); - expect(withdrawEvent[0].args["receiver"]).to.be.eq(receiver.address); - expect(withdrawEvent[0].args["owner"]).to.be.eq(signer1.address); - expect(withdrawEvent[0].args["amount"]).to.be.closeTo(amount - expectedFee, 1n); - expect(withdrawEvent[0].args["iShares"]).to.be.closeTo(sharesBefore, 1n); - expect(withdrawEvent[0].args["fee"]).to.be.closeTo(expectedFee, 1n); - const collectedFees = withdrawEvent[0].args["fee"]; - depositFees = collectedFees / 2n; - - const sharesAfter = await iToken.balanceOf(signer1); - const senderBalanceAfter = await ethers.provider.getBalance(signer1); - const receiverBalanceAfter = await ethers.provider.getBalance(receiver); - const treasuryBalanceAfter = await ethers.provider.getBalance(treasury); - const totalAssetsAfter = await omniVault.totalAssets(); - const flashCapacityAfter = await omniVault.getFlashCapacity(); - console.log(`Shares balance diff:\t${(sharesBefore - sharesAfter).format()}`); - console.log(`Sender balance diff:\t${(senderBalanceBefore - senderBalanceAfter).format()}`); - console.log(`Receiver balance diff:\t${(receiverBalanceAfter - receiverBalanceBefore).format()}`); - console.log(`Treasury balance diff:\t${(treasuryBalanceAfter - treasuryBalanceBefore).format()}`); - console.log(`Total assets diff:\t\t${(totalAssetsBefore - totalAssetsAfter).format()}`); - console.log(`Flash capacity diff:\t${(flashCapacityBefore - flashCapacityAfter).format()}`); - console.log(`Fee collected:\t\t\t${collectedFees.format()}`); - - expect(sharesBefore - sharesAfter).to.be.eq(sharesBefore); - expect(senderBalanceBefore - senderBalanceAfter).to.be.closeTo(txFee, 1n); - expect(receiverBalanceAfter - receiverBalanceBefore).to.be.closeTo(amount - expectedFee, 1n); - expect(treasuryBalanceAfter - treasuryBalanceBefore).to.be.closeTo(expectedFee / 2n, 1n); - expect(totalAssetsBefore - totalAssetsAfter).to.be.closeTo(amount - expectedFee / 2n, 1n); - expect(flashCapacityBefore - flashCapacityAfter).to.be.closeTo(amount, 1n); - }); - }); - - describe("Deposit", function () { - let TARGET; - - beforeEach(async function () { - await snapshot.restore(); - TARGET = toWei(10); - await omniVault.setTargetFlashCapacity(TARGET); - }); - - const args = [ - { - name: "1st time < TARGET", - predepositAmount: () => 0n, - amount: async () => TARGET / 2n, - withdrawFeeFrom: () => 0n, - receiver: () => signer1.address, - }, - { - name: "1st time > TARGET", - predepositAmount: () => 0n, - amount: async () => randomBIMax(TARGET), - withdrawFeeFrom: () => 0n, - receiver: () => signer1.address, - }, - { - name: "more wo rewards", - predepositAmount: () => TARGET / 3n, - amount: async () => randomBIMax(TARGET / 3n), - withdrawFeeFrom: () => 0n, - receiver: () => signer1.address, - }, - { - name: "more with rewards", - predepositAmount: () => TARGET / 3n, - amount: async () => randomBIMax(TARGET / 3n), - withdrawFeeFrom: () => TARGET, - receiver: () => signer1.address, - }, - { - name: "min amount", - predepositAmount: () => 0n, - amount: async () => await omniVault.minAmount(), - withdrawFeeFrom: () => TARGET, - receiver: () => signer1.address, - }, - { - name: "and redeem all rewards", - predepositAmount: () => TARGET / 10n, - amount: async () => (TARGET * 8n) / 10n, - withdrawFeeFrom: () => TARGET / 10n, - receiver: () => signer1.address, - }, - { - name: "up to target cap and above", - predepositAmount: () => TARGET / 10n, - amount: async () => TARGET, - withdrawFeeFrom: () => TARGET / 2n, - receiver: () => signer1.address, - }, - { - name: "above target cap", - predepositAmount: () => TARGET + 1n, - amount: async () => randomBI(19), - withdrawFeeFrom: () => TARGET, - receiver: () => signer1.address, - }, - { - name: "to another address", - predepositAmount: () => TARGET / 10n, - amount: async () => TARGET, - withdrawFeeFrom: () => TARGET, - receiver: () => signer2.address, - }, - - //Ratio < 1 - { - name: "more wo rewards when ratio < 1", - predepositAmount: () => TARGET / 3n, - amount: async () => randomBIMax(TARGET / 3n), - withdrawFeeFrom: () => 0n, - ratio: toWei(0.9), - receiver: () => signer1.address, - }, - { - name: "more with rewards when ratio < 1", - predepositAmount: () => TARGET / 3n, - amount: async () => randomBIMax(TARGET / 3n), - withdrawFeeFrom: () => TARGET, - ratio: toWei(0.9), - receiver: () => signer1.address, - }, - { - name: "min amount when ratio < 1", - predepositAmount: () => 0n, - amount: async () => await omniVault.minAmount(), - withdrawFeeFrom: () => TARGET, - ratio: toWei(0.9), - receiver: () => signer1.address, - }, - ]; - - args.forEach(function (arg) { - it(`Deposit ${arg.name}`, async function () { - //Predeposit - const predepositAmount = arg.predepositAmount(); - if (predepositAmount > 0n) { - const randomAddress = ethers.Wallet.createRandom().address; - await omniVault.connect(signer3).deposit(randomAddress, { value: predepositAmount }); - expect(await omniVault.getFlashCapacity()).to.be.closeTo(predepositAmount, 2n); - } - - //Add rewards - let availableBonus = await addReplenishBonusToOmniVault(arg.withdrawFeeFrom()); - - if (arg.ratio) { - await ratioFeedL2.updateRatioBatch([await iToken.getAddress()], [arg.ratio]); - console.log(`Ratio updated:\t\t\t${(await omniVault.ratio()).format()}`); - } - - const receiver = arg.receiver(); - const stakerSharesBefore = await iToken.balanceOf(receiver); - const totalAssetsBefore = await omniVault.totalAssets(); - const flashCapacityBefore = await omniVault.getFlashCapacity(); - console.log(`Flash capacity before:\t${flashCapacityBefore.format()}`); - - const amount = await arg.amount(); - console.log(`Amount:\t\t\t\t\t${amount.format()}`); - const calculatedBonus = await omniVault.calculateDepositBonus(amount); - console.log(`Preview bonus:\t\t\t${calculatedBonus.format()}`); - console.log(`Available bonus:\t\t${availableBonus.format()}`); - const expectedBonus = calculatedBonus <= availableBonus ? calculatedBonus : availableBonus; - availableBonus -= expectedBonus; - console.log(`Expected bonus:\t\t\t${expectedBonus.format()}`); - const convertedShares = await omniVault.convertToShares(amount + expectedBonus); - const expectedShares = ((amount + expectedBonus) * (await omniVault.ratio())) / e18; - - const tx = await omniVault.connect(signer1).deposit(receiver, { value: amount }); - const receipt = await tx.wait(); - const depositEvent = receipt?.logs.filter((e) => e.eventName === "Deposit"); - expect(depositEvent.length).to.be.eq(1); - expect(depositEvent[0].args["sender"]).to.be.eq(signer1.address); - expect(depositEvent[0].args["receiver"]).to.be.eq(receiver); - expect(depositEvent[0].args["amount"]).to.be.eq(amount); - expect(depositEvent[0].args["iShares"]).to.be.closeTo(convertedShares, 1n); - //DepositBonus event - const actualBonus = receipt?.logs.find((l) => l.eventName === "DepositBonus")?.args.amount || 0n; - console.log(`Actual bonus:\t\t\t${actualBonus.format()}`); - - const stakerSharesAfter = await iToken.balanceOf(receiver); - const totalAssetsAfter = await omniVault.totalAssets(); - const flashCapacityAfter = await omniVault.getFlashCapacity(); - console.log(`Bonus after:\t\t\t${availableBonus.format()}`); - - expect(stakerSharesAfter - stakerSharesBefore).to.be.closeTo(expectedShares, 1n); - expect(stakerSharesAfter - stakerSharesBefore).to.be.closeTo(convertedShares, 1n); - expect(totalAssetsAfter - totalAssetsBefore).to.be.eq(amount); //omniVault balance is the same - expect(actualBonus).to.be.closeTo(expectedBonus, 1n); - expect(flashCapacityAfter - flashCapacityBefore).to.be.closeTo(amount + expectedBonus, 1n); //rewarded bonus goes to flash capacity - }); - it(`Deposit with referral code ${arg.name}`, async function () { - //Predeposit - const predepositAmount = arg.predepositAmount(); - if (predepositAmount > 0n) { - const randomAddress = ethers.Wallet.createRandom().address; - await omniVault.connect(signer3).deposit(randomAddress, { value: predepositAmount }); - expect(await omniVault.getFlashCapacity()).to.be.closeTo(predepositAmount, 2n); - } - - //Add rewards - let availableBonus = await addReplenishBonusToOmniVault(arg.withdrawFeeFrom()); - - if (arg.ratio) { - await ratioFeedL2.updateRatioBatch([await iToken.getAddress()], [arg.ratio]); - console.log(`Ratio updated:\t\t\t${(await omniVault.ratio()).format()}`); - } - - const receiver = arg.receiver(); - const stakerSharesBefore = await iToken.balanceOf(receiver); - const totalAssetsBefore = await omniVault.totalAssets(); - const flashCapacityBefore = await omniVault.getFlashCapacity(); - console.log(`Flash capacity before:\t${flashCapacityBefore.format()}`); - - const amount = await arg.amount(); - console.log(`Amount:\t\t\t\t\t${amount.format()}`); - const calculatedBonus = await omniVault.calculateDepositBonus(amount); - console.log(`Preview bonus:\t\t\t${calculatedBonus.format()}`); - console.log(`Available bonus:\t\t${availableBonus.format()}`); - const expectedBonus = calculatedBonus <= availableBonus ? calculatedBonus : availableBonus; - availableBonus -= expectedBonus; - console.log(`Expected bonus:\t\t\t${expectedBonus.format()}`); - const convertedShares = await omniVault.convertToShares(amount + expectedBonus); - const expectedShares = ((amount + expectedBonus) * (await omniVault.ratio())) / e18; - - const code = ethers.encodeBytes32String("code"); - const tx = await omniVault.connect(signer1).depositWithReferral(receiver, code, { value: amount }); - const receipt = await tx.wait(); - const depositEvent = receipt?.logs.filter((e) => e.eventName === "Deposit"); - expect(depositEvent.length).to.be.eq(1); - expect(depositEvent[0].args["sender"]).to.be.eq(signer1.address); - expect(depositEvent[0].args["receiver"]).to.be.eq(receiver); - expect(depositEvent[0].args["amount"]).to.be.eq(amount); - expect(depositEvent[0].args["iShares"]).to.be.closeTo(convertedShares, 1n); - await expect(tx).to.emit(omniVault, "ReferralCode").withArgs(signer1.address, code); - - //DepositBonus event - const actualBonus = receipt?.logs.find((l) => l.eventName === "DepositBonus")?.args.amount || 0n; - console.log(`Actual bonus:\t\t\t${actualBonus.format()}`); - - const stakerSharesAfter = await iToken.balanceOf(receiver); - const totalAssetsAfter = await omniVault.totalAssets(); - const flashCapacityAfter = await omniVault.getFlashCapacity(); - console.log(`Bonus after:\t\t\t${availableBonus.format()}`); - - expect(stakerSharesAfter - stakerSharesBefore).to.be.closeTo(expectedShares, 1n); - expect(stakerSharesAfter - stakerSharesBefore).to.be.closeTo(convertedShares, 1n); - expect(totalAssetsAfter - totalAssetsBefore).to.be.eq(amount); //omniVault balance is the same - expect(actualBonus).to.be.closeTo(expectedBonus, 1n); - expect(flashCapacityAfter - flashCapacityBefore).to.be.closeTo(amount + expectedBonus, 1n); //rewarded bonus goes to flash capacity - }); - }); - - const invalidArgs = [ - { - name: "amount is 0", - amount: async () => 0n, - receiver: () => signer1.address, - customError: "LowerMinAmount", - }, - { - name: "amount < min", - amount: async () => (await omniVault.minAmount()) - 1n, - receiver: () => signer1.address, - customError: "LowerMinAmount", - }, - { - name: "to zero address", - amount: async () => randomBI(18), - receiver: () => ethers.ZeroAddress, - customError: "NullParams", - }, - ]; - - invalidArgs.forEach(function (arg) { - it(`Reverts when deposit ${arg.name}`, async function () { - const amount = await arg.amount(); - const receiver = arg.receiver(); - if (arg.customError) { - await expect(omniVault.connect(signer1).deposit(receiver, { value: amount })).to.be.revertedWithCustomError( - omniVault, - arg.customError - ); - } else { - await expect(omniVault.connect(signer1).deposit(receiver, { value: amount })).to.be.revertedWith(arg.error); - } - }); - }); - - it("Reverts when omniVault is paused", async function () { - await omniVault.pause(); - const depositAmount = randomBI(19); - await expect(omniVault.connect(signer1).deposit(signer1.address, { value: depositAmount })).revertedWithCustomError( - omniVault, - "EnforcedPause" - ); - await omniVault.unpause(); - }); - - it("Reverts when shares is 0", async function () { - await omniVault.setMinAmount(0n); - await expect(omniVault.connect(signer1).deposit(signer1.address, { value: 0n })).revertedWithCustomError( - omniVault, - "DepositInconsistentResultedState" - ); - }); - }); - - describe("Deposit bonus params setter and calculation", function () { - let TARGET, MAX_PERCENT, localSnapshot; - before(async function () { - MAX_PERCENT = await omniVault.MAX_PERCENT(); - }); - - const depositBonusSegment = [ - { - fromUtilization: async () => 0n, - fromPercent: async () => await omniVault.maxBonusRate(), - toUtilization: async () => await omniVault.depositUtilizationKink(), - toPercent: async () => await omniVault.optimalBonusRate(), - }, - { - fromUtilization: async () => await omniVault.depositUtilizationKink(), - fromPercent: async () => await omniVault.optimalBonusRate(), - toUtilization: async () => await omniVault.MAX_PERCENT(), - toPercent: async () => await omniVault.optimalBonusRate(), - }, - { - fromUtilization: async () => await omniVault.MAX_PERCENT(), - fromPercent: async () => 0n, - toUtilization: async () => ethers.MaxUint256, - toPercent: async () => 0n, - }, - ]; - - const args = [ - { - name: "Normal bonus rewards profile > 0", - newMaxBonusRate: BigInt(2 * 10 ** 8), //2% - newOptimalBonusRate: BigInt(0.2 * 10 ** 8), //0.2% - newDepositUtilizationKink: BigInt(25 * 10 ** 8), //25% - }, - { - name: "Optimal utilization = 0 => always optimal rate", - newMaxBonusRate: BigInt(2 * 10 ** 8), - newOptimalBonusRate: BigInt(10 ** 8), //1% - newDepositUtilizationKink: 0n, - }, - { - name: "Optimal bonus rate = 0", - newMaxBonusRate: BigInt(2 * 10 ** 8), - newOptimalBonusRate: 0n, - newDepositUtilizationKink: BigInt(25 * 10 ** 8), - }, - { - name: "Optimal bonus rate = max > 0 => rate is constant over utilization", - newMaxBonusRate: BigInt(2 * 10 ** 8), - newOptimalBonusRate: BigInt(2 * 10 ** 8), - newDepositUtilizationKink: BigInt(25 * 10 ** 8), - }, - { - name: "Optimal bonus rate = max = 0 => no bonus", - newMaxBonusRate: 0n, - newOptimalBonusRate: 0n, - newDepositUtilizationKink: BigInt(25 * 10 ** 8), - }, - //Will fail when OptimalBonusRate > MaxBonusRate - ]; - - const amounts = [ - { - name: "min amount from 0", - flashCapacity: () => 0n, - amount: async () => (await omniVault.convertToAssets(await omniVault.minAmount())) + 1n, - }, - { - name: "1 wei from 0", - flashCapacity: () => 0n, - amount: async () => 1n, - }, - { - name: "from 0 to 25% of TARGET", - flashCapacity: () => 0n, - amount: async () => (TARGET * 25n) / 100n, - }, - { - name: "from 0 to 25% + 1wei of TARGET", - flashCapacity: () => 0n, - amount: async () => (TARGET * 25n) / 100n, - }, - { - name: "from 25% to 100% of TARGET", - flashCapacity: () => (TARGET * 25n) / 100n, - amount: async () => (TARGET * 75n) / 100n, - }, - { - name: "from 0% to 100% of TARGET", - flashCapacity: () => 0n, - amount: async () => TARGET, - }, - { - name: "from 0% to 200% of TARGET", - flashCapacity: () => 0n, - amount: async () => TARGET * 2n, - }, - ]; - - args.forEach(function (arg) { - it(`setDepositBonusParams: ${arg.name}`, async function () { - await snapshot.restore(); - TARGET = e18; - await omniVault.connect(owner).setTargetFlashCapacity(TARGET); - - await expect(omniVault.setDepositBonusParams(arg.newMaxBonusRate, arg.newOptimalBonusRate, arg.newDepositUtilizationKink)) - .to.emit(omniVault, "DepositBonusParamsChanged") - .withArgs(arg.newMaxBonusRate, arg.newOptimalBonusRate, arg.newDepositUtilizationKink); - - expect(await omniVault.maxBonusRate()).to.be.eq(arg.newMaxBonusRate); - expect(await omniVault.optimalBonusRate()).to.be.eq(arg.newOptimalBonusRate); - expect(await omniVault.depositUtilizationKink()).to.be.eq(arg.newDepositUtilizationKink); - localSnapshot = await takeSnapshot(); - }); - - amounts.forEach(function (amount) { - it(`calculateDepositBonus for ${amount.name}`, async function () { - await localSnapshot.restore(); - let flashCapacity = amount.flashCapacity(); - if (flashCapacity > 0n) { - await omniVault.connect(signer1).deposit(signer1.address, { value: flashCapacity }); - } - let _amount = await amount.amount(); - let depositBonus = 0n; - while (_amount > 0n) { - for (const feeFunc of depositBonusSegment) { - const utilization = (flashCapacity * MAX_PERCENT) / TARGET; - const fromUtilization = await feeFunc.fromUtilization(); - const toUtilization = await feeFunc.toUtilization(); - if (_amount > 0n && fromUtilization <= utilization && utilization < toUtilization) { - const fromPercent = await feeFunc.fromPercent(); - const toPercent = await feeFunc.toPercent(); - const upperBound = (toUtilization * TARGET) / MAX_PERCENT; - const replenished = upperBound > flashCapacity + _amount ? _amount : upperBound - flashCapacity; - const slope = ((toPercent - fromPercent) * MAX_PERCENT) / (toUtilization - fromUtilization); - const bonusPercent = fromPercent + (slope * (flashCapacity + replenished / 2n)) / TARGET; - const bonus = (replenished * bonusPercent) / MAX_PERCENT; - console.log(`Replenished:\t\t\t${replenished.format()}`); - console.log(`Bonus percent:\t\t\t${bonusPercent.format()}`); - console.log(`Bonus:\t\t\t\t\t${bonus.format()}`); - flashCapacity += replenished; - _amount -= replenished; - depositBonus += bonus; - } - } - } - let contractBonus = await omniVault.calculateDepositBonus(await amount.amount()); - console.log(`Expected deposit bonus:\t${depositBonus.format()}`); - console.log(`Contract deposit bonus:\t${contractBonus.format()}`); - expect(contractBonus).to.be.closeTo(depositBonus, 1n); - }); - }); - }); - - const invalidArgs = [ - { - name: "MaxBonusRate > MAX_PERCENT", - newMaxBonusRate: () => MAX_PERCENT + 1n, - newOptimalBonusRate: () => BigInt(0.2 * 10 ** 8), //0.2% - newDepositUtilizationKink: () => BigInt(25 * 10 ** 8), - customError: "ParameterExceedsLimits", - }, - { - name: "OptimalBonusRate > MAX_PERCENT", - newMaxBonusRate: () => BigInt(2 * 10 ** 8), - newOptimalBonusRate: () => MAX_PERCENT + 1n, - newDepositUtilizationKink: () => BigInt(25 * 10 ** 8), - customError: "ParameterExceedsLimits", - }, - { - name: "DepositUtilizationKink > MAX_PERCENT", - newMaxBonusRate: () => BigInt(2 * 10 ** 8), - newOptimalBonusRate: () => BigInt(0.2 * 10 ** 8), //0.2% - newDepositUtilizationKink: () => MAX_PERCENT + 1n, - customError: "ParameterExceedsLimits", - }, - ]; - invalidArgs.forEach(function (arg) { - it(`setDepositBonusParams reverts when ${arg.name}`, async function () { - await expect( - omniVault.setDepositBonusParams(arg.newMaxBonusRate(), arg.newOptimalBonusRate(), arg.newDepositUtilizationKink()) - ).to.be.revertedWithCustomError(omniVault, arg.customError); - }); - }); - - it("setDepositBonusParams reverts when caller is not an owner", async function () { - await expect( - omniVault.connect(signer1).setDepositBonusParams(BigInt(2 * 10 ** 8), BigInt(0.2 * 10 ** 8), BigInt(25 * 10 ** 8)) - ).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); - }); - }); - - describe("Flash withdraw", function () { - let TARGET, MAX_PERCENT, ratio; - beforeEach(async function () { - await snapshot.restore(); - TARGET = toWei(10); - await omniVault.setTargetFlashCapacity(TARGET); - MAX_PERCENT = await omniVault.MAX_PERCENT(); - }); - - const args = [ - { - name: "some amount when capacity > TARGET", - poolCapacity: () => TARGET * 2n, - amount: async () => randomBIMax(TARGET / 2n), - receiver: () => signer1, - }, - { - name: "all capacity above TARGET", - poolCapacity: () => TARGET * 2n, - amount: async () => (await omniVault.getFlashCapacity()) - TARGET, - receiver: () => signer1, - }, - { - name: "all when pool capacity > TARGET", - poolCapacity: () => TARGET + e18, - amount: async () => await omniVault.getFlashCapacity(), - receiver: () => signer1, - }, - { - name: "partially when pool capacity = TARGET", - poolCapacity: () => TARGET, - amount: async () => (await omniVault.getFlashCapacity()) / 2n, - receiver: () => signer1, - }, - { - name: "all when pool capacity = TARGET", - poolCapacity: () => TARGET, - amount: async () => await omniVault.getFlashCapacity(), - receiver: () => signer1, - }, - { - name: "partially when pool capacity < TARGET", - poolCapacity: () => (TARGET * 3n) / 4n, - amount: async () => (await omniVault.getFlashCapacity()) / 2n, - receiver: () => signer1, - }, - { - name: "all when pool capacity < TARGET", - poolCapacity: () => (TARGET * 3n) / 4n, - amount: async () => await omniVault.getFlashCapacity(), - receiver: () => signer1, - }, - { - name: "to another address", - poolCapacity: () => (TARGET * 3n) / 4n, - amount: async () => (await omniVault.getFlashCapacity()) / 2n, - receiver: () => signer2, - }, - { - name: "after protocol fee has been changed", - poolCapacity: () => TARGET, - amount: async () => await omniVault.getFlashCapacity(), - receiver: () => signer1, - protocolFee: () => BigInt(25 * 10 ** 8), - }, - ]; - - args.forEach(function (arg) { - it(`flashWithdraw: ${arg.name}`, async function () { - ratio = toWei(0.8); - await ratioFeedL2.updateRatioBatch([iToken.address], [ratio]); - //Deposit - const predepositAmount = arg.poolCapacity(); - await omniVault.connect(signer1).deposit(signer1.address, { value: predepositAmount }); - //Set protocol fee - let protocolFee = await omniVault.protocolFee(); - if (arg.protocolFee) { - protocolFee = arg.protocolFee(); - await omniVault.setProtocolFee(protocolFee); - } - //flashWithdraw - const ratioBefore = await omniVault.ratio(); - console.log(`Ratio before:\t\t\t${ratioBefore.format()}`); - - const receiver = await arg.receiver(); - const sharesBefore = await iToken.balanceOf(signer1); - const assetBalanceBefore = await ethers.provider.getBalance(receiver); - const treasuryBalanceBefore = await ethers.provider.getBalance(treasury); - const totalAssetsBefore = await omniVault.totalAssets(); - const flashCapacityBefore = await omniVault.getFlashCapacity(); - console.log(`Flash capacity before:\t${flashCapacityBefore.format()}`); - - const amount = await arg.amount(); - const shares = await omniVault.convertToShares(amount); - const expectedFee = await omniVault.calculateFlashWithdrawFee(amount); - console.log(`Expected fee:\t\t\t${expectedFee.format()}`); - - let tx = await omniVault.connect(signer1).flashWithdraw(shares, receiver.address); - const receipt = await tx.wait(); - const txFee = receiver.address === signer1.address ? BigInt(receipt.gasUsed * receipt.gasPrice) : 0n; - const withdrawEvent = receipt?.logs.filter((e) => e.eventName === "FlashWithdraw"); - expect(withdrawEvent.length).to.be.eq(1); - expect(withdrawEvent[0].args["sender"]).to.be.eq(signer1.address); - expect(withdrawEvent[0].args["receiver"]).to.be.eq(receiver.address); - expect(withdrawEvent[0].args["owner"]).to.be.eq(signer1.address); - expect(withdrawEvent[0].args["amount"]).to.be.closeTo(amount - expectedFee, 2n); - expect(withdrawEvent[0].args["iShares"]).to.be.closeTo(shares, 2n); - const actualFee = withdrawEvent[0].args["fee"]; - console.log(`Actual fee:\t\t\t\t${actualFee.format()}`); - - const sharesAfter = await iToken.balanceOf(signer1); - const assetBalanceAfter = await ethers.provider.getBalance(receiver); - const treasuryBalanceAfter = await ethers.provider.getBalance(treasury); - const totalAssetsAfter = await omniVault.totalAssets(); - const flashCapacityAfter = await omniVault.getFlashCapacity(); - console.log(`Shares diff:\t\t\t${(sharesBefore - sharesAfter).format()}`); - console.log(`Receiver balance diff:\t${(assetBalanceAfter - assetBalanceBefore).format()}`); - console.log(`TotalAssets diff:\t\t${(totalAssetsBefore - totalAssetsAfter).format()}`); - console.log(`Flash capacity diff:\t${(flashCapacityBefore - flashCapacityAfter).format()}`); - - expect(sharesBefore - sharesAfter).to.be.eq(shares); - expect(assetBalanceAfter - assetBalanceBefore).to.be.closeTo(amount - expectedFee - txFee, 2n); - expect(actualFee).to.be.closeTo(expectedFee, 2n); - const toDepositBonus = (expectedFee * (MAX_PERCENT - protocolFee)) / MAX_PERCENT; - const toTreasury = (expectedFee * protocolFee) / MAX_PERCENT; - expect(treasuryBalanceAfter - treasuryBalanceBefore).to.be.closeTo(toTreasury, 2n); - expect(totalAssetsBefore - totalAssetsAfter).to.be.closeTo(amount - toDepositBonus, 2n); - expect(flashCapacityBefore - flashCapacityAfter).to.be.closeTo(amount, 2n); - }); - }); - - it("Reverts when capacity is not sufficient", async function () { - await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); - ratio = toWei(0.8); - await ratioFeedL2.updateRatioBatch([iToken.address], [ratio]); - const shares = await iToken.balanceOf(signer1.address); - const capacity = await omniVault.getFlashCapacity(); - await expect(omniVault.connect(signer1).flashWithdraw(shares, signer1.address)) - .to.be.revertedWithCustomError(omniVault, "InsufficientCapacity") - .withArgs(capacity); - }); - - it("Reverts when amount < min", async function () { - await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); - const minAmount = await omniVault.minAmount(); - const shares = (await omniVault.convertToShares(minAmount)) - 1n; - await expect(omniVault.connect(signer1).flashWithdraw(shares, signer1.address)) - .to.be.revertedWithCustomError(omniVault, "LowerMinAmount") - .withArgs(minAmount); - }); - - it("Reverts when omniVault is paused", async function () { - await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); - await omniVault.pause(); - const shares = await iToken.balanceOf(signer1.address); - await expect(omniVault.connect(signer1).flashWithdraw(shares / 2n, signer1.address)).to.be.revertedWithCustomError( - omniVault, - "EnforcedPause" - ); - }); - - it("Reverts when withdraws to 0 address", async function () { - await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); - const shares = await iToken.balanceOf(signer1.address); - await expect(omniVault.connect(signer1).flashWithdraw(shares / 2n, ethers.ZeroAddress)).to.be.revertedWithCustomError( - omniVault, - "NullParams" - ); - }); - - it("Reverts when shares = 0", async function () { - await omniVault.connect(signer1).deposit(signer1.address, { value: toWei(1) }); - await expect(omniVault.connect(signer1).flashWithdraw(0n, signer1.address)).to.be.revertedWithCustomError(omniVault, "NullParams"); - }); - }); - - describe("Withdraw fee params setter and calculation", function () { - let TARGET, MAX_PERCENT, localSnapshot; - before(async function () { - MAX_PERCENT = await omniVault.MAX_PERCENT(); - }); - - const withdrawFeeSegment = [ - { - fromUtilization: async () => 0n, - fromPercent: async () => await omniVault.maxFlashFeeRate(), - toUtilization: async () => await omniVault.withdrawUtilizationKink(), - toPercent: async () => await omniVault.optimalWithdrawalRate(), - }, - { - fromUtilization: async () => await omniVault.withdrawUtilizationKink(), - fromPercent: async () => await omniVault.optimalWithdrawalRate(), - toUtilization: async () => await omniVault.MAX_PERCENT(), - toPercent: async () => await omniVault.optimalWithdrawalRate(), - }, - { - fromUtilization: async () => await omniVault.MAX_PERCENT(), - fromPercent: async () => 0n, - toUtilization: async () => ethers.MaxUint256, - toPercent: async () => 0n, - }, - ]; - - const args = [ - { - name: "Normal withdraw fee profile > 0", - newMaxFlashFeeRate: BigInt(2 * 10 ** 8), //2% - newOptimalWithdrawalRate: BigInt(0.2 * 10 ** 8), //0.2% - newWithdrawUtilizationKink: BigInt(25 * 10 ** 8), - }, - { - name: "Optimal utilization = 0 => always optimal rate", - newMaxFlashFeeRate: BigInt(2 * 10 ** 8), - newOptimalWithdrawalRate: BigInt(10 ** 8), //1% - newWithdrawUtilizationKink: 0n, - }, - { - name: "Optimal withdraw rate = 0", - newMaxFlashFeeRate: BigInt(2 * 10 ** 8), - newOptimalWithdrawalRate: 0n, - newWithdrawUtilizationKink: BigInt(25 * 10 ** 8), - }, - { - name: "Optimal withdraw rate = max > 0 => rate is constant over utilization", - newMaxFlashFeeRate: BigInt(2 * 10 ** 8), - newOptimalWithdrawalRate: BigInt(2 * 10 ** 8), - newWithdrawUtilizationKink: BigInt(25 * 10 ** 8), - }, - { - name: "Optimal withdraw rate = max = 0 => no fee", - newMaxFlashFeeRate: 0n, - newOptimalWithdrawalRate: 0n, - newWithdrawUtilizationKink: BigInt(25 * 10 ** 8), - }, - //Will fail when optimalWithdrawalRate > MaxFlashFeeRate - ]; - - const amounts = [ - { - name: "from 200% to 0% of TARGET", - flashCapacity: () => TARGET * 2n, - amount: async () => await omniVault.getFlashCapacity(), - }, - { - name: "from 100% to 0% of TARGET", - flashCapacity: () => TARGET, - amount: async () => await omniVault.getFlashCapacity(), - }, - { - name: "1 wei from 100%", - flashCapacity: () => TARGET, - amount: async () => 1n, - }, - { - name: "min amount from 100%", - flashCapacity: () => TARGET, - amount: async () => (await omniVault.convertToAssets(await omniVault.minAmount())) + 1n, - }, - { - name: "from 100% to 25% of TARGET", - flashCapacity: () => TARGET, - amount: async () => (TARGET * 75n) / 100n, - }, - { - name: "from 100% to 25% - 1wei of TARGET", - flashCapacity: () => TARGET, - amount: async () => (TARGET * 75n) / 100n + 1n, - }, - { - name: "from 25% to 0% of TARGET", - flashCapacity: () => (TARGET * 25n) / 100n, - amount: async () => await omniVault.getFlashCapacity(), - }, - ]; - - args.forEach(function (arg) { - it(`setFlashWithdrawFeeParams: ${arg.name}`, async function () { - await snapshot.restore(); - TARGET = e18; - await omniVault.connect(owner).setTargetFlashCapacity(TARGET); - - await expect( - omniVault.setFlashWithdrawFeeParams(arg.newMaxFlashFeeRate, arg.newOptimalWithdrawalRate, arg.newWithdrawUtilizationKink) - ) - .to.emit(omniVault, "WithdrawFeeParamsChanged") - .withArgs(arg.newMaxFlashFeeRate, arg.newOptimalWithdrawalRate, arg.newWithdrawUtilizationKink); - - expect(await omniVault.maxFlashFeeRate()).to.be.eq(arg.newMaxFlashFeeRate); - expect(await omniVault.optimalWithdrawalRate()).to.be.eq(arg.newOptimalWithdrawalRate); - expect(await omniVault.withdrawUtilizationKink()).to.be.eq(arg.newWithdrawUtilizationKink); - localSnapshot = await takeSnapshot(); - }); - - amounts.forEach(function (amount) { - it(`calculateFlashWithdrawFee for: ${amount.name}`, async function () { - await localSnapshot.restore(); - if (amount.flashCapacity() > 0n) { - await omniVault.connect(signer1).deposit(signer1.address, { value: amount.flashCapacity() }); - } - let flashCapacity = await omniVault.getFlashCapacity(); - console.log(`flash capacity: ${flashCapacity.format()}`); - let _amount = await amount.amount(); - let withdrawFee = 0n; - while (_amount > 0n) { - for (const feeFunc of withdrawFeeSegment) { - const utilization = (flashCapacity * MAX_PERCENT) / TARGET; - const fromUtilization = await feeFunc.fromUtilization(); - const toUtilization = await feeFunc.toUtilization(); - if (_amount > 0n && fromUtilization < utilization && utilization <= toUtilization) { - console.log(`Utilization:\t\t\t${utilization.format()}`); - const fromPercent = await feeFunc.fromPercent(); - const toPercent = await feeFunc.toPercent(); - const lowerBound = (fromUtilization * TARGET) / MAX_PERCENT; - const replenished = lowerBound > flashCapacity - _amount ? flashCapacity - lowerBound : _amount; - const slope = ((toPercent - fromPercent) * MAX_PERCENT) / (toUtilization - fromUtilization); - const withdrawFeePercent = fromPercent + (slope * (flashCapacity - replenished / 2n)) / TARGET; - const fee = (replenished * withdrawFeePercent) / MAX_PERCENT; - console.log(`Replenished:\t\t\t${replenished.format()}`); - console.log(`Fee percent:\t\t\t${withdrawFeePercent.format()}`); - console.log(`Fee:\t\t\t\t\t${fee.format()}`); - flashCapacity -= replenished; - _amount -= replenished; - withdrawFee += fee; - } - } - } - let contractFee = await omniVault.calculateFlashWithdrawFee(await amount.amount()); - console.log(`Expected withdraw fee:\t${withdrawFee.format()}`); - console.log(`Contract withdraw fee:\t${contractFee.format()}`); - expect(contractFee).to.be.closeTo(withdrawFee, 1n); - }); - }); - }); - - const invalidArgs = [ - { - name: "MaxBonusRate > MAX_PERCENT", - newMaxFlashFeeRate: () => MAX_PERCENT + 1n, - newOptimalWithdrawalRate: () => BigInt(0.2 * 10 ** 8), //0.2% - newWithdrawUtilizationKink: () => BigInt(25 * 10 ** 8), - customError: "ParameterExceedsLimits", - }, - { - name: "OptimalBonusRate > MAX_PERCENT", - newMaxFlashFeeRate: () => BigInt(2 * 10 ** 8), - newOptimalWithdrawalRate: () => MAX_PERCENT + 1n, - newWithdrawUtilizationKink: () => BigInt(25 * 10 ** 8), - customError: "ParameterExceedsLimits", - }, - { - name: "DepositUtilizationKink > MAX_PERCENT", - newMaxFlashFeeRate: () => BigInt(2 * 10 ** 8), - newOptimalWithdrawalRate: () => BigInt(0.2 * 10 ** 8), //0.2% - newWithdrawUtilizationKink: () => MAX_PERCENT + 1n, - customError: "ParameterExceedsLimits", - }, - ]; - invalidArgs.forEach(function (arg) { - it(`setFlashWithdrawFeeParams reverts when ${arg.name}`, async function () { - await expect( - omniVault.setFlashWithdrawFeeParams(arg.newMaxFlashFeeRate(), arg.newOptimalWithdrawalRate(), arg.newWithdrawUtilizationKink()) - ).to.be.revertedWithCustomError(omniVault, arg.customError); - }); - }); - - it("calculateFlashWithdrawFee reverts when capacity is not sufficient", async function () { - await snapshot.restore(); - await omniVault.connect(signer1).deposit(signer1.address, { value: randomBI(19) }); - const capacity = await omniVault.getFlashCapacity(); - await expect(omniVault.calculateFlashWithdrawFee(capacity + 1n)) - .to.be.revertedWithCustomError(omniVault, "InsufficientCapacity") - .withArgs(capacity); - }); - - it("setFlashWithdrawFeeParams reverts when caller is not an owner", async function () { - await expect( - omniVault.connect(signer1).setFlashWithdrawFeeParams(BigInt(2 * 10 ** 8), BigInt(0.2 * 10 ** 8), BigInt(25 * 10 ** 8)) - ).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); - }); - }); - - describe("Setters", function () { - beforeEach(async function () { - await snapshot.restore(); - }); - - it("setTreasuryAddress(): only owner can", async function () { - const newTreasury = ethers.Wallet.createRandom().address; - - const currentTreasury = await omniVault.treasury(); - - await expect(omniVault.setTreasuryAddress(newTreasury)) - .to.emit(omniVault, "TreasuryUpdated") - .withArgs(currentTreasury, newTreasury); - - expect(await omniVault.treasury()).to.be.eq(newTreasury); - }); - - it("setTreasuryAddress(): reverts when set to zero address", async function () { - await expect(omniVault.setTreasuryAddress(ethers.ZeroAddress)).to.be.revertedWithCustomError(omniVault, "NullParams"); - }); - - it("setTreasuryAddress(): reverts when caller is not an owner", async function () { - await expect(omniVault.connect(signer1).setTreasuryAddress(signer1.address)).to.be.revertedWithCustomError( - omniVault, - "OwnableUnauthorizedAccount" - ); - }); - - it("setRatioFeed(): only owner can", async function () { - const ratioFeed = await omniVault.ratioFeed(); - const iRatioFeedFactory = await ethers.getContractFactory("InceptionRatioFeed"); - const newRatioFeed = await upgrades.deployProxy(iRatioFeedFactory, []); - newRatioFeed.address = await newRatioFeed.getAddress(); - await expect(omniVault.setRatioFeed(newRatioFeed.address)) - .to.emit(omniVault, "RatioFeedChanged") - .withArgs(ratioFeed, newRatioFeed.address); - expect(await omniVault.ratioFeed()).to.be.eq(newRatioFeed.address); - - const ratio = randomBI(18); - await newRatioFeed.updateRatioBatch([await iToken.getAddress()], [ratio]); - expect(await omniVault.ratio()).to.be.eq(ratio); - }); - - it("setRatioFeed(): reverts when new value is zero address", async function () { - await expect(omniVault.setRatioFeed(ethers.ZeroAddress)).to.be.revertedWithCustomError(omniVault, "NullParams"); - }); - - it("setRatioFeed(): reverts when caller is not an owner", async function () { - const newRatioFeed = ethers.Wallet.createRandom().address; - await expect(omniVault.connect(signer1).setRatioFeed(newRatioFeed)).to.be.revertedWithCustomError( - omniVault, - "OwnableUnauthorizedAccount" - ); - }); - - it("setOperator(): only owner can", async function () { - const newValue = ethers.Wallet.createRandom().address; - await expect(omniVault.setOperator(newValue)).to.emit(omniVault, "OperatorChanged").withArgs(operator.address, newValue); - expect(await omniVault.operator()).to.be.eq(newValue); - }); - - it("setOperator(): reverts when caller is not an owner", async function () { - await expect(omniVault.connect(signer1).setOperator(signer1.address)).to.be.revertedWithCustomError( - omniVault, - "OwnableUnauthorizedAccount" - ); - }); - - it("setOperator(): reverts when set to 0 address", async function () { - await expect(omniVault.setOperator(ethers.ZeroAddress)).to.be.revertedWithCustomError(omniVault, "NullParams"); - }); - - it("ratio() reverts when ratioFeed is 0 address", async function () { - const omniVaultFactory = await ethers.getContractFactory("InceptionERC20OmniVault"); - const omniVault = await upgrades.deployProxy( - omniVaultFactory, - ["Omnivault", operator.address, iToken.address, ethers.ZeroAddress], - { initializer: "initialize" } - ); - omniVault.address = await omniVault.getAddress(); - await iToken.setVault(omniVault.address); - await expect(omniVault.ratio()).to.be.reverted; - }); - - it("setCrossChainAdapter(): only owner can", async function () { - const newValue = ethers.Wallet.createRandom().address; - - // Capture the current cross-chain adapter address before making the change - const currentAdapter = await omniVault.crossChainAdapter(); - - // Expect the event to include both the previous and new cross-chain adapter addresses - await expect(omniVault.setCrossChainAdapter(newValue)) - .to.emit(omniVault, "CrossChainAdapterChanged") - .withArgs(currentAdapter, newValue); - - // Verify the cross-chain adapter address has been updated - expect(await omniVault.crossChainAdapter()).to.be.eq(newValue); - }); - - it("setCrossChainAdapter(): reverts when set to zero address", async function () { - await expect(omniVault.setCrossChainAdapter(ethers.ZeroAddress)).to.be.revertedWithCustomError(omniVault, "NullParams"); - }); - - it("setCrossChainAdapter(): reverts when caller is not an owner", async function () { - await expect(omniVault.connect(signer1).setCrossChainAdapter(signer1.address)).to.be.revertedWithCustomError( - omniVault, - "OwnableUnauthorizedAccount" - ); - }); - - it("setMinAmount(): only owner can", async function () { - const prevValue = await omniVault.minAmount(); - const newMinAmount = randomBI(4); - await expect(omniVault.setMinAmount(newMinAmount)).to.emit(omniVault, "MinAmountChanged").withArgs(prevValue, newMinAmount); - expect(await omniVault.minAmount()).to.be.eq(newMinAmount); - await expect(omniVault.connect(signer1).deposit(signer1.address, { value: newMinAmount - 1n })) - .to.be.revertedWithCustomError(omniVault, "LowerMinAmount") - .withArgs(newMinAmount); - }); - - it("setMinAmount(): reverts when called by not an owner", async function () { - await expect(omniVault.connect(signer1).setMinAmount(randomBI(3))).to.be.revertedWithCustomError( - omniVault, - "OwnableUnauthorizedAccount" - ); - }); - - it("setTargetFlashCapacity(): only owner can", async function () { - const prevValue = await omniVault.targetCapacity(); - const newValue = randomBI(18); - await expect(omniVault.setTargetFlashCapacity(newValue)).to.emit(omniVault, "TargetCapacityChanged").withArgs(prevValue, newValue); - expect(await omniVault.targetCapacity()).to.be.eq(newValue); - }); - - it("setTargetFlashCapacity(): reverts when called by not an owner", async function () { - const newValue = randomBI(18); - await expect(omniVault.connect(signer1).setTargetFlashCapacity(newValue)).to.be.revertedWithCustomError( - omniVault, - "OwnableUnauthorizedAccount" - ); - }); - - it("setTargetFlashCapacity(): reverts when sets to 0", async function () { - await expect(omniVault.setTargetFlashCapacity(0n)).to.be.revertedWithCustomError(omniVault, "NullParams"); - }); - - it("setProtocolFee(): sets share of flashWithdrawFee that goes to treasury", async function () { - const prevValue = await omniVault.protocolFee(); - const newValue = randomBI(10); - await expect(omniVault.setProtocolFee(newValue)).to.emit(omniVault, "ProtocolFeeChanged").withArgs(prevValue, newValue); - expect(await omniVault.protocolFee()).to.be.eq(newValue); - }); - - it("setProtocolFee(): reverts when > MAX_PERCENT", async function () { - const newValue = (await omniVault.MAX_PERCENT()) + 1n; - await expect(omniVault.setProtocolFee(newValue)) - .to.be.revertedWithCustomError(omniVault, "ParameterExceedsLimits") - .withArgs(newValue); - }); - - it("setProtocolFee(): reverts when caller is not an owner", async function () { - const newValue = randomBI(10); - await expect(omniVault.connect(signer1).setProtocolFee(newValue)).to.be.revertedWithCustomError( - omniVault, - "OwnableUnauthorizedAccount" - ); - }); - - it("setName(): only owner can", async function () { - const prevValue = await omniVault.name(); - const newValue = "New name"; - await expect(omniVault.setName(newValue)).to.emit(omniVault, "NameChanged").withArgs(prevValue, newValue); - expect(await omniVault.name()).to.be.eq(newValue); - }); - - it("setName(): reverts when new name is blank", async function () { - await expect(omniVault.setName("")).to.be.revertedWithCustomError(omniVault, "NullParams"); - }); - - it("setName(): reverts when called by not an owner", async function () { - await expect(omniVault.connect(signer1).setName("New name")).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); - }); - - it("pause(): only owner can", async function () { - expect(await omniVault.paused()).is.false; - await expect(omniVault.pause()).to.emit(omniVault, "Paused").withArgs(owner.address); - expect(await omniVault.paused()).is.true; - }); - - it("pause(): reverts when called by not an owner", async function () { - await expect(omniVault.connect(signer1).pause()).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); - }); - - it("pause(): reverts when already paused", async function () { - await omniVault.pause(); - await expect(omniVault.pause()).revertedWithCustomError(omniVault, "EnforcedPause"); - }); - - it("unpause(): only owner can", async function () { - await omniVault.pause(); - expect(await omniVault.paused()).is.true; - - await expect(omniVault.unpause()).to.emit(omniVault, "Unpaused").withArgs(owner.address); - expect(await omniVault.paused()).is.false; - }); - - it("unpause(): reverts when called by not an owner", async function () { - await omniVault.pause(); - expect(await omniVault.paused()).is.true; - await expect(omniVault.connect(signer1).unpause()).to.be.revertedWithCustomError(omniVault, "OwnableUnauthorizedAccount"); - }); - }); - - describe("Bridge", function () { - describe("Send eth", function () { - let TARGET = e18; - - beforeEach(async function () { - await snapshot.restore(); - await omniVault.setTargetFlashCapacity(TARGET); - }); - - const args = [ - { - name: "without extra value", - extraValue: 0n, - sender: () => operator, - amount: async () => await omniVault.getFreeBalance(), - }, - { - name: "with extra value by operator", - extraValue: randomBI(16), - sender: () => operator, - amount: async () => await omniVault.getFreeBalance(), - }, - { - name: "with extra value by owner", - extraValue: randomBI(16), - sender: () => owner, - amount: async () => await omniVault.getFreeBalance(), - }, - { - name: "options amount < freeBalance", - extraValue: 0n, - sender: () => operator, - amount: async () => 1n, - }, - ]; - args.forEach(function (arg) { - it(`sendEthToL1 ${arg.name}`, async function () { - await omniVault.connect(signer1).deposit(signer1, { value: TARGET + e18 }); - const freeBalance = await omniVault.getFreeBalance(); - const amount = await arg.amount(); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const sender = arg.sender(); - - const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); - console.log("fee", fee.format()); - const extraValue = arg.extraValue; - const tx = await omniVault.connect(sender).sendEthCrossChain(ETH_ID, options, { value: fee + extraValue }); - - await expect(tx).emit(omniVault, "EthCrossChainSent").withArgs(amount, ETH_ID); - await expect(tx).to.changeEtherBalance(rebalancer.address, amount); - await expect(tx).to.changeEtherBalance(sender.address, -fee, { includeFee: false }); - await expect(tx).to.changeEtherBalance(omniVault.address, -amount); //Extra value returned to sender - - if (extraValue > 0n) { - await expect(tx).to.emit(omniVault, "UnusedFeesSentBackToOperator").withArgs(extraValue); - } - }); - }); - - it("Reverts freeBalance < options amount", async function () { - await omniVault.connect(signer1).deposit(signer1, { value: TARGET + e18 }); - const amount = await omniVault.getFreeBalance(); - const options = Options.newOptions() - .addExecutorLzReceiveOption(200_000n, amount + 1n) - .toHex() - .toString(); - - const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); - await expect(omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee })).to.be.revertedWith( - "LayerZeroMock: not enough native for fees" - ); - }); - - it("Reverts when fee is not enough", async function () { - await omniVault.connect(signer1).deposit(signer1, { value: TARGET + e18 }); - const amount = await omniVault.getFreeBalance(); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - - const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); - await expect(omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee - 1n })) - .to.revertedWithCustomError(omniVault, "FeesAboveMsgValue") - .withArgs(fee - 1n); - }); - - it("Reverts when there is no free balance", async function () { - await omniVault.connect(signer1).deposit(signer1, { value: TARGET - 10n }); - expect(await omniVault.getFreeBalance()).to.be.eq(0n); - - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); - await expect(omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: 0n })).to.revertedWithCustomError( - omniVault, - "FreeBalanceTooLow" - ); - }); - - it("Reverts when called by not an operator", async function () { - await omniVault.connect(signer1).deposit(signer1, { value: TARGET * 2n }); - const amount = await omniVault.getFreeBalance(); - - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, amount).toHex().toString(); - const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); - await expect(omniVault.connect(signer1).sendEthCrossChain(ETH_ID, options, { value: fee })).to.revertedWithCustomError( - omniVault, - "OnlyOwnerOrOperator" - ); - }); - }); - - describe("Send info", function () { - let TARGET = e18; - - beforeEach(async function () { - await snapshot.restore(); - await omniVault.setTargetFlashCapacity(TARGET); - }); - - const args = [ - { - name: "When there are no eth and shares", - depositedEthAmount: () => 0n, - msgSender: () => operator, - }, - { - name: "After deposit", - depositedEthAmount: () => randomBI(18), - msgSender: () => operator, - }, - { - name: "After deposit when deposit bonus > 0", - depositedEthAmount: () => e18, - depositBonus: true, - msgSender: () => operator, - }, - { - name: "When there are shares, but eth was sent to L1", - depositedEthAmount: () => TARGET + e18, - depositBonus: true, - sentToL1EthAmount: (amount) => amount - TARGET, - msgSender: () => operator, - }, - { - name: "Owner can call", - depositedEthAmount: () => TARGET + randomBI(18), - depositBonus: true, - sentToL1EthAmount: (amount) => amount - TARGET, - msgSender: () => owner, - }, - { - name: "With extra fee operator", - depositedEthAmount: () => TARGET + randomBI(18), - depositBonus: true, - sentToL1EthAmount: (amount) => amount - TARGET, - msgSender: () => operator, - extra: randomBI(16), - }, - { - name: "With extra fee owner", - depositedEthAmount: () => TARGET + randomBI(18), - depositBonus: true, - sentToL1EthAmount: (amount) => amount - TARGET, - msgSender: () => owner, - extra: randomBI(16), - }, - ]; - args.forEach(function (arg) { - it(`sendAssetsInfoToL1 ${arg.name}`, async function () { - let amount = arg.depositedEthAmount(); - if (amount > 0n) { - await omniVault.connect(signer1).deposit(signer1, { value: amount }); - } - - if (arg.depositBonus) { - await addReplenishBonusToOmniVault(TARGET); - } - const depositBonus = await omniVault.depositBonusAmount(); - - let sentToL1Amount = 0n; - if (arg.sentToL1EthAmount) { - sentToL1Amount = arg.sentToL1EthAmount(amount); - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, sentToL1Amount).toHex().toString(); - const fee = await omniVault.quoteSendEthCrossChain(ETH_ID, options); - await omniVault.connect(operator).sendEthCrossChain(ETH_ID, options, { value: fee }); - } - - const vaultBalance = await ethers.provider.getBalance(omniVault.address); - const freeBalance = await omniVault.getFreeBalance(); - const totalSupply = await iToken.totalSupply(); - const expectedVaultBalance = amount + depositBonus - sentToL1Amount; - console.log("Vault balance:\t\t", vaultBalance.format()); - console.log("Free balance:\t\t", freeBalance.format()); - console.log("Deposit bonus:\t\t", depositBonus.format()); - console.log("Sent to L1 eth:\t\t", sentToL1Amount.format()); - console.log("Total deposited:\t", (await omniVault.getFlashCapacity()).format()); - expect(vaultBalance).to.be.eq(expectedVaultBalance); - - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); - let extraValue = 0n; - if (arg.extra) { - extraValue = arg.extra; - } - const fee = await omniVault.quoteSendAssetsInfoToL1(options); - const sender = arg.msgSender(); - const tx = await omniVault.connect(sender).sendAssetsInfoToL1(options, { value: fee + extraValue }); - const rec = await tx.wait(); - const block = await ethers.provider.getBlock(rec?.blockNumber); - await expect(tx) - .emit(omniVault, "MessageToL1Sent") - .withArgs(totalSupply, amount - sentToL1Amount); - - const txData = await rebalancer.getTransactionData(ARB_ID); - expect(txData.timestamp).to.be.eq(block?.timestamp); - expect(txData.ethBalance).to.be.eq(amount - sentToL1Amount); - expect(txData.inceptionTokenBalance).to.be.eq(totalSupply); - await expect(tx).to.changeEtherBalance(sender.address, -fee, { includeFee: false }); - if (extraValue > 0n) { - await expect(tx).to.emit(omniVault, "UnusedFeesSentBackToOperator").withArgs(extraValue); - } - }); - }); - - it("Reverts when called by not an operator", async function () { - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); - const fee = await omniVault.quoteSendAssetsInfoToL1(options); - await expect(omniVault.connect(signer1).sendAssetsInfoToL1(options, { value: fee })).to.revertedWithCustomError( - omniVault, - "OnlyOwnerOrOperator" - ); - }); - - it("Reverts when fee is not enough", async function () { - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); - const fee = await omniVault.quoteSendAssetsInfoToL1(options); - await expect(omniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee - 1n })) - .to.revertedWithCustomError(omniVault, "FeesAboveMsgValue") - .withArgs(fee - 1n); - }); - - it("Reverts when crosschain adapter is 0 address", async function () { - const omniVaultFactory = await ethers.getContractFactory("InceptionERC20OmniVault"); - const newOmniVault = await upgrades.deployProxy( - omniVaultFactory, - ["Omnivault", operator.address, iToken.address, ethers.ZeroAddress], - { initializer: "initialize" } - ); - newOmniVault.address = await newOmniVault.getAddress(); - await newOmniVault.setRatioFeed(ratioFeedL2.address); - await iToken.setVault(newOmniVault.address); - - const options = Options.newOptions().addExecutorLzReceiveOption(200_000n, 0n).toHex().toString(); - const fee = await omniVault.quoteSendAssetsInfoToL1(options); - await expect(newOmniVault.connect(operator).sendAssetsInfoToL1(options, { value: fee })).to.revertedWithCustomError( - newOmniVault, - "CrossChainAdapterNotSet" - ); - }); - }); - }); - }); -}); From 2c60d72788ec36cd0aa4a4b7c9d1707ea41bd584 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Mon, 10 Feb 2025 23:08:04 +0300 Subject: [PATCH 08/41] tidy up depl script --- projects/omnichain-deployer/README.md | 9 +++++---- projects/omnichain-deployer/scripts/stage1.js | 2 +- projects/omnichain-deployer/state.example.json | 13 +++++++++---- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/projects/omnichain-deployer/README.md b/projects/omnichain-deployer/README.md index 8e773fad..44f1ad2e 100644 --- a/projects/omnichain-deployer/README.md +++ b/projects/omnichain-deployer/README.md @@ -1,9 +1,10 @@ Deployment scripts -How to use: -1. Fill addresses in state.json with the stuff that's already deployed (see state.example.json) +How to use (assuming populated .env): +1. Fill addresses in state.json with the stuff that's already deployed and the required constants (see state.example.json) 2. Run scripts/stage1.js with L1 network -3. Run scripts/stage2.js with L2 -4. Run scripts/stage3.js with L1 +3. Run scripts/stage2.js with L2 (Fraxtal) +4. Run scripts/stage3.js with L1 again Deployed addresses will be saved in state.json. +The stages should be safe to rerun if something fails since the addresses are kept after each contract deployment. diff --git a/projects/omnichain-deployer/scripts/stage1.js b/projects/omnichain-deployer/scripts/stage1.js index 7724ee6d..44eaf88d 100644 --- a/projects/omnichain-deployer/scripts/stage1.js +++ b/projects/omnichain-deployer/scripts/stage1.js @@ -72,7 +72,7 @@ const deployERC20Rebalancer = async ( // set rebalancer as target receiver in L1 adapter const l1addapter = await ethers.getContractAt("LZCrossChainAdapterL1", defaultAdapter); // TODO fix (permissions on L1 adapter?) - // await l1addapter.setTargetReceiver(rebalancerAddr); + await l1addapter.setTargetReceiver(rebalancerAddr); return rebalancerAddr; }; diff --git a/projects/omnichain-deployer/state.example.json b/projects/omnichain-deployer/state.example.json index 51e163bf..39e16299 100644 --- a/projects/omnichain-deployer/state.example.json +++ b/projects/omnichain-deployer/state.example.json @@ -3,25 +3,30 @@ "chainIdL2": "2522", "eidL1": "40217", "eidL2": "40255", + "tokenName": "Inception sfrxETH", + "tokenSymbol": "insfrxETH", + "vaultNameL2": "Inception_sfrxETH_Omnivault", + "ferryL2": "0x54102317E9AeAcbb1Eac32214d099D60d260E9a3", "lzEndpointL2": "0x6EDCE65403992e310A62460808c4b910D972f10f", "ratioFeedAddressL2": "0xD4D49e67710d3d466417b566b6c0a3Dd4e94e87a", + "inceptionLibAddress": "0x3022ad4552b5fb285F36C71Bdd1545c33a4937ca", "strategyAddress": "", + "ratioFeedAddressL1": "0x90D5a4860e087462F8eE15B52D9b1914BdC977B5", "underlyingAssetL1": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", "underlyingAssetL2": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", "iTokenAddressL1": "", "iVaultAddressL1": "", + "lockbox": "0x865Ff05496eA73b0fA49fbBB97F2812776362c87", + "crossChainL1": "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E", "rebalancer": "", "iTokenAddressL2": "", "iVaultAddressL2": "", - "crossChainL2": "", - "tokenName": "test", - "tokenSymbol": "TST", - "vaultNameL2": "IOVL2" + "crossChainL2": "" } \ No newline at end of file From 0d4872cf16b4467dc453b4473978e7202dcb3c29 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Mon, 10 Feb 2025 23:31:41 +0300 Subject: [PATCH 09/41] update network configs with fraxtal mainnet/testnet --- hh.config.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/hh.config.ts b/hh.config.ts index 1f22b133..d3e1097b 100644 --- a/hh.config.ts +++ b/hh.config.ts @@ -10,6 +10,7 @@ export const CONFIG = { mainnet: { url: process.env.MAINNET_RPC || "https://rpc.ankr.com/eth", chainId: 1, + eid: 30101, gas: 8000000, gasPrice, accounts, @@ -27,6 +28,34 @@ export const CONFIG = { }, }, }, + fraxtal: { + url: process.env.RPC_URL_FRAX_HOLESKY || "https://rpc.frax.com", + chainId: 252, + gas: 8000000, + gasPrice, + accounts, + eid: 30255, + verify: { + etherscan: { + apiKey: process.env.FRAXSCAN_API_KEY, + apiUrl: "https://api.fraxscan.com/api", + }, + }, + }, + fraxHolesky: { + url: process.env.RPC_URL_FRAX_HOLESKY || "https://rpc.testnet.frax.com", + chainId: 2522, + gas: 8000000, + gasPrice, + accounts, + eid: 40255, + verify: { + etherscan: { + apiKey: process.env.FRAXSCAN_API_KEY, + apiUrl: "https://api-holesky.fraxscan.com/api", + }, + }, + }, local: { url: process.env.LOCAL_RPC || "http://127.0.0.1:8545", chainId: 1337, @@ -95,6 +124,22 @@ export const CONFIG = { browserURL: "https://holesky.etherscan.io", }, }, + { + network: "fraxHolesky", + chainId: 2522, + urls: { + apiURL: "https://api-holesky.fraxscan.com/api", + browserURL: "https://holesky.fraxscan.com", + }, + }, + { + network: "fraxHolesky", + chainId: 252, + urls: { + apiURL: "https://api.fraxscan.com/api", + browserURL: "https://fraxscan.com", + }, + }, ], }, sourcify: { From aa1dca1962a462bd119741359df22f86122e272f Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Mon, 10 Feb 2025 23:34:12 +0300 Subject: [PATCH 10/41] readme --- projects/omnichain-deployer/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/omnichain-deployer/README.md b/projects/omnichain-deployer/README.md index 44f1ad2e..7a3464b6 100644 --- a/projects/omnichain-deployer/README.md +++ b/projects/omnichain-deployer/README.md @@ -2,9 +2,13 @@ Deployment scripts How to use (assuming populated .env): 1. Fill addresses in state.json with the stuff that's already deployed and the required constants (see state.example.json) -2. Run scripts/stage1.js with L1 network +2. Run scripts/stage1.js with L1 network: +npx hardhat run scripts/stage1.js --network mainnet 3. Run scripts/stage2.js with L2 (Fraxtal) +npx hardhat run scripts/stage2.js --network fraxtal 4. Run scripts/stage3.js with L1 again +npx hardhat run scripts/stage3.js --network mainnet +You can use corresponding testnets in place of mainnets if needed. Deployed addresses will be saved in state.json. The stages should be safe to rerun if something fails since the addresses are kept after each contract deployment. From 0150954dc2c26c6daae41f9e8c984874f135ebc4 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Tue, 11 Feb 2025 11:15:45 +0300 Subject: [PATCH 11/41] readme for deployment scripts --- projects/omnichain-deployer/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/projects/omnichain-deployer/README.md b/projects/omnichain-deployer/README.md index 7a3464b6..7f20b8bb 100644 --- a/projects/omnichain-deployer/README.md +++ b/projects/omnichain-deployer/README.md @@ -12,3 +12,18 @@ npx hardhat run scripts/stage3.js --network mainnet You can use corresponding testnets in place of mainnets if needed. Deployed addresses will be saved in state.json. The stages should be safe to rerun if something fails since the addresses are kept after each contract deployment. + +Stage 1 script: +1. If neither L1 iVault and iToken are set, deploy mock vault and token to L1 and set their ratio feed. After that, update ratio for the new token. +2. If rebalancer address isn't set, deploy rebalancer and set it as the target receiver on the L1 crosschain adapter. +3. Set rebalancer address in the L1 InceptionToken contract. + +Stage 2: +1. Deploy L2 inceptionToken if the address wasn't set. +2. Deploy L2 crosschain adapter (the FraxFerry one in this case). +3. Deploy L2 vault and set its address in the token and adapter contracts. + +Stage 3: +1. Set L1 adapter's LZ peer to the L2 adapter's address and EID. + +These scripts assume that the deployer has all the required permissions to set properties of the existing contracts. From 43874b6b3beced48865598c2c7e3b79183b0c71e Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Tue, 11 Feb 2025 13:18:08 +0300 Subject: [PATCH 12/41] wip fix deloyer --- projects/omnichain-deployer/README.md | 3 + projects/omnichain-deployer/hardhat.config.ts | 2 +- .../mocks/contracts/MockVault_flattened.sol | 3395 +++++++++++++++++ projects/omnichain-deployer/package.json | 4 +- projects/omnichain-deployer/scripts/stage1.js | 8 +- .../omnichain-deployer/state.example.json | 2 +- projects/omnichain-deployer/yarn.lock | 18 +- .../contracts/rebalancer/ERC20Rebalancer.sol | 2 +- 8 files changed, 3416 insertions(+), 18 deletions(-) create mode 100644 projects/omnichain-deployer/mocks/contracts/MockVault_flattened.sol diff --git a/projects/omnichain-deployer/README.md b/projects/omnichain-deployer/README.md index 7f20b8bb..29e38eb0 100644 --- a/projects/omnichain-deployer/README.md +++ b/projects/omnichain-deployer/README.md @@ -27,3 +27,6 @@ Stage 3: 1. Set L1 adapter's LZ peer to the L2 adapter's address and EID. These scripts assume that the deployer has all the required permissions to set properties of the existing contracts. + +Currently commented out: +- Setting target receiver on L1 adapter (no permission on testnet) \ No newline at end of file diff --git a/projects/omnichain-deployer/hardhat.config.ts b/projects/omnichain-deployer/hardhat.config.ts index a928e9f8..c2dd1905 100644 --- a/projects/omnichain-deployer/hardhat.config.ts +++ b/projects/omnichain-deployer/hardhat.config.ts @@ -8,7 +8,7 @@ import "@openzeppelin/hardhat-upgrades"; import fse from "fs-extra"; import path from "path"; -const EXTERNAL_PROJECTS = [ "../vaults", "../bridge-lz"]; +const EXTERNAL_PROJECTS = [ "../vaults", "../bridge-lz", "./mocks"]; const TARGET_DIR = "./contracts"; const copyContracts = () => { diff --git a/projects/omnichain-deployer/mocks/contracts/MockVault_flattened.sol b/projects/omnichain-deployer/mocks/contracts/MockVault_flattened.sol new file mode 100644 index 00000000..84105d1b --- /dev/null +++ b/projects/omnichain-deployer/mocks/contracts/MockVault_flattened.sol @@ -0,0 +1,3395 @@ +// Sources flattened with hardhat v2.22.13 https://hardhat.org + +// SPDX-License-Identifier: MIT + +// File @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol) + +pragma solidity ^0.8.20; + +/** + * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed + * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an + * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer + * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. + * + * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be + * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in + * case an upgrade adds a module that needs to be initialized. + * + * For example: + * + * [.hljs-theme-light.nopadding] + * ```solidity + * contract MyToken is ERC20Upgradeable { + * function initialize() initializer public { + * __ERC20_init("MyToken", "MTK"); + * } + * } + * + * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { + * function initializeV2() reinitializer(2) public { + * __ERC20Permit_init("MyToken"); + * } + * } + * ``` + * + * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as + * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. + * + * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure + * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. + * + * [CAUTION] + * ==== + * Avoid leaving a contract uninitialized. + * + * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation + * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke + * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: + * + * [.hljs-theme-light.nopadding] + * ``` + * /// @custom:oz-upgrades-unsafe-allow constructor + * constructor() { + * _disableInitializers(); + * } + * ``` + * ==== + */ +abstract contract Initializable { + /** + * @dev Storage of the initializable contract. + * + * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions + * when using with upgradeable contracts. + * + * @custom:storage-location erc7201:openzeppelin.storage.Initializable + */ + struct InitializableStorage { + /** + * @dev Indicates that the contract has been initialized. + */ + uint64 _initialized; + /** + * @dev Indicates that the contract is in the process of being initialized. + */ + bool _initializing; + } + + // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; + + /** + * @dev The contract is already initialized. + */ + error InvalidInitialization(); + + /** + * @dev The contract is not initializing. + */ + error NotInitializing(); + + /** + * @dev Triggered when the contract has been initialized or reinitialized. + */ + event Initialized(uint64 version); + + /** + * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, + * `onlyInitializing` functions can be used to initialize parent contracts. + * + * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any + * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in + * production. + * + * Emits an {Initialized} event. + */ + modifier initializer() { + // solhint-disable-next-line var-name-mixedcase + InitializableStorage storage $ = _getInitializableStorage(); + + // Cache values to avoid duplicated sloads + bool isTopLevelCall = !$._initializing; + uint64 initialized = $._initialized; + + // Allowed calls: + // - initialSetup: the contract is not in the initializing state and no previous version was + // initialized + // - construction: the contract is initialized at version 1 (no reininitialization) and the + // current contract is just being deployed + bool initialSetup = initialized == 0 && isTopLevelCall; + bool construction = initialized == 1 && address(this).code.length == 0; + + if (!initialSetup && !construction) { + revert InvalidInitialization(); + } + $._initialized = 1; + if (isTopLevelCall) { + $._initializing = true; + } + _; + if (isTopLevelCall) { + $._initializing = false; + emit Initialized(1); + } + } + + /** + * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the + * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be + * used to initialize parent contracts. + * + * A reinitializer may be used after the original initialization step. This is essential to configure modules that + * are added through upgrades and that require initialization. + * + * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` + * cannot be nested. If one is invoked in the context of another, execution will revert. + * + * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in + * a contract, executing them in the right order is up to the developer or operator. + * + * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization. + * + * Emits an {Initialized} event. + */ + modifier reinitializer(uint64 version) { + // solhint-disable-next-line var-name-mixedcase + InitializableStorage storage $ = _getInitializableStorage(); + + if ($._initializing || $._initialized >= version) { + revert InvalidInitialization(); + } + $._initialized = version; + $._initializing = true; + _; + $._initializing = false; + emit Initialized(version); + } + + /** + * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the + * {initializer} and {reinitializer} modifiers, directly or indirectly. + */ + modifier onlyInitializing() { + _checkInitializing(); + _; + } + + /** + * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}. + */ + function _checkInitializing() internal view virtual { + if (!_isInitializing()) { + revert NotInitializing(); + } + } + + /** + * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. + * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized + * to any version. It is recommended to use this to lock implementation contracts that are designed to be called + * through proxies. + * + * Emits an {Initialized} event the first time it is successfully executed. + */ + function _disableInitializers() internal virtual { + // solhint-disable-next-line var-name-mixedcase + InitializableStorage storage $ = _getInitializableStorage(); + + if ($._initializing) { + revert InvalidInitialization(); + } + if ($._initialized != type(uint64).max) { + $._initialized = type(uint64).max; + emit Initialized(type(uint64).max); + } + } + + /** + * @dev Returns the highest version that has been initialized. See {reinitializer}. + */ + function _getInitializedVersion() internal view returns (uint64) { + return _getInitializableStorage()._initialized; + } + + /** + * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. + */ + function _isInitializing() internal view returns (bool) { + return _getInitializableStorage()._initializing; + } + + /** + * @dev Returns a pointer to the storage namespace. + */ + // solhint-disable-next-line var-name-mixedcase + function _getInitializableStorage() private pure returns (InitializableStorage storage $) { + assembly { + $.slot := INITIALIZABLE_STORAGE + } + } +} + + +// File @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) + +pragma solidity ^0.8.20; + +/** + * @dev Provides information about the current execution context, including the + * sender of the transaction and its data. While these are generally available + * via msg.sender and msg.data, they should not be accessed in such a direct + * manner, since when dealing with meta-transactions the account sending and + * paying for execution may not be the actual sender (as far as an application + * is concerned). + * + * This contract is only required for intermediate, library-like contracts. + */ +abstract contract ContextUpgradeable is Initializable { + function __Context_init() internal onlyInitializing { + } + + function __Context_init_unchained() internal onlyInitializing { + } + function _msgSender() internal view virtual returns (address) { + return msg.sender; + } + + function _msgData() internal view virtual returns (bytes calldata) { + return msg.data; + } + + function _contextSuffixLength() internal view virtual returns (uint256) { + return 0; + } +} + + +// File @openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) + +pragma solidity ^0.8.20; + + +/** + * @dev Contract module which provides a basic access control mechanism, where + * there is an account (an owner) that can be granted exclusive access to + * specific functions. + * + * The initial owner is set to the address provided by the deployer. This can + * later be changed with {transferOwnership}. + * + * This module is used through inheritance. It will make available the modifier + * `onlyOwner`, which can be applied to your functions to restrict their use to + * the owner. + */ +abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { + /// @custom:storage-location erc7201:openzeppelin.storage.Ownable + struct OwnableStorage { + address _owner; + } + + // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Ownable")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300; + + function _getOwnableStorage() private pure returns (OwnableStorage storage $) { + assembly { + $.slot := OwnableStorageLocation + } + } + + /** + * @dev The caller account is not authorized to perform an operation. + */ + error OwnableUnauthorizedAccount(address account); + + /** + * @dev The owner is not a valid owner account. (eg. `address(0)`) + */ + error OwnableInvalidOwner(address owner); + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + /** + * @dev Initializes the contract setting the address provided by the deployer as the initial owner. + */ + function __Ownable_init(address initialOwner) internal onlyInitializing { + __Ownable_init_unchained(initialOwner); + } + + function __Ownable_init_unchained(address initialOwner) internal onlyInitializing { + if (initialOwner == address(0)) { + revert OwnableInvalidOwner(address(0)); + } + _transferOwnership(initialOwner); + } + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + _checkOwner(); + _; + } + + /** + * @dev Returns the address of the current owner. + */ + function owner() public view virtual returns (address) { + OwnableStorage storage $ = _getOwnableStorage(); + return $._owner; + } + + /** + * @dev Throws if the sender is not the owner. + */ + function _checkOwner() internal view virtual { + if (owner() != _msgSender()) { + revert OwnableUnauthorizedAccount(_msgSender()); + } + } + + /** + * @dev Leaves the contract without owner. It will not be possible to call + * `onlyOwner` functions. Can only be called by the current owner. + * + * NOTE: Renouncing ownership will leave the contract without an owner, + * thereby disabling any functionality that is only available to the owner. + */ + function renounceOwnership() public virtual onlyOwner { + _transferOwnership(address(0)); + } + + /** + * @dev Transfers ownership of the contract to a new account (`newOwner`). + * Can only be called by the current owner. + */ + function transferOwnership(address newOwner) public virtual onlyOwner { + if (newOwner == address(0)) { + revert OwnableInvalidOwner(address(0)); + } + _transferOwnership(newOwner); + } + + /** + * @dev Transfers ownership of the contract to a new account (`newOwner`). + * Internal function without access restriction. + */ + function _transferOwnership(address newOwner) internal virtual { + OwnableStorage storage $ = _getOwnableStorage(); + address oldOwner = $._owner; + $._owner = newOwner; + emit OwnershipTransferred(oldOwner, newOwner); + } +} + + +// File @openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol) + +pragma solidity ^0.8.20; + + +/** + * @dev Contract module which provides access control mechanism, where + * there is an account (an owner) that can be granted exclusive access to + * specific functions. + * + * This extension of the {Ownable} contract includes a two-step mechanism to transfer + * ownership, where the new owner must call {acceptOwnership} in order to replace the + * old one. This can help prevent common mistakes, such as transfers of ownership to + * incorrect accounts, or to contracts that are unable to interact with the + * permission system. + * + * The initial owner is specified at deployment time in the constructor for `Ownable`. This + * can later be changed with {transferOwnership} and {acceptOwnership}. + * + * This module is used through inheritance. It will make available all functions + * from parent (Ownable). + */ +abstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable { + /// @custom:storage-location erc7201:openzeppelin.storage.Ownable2Step + struct Ownable2StepStorage { + address _pendingOwner; + } + + // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Ownable2Step")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant Ownable2StepStorageLocation = 0x237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00; + + function _getOwnable2StepStorage() private pure returns (Ownable2StepStorage storage $) { + assembly { + $.slot := Ownable2StepStorageLocation + } + } + + event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); + + function __Ownable2Step_init() internal onlyInitializing { + } + + function __Ownable2Step_init_unchained() internal onlyInitializing { + } + /** + * @dev Returns the address of the pending owner. + */ + function pendingOwner() public view virtual returns (address) { + Ownable2StepStorage storage $ = _getOwnable2StepStorage(); + return $._pendingOwner; + } + + /** + * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. + * Can only be called by the current owner. + * + * Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer. + */ + function transferOwnership(address newOwner) public virtual override onlyOwner { + Ownable2StepStorage storage $ = _getOwnable2StepStorage(); + $._pendingOwner = newOwner; + emit OwnershipTransferStarted(owner(), newOwner); + } + + /** + * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. + * Internal function without access restriction. + */ + function _transferOwnership(address newOwner) internal virtual override { + Ownable2StepStorage storage $ = _getOwnable2StepStorage(); + delete $._pendingOwner; + super._transferOwnership(newOwner); + } + + /** + * @dev The new owner accepts the ownership transfer. + */ + function acceptOwnership() public virtual { + address sender = _msgSender(); + if (pendingOwner() != sender) { + revert OwnableUnauthorizedAccount(sender); + } + _transferOwnership(sender); + } +} + + +// File @openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) + +pragma solidity ^0.8.20; + + +/** + * @dev Contract module which allows children to implement an emergency stop + * mechanism that can be triggered by an authorized account. + * + * This module is used through inheritance. It will make available the + * modifiers `whenNotPaused` and `whenPaused`, which can be applied to + * the functions of your contract. Note that they will not be pausable by + * simply including this module, only once the modifiers are put in place. + */ +abstract contract PausableUpgradeable is Initializable, ContextUpgradeable { + /// @custom:storage-location erc7201:openzeppelin.storage.Pausable + struct PausableStorage { + bool _paused; + } + + // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Pausable")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant PausableStorageLocation = 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300; + + function _getPausableStorage() private pure returns (PausableStorage storage $) { + assembly { + $.slot := PausableStorageLocation + } + } + + /** + * @dev Emitted when the pause is triggered by `account`. + */ + event Paused(address account); + + /** + * @dev Emitted when the pause is lifted by `account`. + */ + event Unpaused(address account); + + /** + * @dev The operation failed because the contract is paused. + */ + error EnforcedPause(); + + /** + * @dev The operation failed because the contract is not paused. + */ + error ExpectedPause(); + + /** + * @dev Initializes the contract in unpaused state. + */ + function __Pausable_init() internal onlyInitializing { + __Pausable_init_unchained(); + } + + function __Pausable_init_unchained() internal onlyInitializing { + PausableStorage storage $ = _getPausableStorage(); + $._paused = false; + } + + /** + * @dev Modifier to make a function callable only when the contract is not paused. + * + * Requirements: + * + * - The contract must not be paused. + */ + modifier whenNotPaused() { + _requireNotPaused(); + _; + } + + /** + * @dev Modifier to make a function callable only when the contract is paused. + * + * Requirements: + * + * - The contract must be paused. + */ + modifier whenPaused() { + _requirePaused(); + _; + } + + /** + * @dev Returns true if the contract is paused, and false otherwise. + */ + function paused() public view virtual returns (bool) { + PausableStorage storage $ = _getPausableStorage(); + return $._paused; + } + + /** + * @dev Throws if the contract is paused. + */ + function _requireNotPaused() internal view virtual { + if (paused()) { + revert EnforcedPause(); + } + } + + /** + * @dev Throws if the contract is not paused. + */ + function _requirePaused() internal view virtual { + if (!paused()) { + revert ExpectedPause(); + } + } + + /** + * @dev Triggers stopped state. + * + * Requirements: + * + * - The contract must not be paused. + */ + function _pause() internal virtual whenNotPaused { + PausableStorage storage $ = _getPausableStorage(); + $._paused = true; + emit Paused(_msgSender()); + } + + /** + * @dev Returns to normal state. + * + * Requirements: + * + * - The contract must be paused. + */ + function _unpause() internal virtual whenPaused { + PausableStorage storage $ = _getPausableStorage(); + $._paused = false; + emit Unpaused(_msgSender()); + } +} + + +// File @openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol) + +pragma solidity ^0.8.20; + +/** + * @dev Contract module that helps prevent reentrant calls to a function. + * + * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier + * available, which can be applied to functions to make sure there are no nested + * (reentrant) calls to them. + * + * Note that because there is a single `nonReentrant` guard, functions marked as + * `nonReentrant` may not call one another. This can be worked around by making + * those functions `private`, and then adding `external` `nonReentrant` entry + * points to them. + * + * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, + * consider using {ReentrancyGuardTransient} instead. + * + * TIP: If you would like to learn more about reentrancy and alternative ways + * to protect against it, check out our blog post + * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. + */ +abstract contract ReentrancyGuardUpgradeable is Initializable { + // Booleans are more expensive than uint256 or any type that takes up a full + // word because each write operation emits an extra SLOAD to first read the + // slot's contents, replace the bits taken up by the boolean, and then write + // back. This is the compiler's defense against contract upgrades and + // pointer aliasing, and it cannot be disabled. + + // The values being non-zero value makes deployment a bit more expensive, + // but in exchange the refund on every call to nonReentrant will be lower in + // amount. Since refunds are capped to a percentage of the total + // transaction's gas, it is best to keep them low in cases like this one, to + // increase the likelihood of the full refund coming into effect. + uint256 private constant NOT_ENTERED = 1; + uint256 private constant ENTERED = 2; + + /// @custom:storage-location erc7201:openzeppelin.storage.ReentrancyGuard + struct ReentrancyGuardStorage { + uint256 _status; + } + + // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ReentrancyGuard")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant ReentrancyGuardStorageLocation = 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00; + + function _getReentrancyGuardStorage() private pure returns (ReentrancyGuardStorage storage $) { + assembly { + $.slot := ReentrancyGuardStorageLocation + } + } + + /** + * @dev Unauthorized reentrant call. + */ + error ReentrancyGuardReentrantCall(); + + function __ReentrancyGuard_init() internal onlyInitializing { + __ReentrancyGuard_init_unchained(); + } + + function __ReentrancyGuard_init_unchained() internal onlyInitializing { + ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); + $._status = NOT_ENTERED; + } + + /** + * @dev Prevents a contract from calling itself, directly or indirectly. + * Calling a `nonReentrant` function from another `nonReentrant` + * function is not supported. It is possible to prevent this from happening + * by making the `nonReentrant` function external, and making it call a + * `private` function that does the actual work. + */ + modifier nonReentrant() { + _nonReentrantBefore(); + _; + _nonReentrantAfter(); + } + + function _nonReentrantBefore() private { + ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); + // On the first call to nonReentrant, _status will be NOT_ENTERED + if ($._status == ENTERED) { + revert ReentrancyGuardReentrantCall(); + } + + // Any calls to nonReentrant after this point will fail + $._status = ENTERED; + } + + function _nonReentrantAfter() private { + ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); + // By storing the original value once again, a refund is triggered (see + // https://eips.ethereum.org/EIPS/eip-2200) + $._status = NOT_ENTERED; + } + + /** + * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a + * `nonReentrant` function in the call stack. + */ + function _reentrancyGuardEntered() internal view returns (bool) { + ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); + return $._status == ENTERED; + } +} + + +// File @openzeppelin/contracts/utils/introspection/IERC165.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) + +pragma solidity ^0.8.20; + +/** + * @dev Interface of the ERC-165 standard, as defined in the + * https://eips.ethereum.org/EIPS/eip-165[ERC]. + * + * Implementers can declare support of contract interfaces, which can then be + * queried by others ({ERC165Checker}). + * + * For an implementation, see {ERC165}. + */ +interface IERC165 { + /** + * @dev Returns true if this contract implements the interface defined by + * `interfaceId`. See the corresponding + * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] + * to learn more about how these ids are created. + * + * This function call must use less than 30 000 gas. + */ + function supportsInterface(bytes4 interfaceId) external view returns (bool); +} + + +// File @openzeppelin/contracts/interfaces/IERC165.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol) + +pragma solidity ^0.8.20; + + +// File @openzeppelin/contracts/token/ERC20/IERC20.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) + +pragma solidity ^0.8.20; + +/** + * @dev Interface of the ERC-20 standard as defined in the ERC. + */ +interface IERC20 { + /** + * @dev Emitted when `value` tokens are moved from one account (`from`) to + * another (`to`). + * + * Note that `value` may be zero. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev Emitted when the allowance of a `spender` for an `owner` is set by + * a call to {approve}. `value` is the new allowance. + */ + event Approval(address indexed owner, address indexed spender, uint256 value); + + /** + * @dev Returns the value of tokens in existence. + */ + function totalSupply() external view returns (uint256); + + /** + * @dev Returns the value of tokens owned by `account`. + */ + function balanceOf(address account) external view returns (uint256); + + /** + * @dev Moves a `value` amount of tokens from the caller's account to `to`. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transfer(address to, uint256 value) external returns (bool); + + /** + * @dev Returns the remaining number of tokens that `spender` will be + * allowed to spend on behalf of `owner` through {transferFrom}. This is + * zero by default. + * + * This value changes when {approve} or {transferFrom} are called. + */ + function allowance(address owner, address spender) external view returns (uint256); + + /** + * @dev Sets a `value` amount of tokens as the allowance of `spender` over the + * caller's tokens. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * IMPORTANT: Beware that changing an allowance with this method brings the risk + * that someone may use both the old and the new allowance by unfortunate + * transaction ordering. One possible solution to mitigate this race + * condition is to first reduce the spender's allowance to 0 and set the + * desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + * Emits an {Approval} event. + */ + function approve(address spender, uint256 value) external returns (bool); + + /** + * @dev Moves a `value` amount of tokens from `from` to `to` using the + * allowance mechanism. `value` is then deducted from the caller's + * allowance. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transferFrom(address from, address to, uint256 value) external returns (bool); +} + + +// File @openzeppelin/contracts/interfaces/IERC20.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol) + +pragma solidity ^0.8.20; + + +// File @openzeppelin/contracts/interfaces/IERC1363.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol) + +pragma solidity ^0.8.20; + + +/** + * @title IERC1363 + * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363]. + * + * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract + * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction. + */ +interface IERC1363 is IERC20, IERC165 { + /* + * Note: the ERC-165 identifier for this interface is 0xb0202a11. + * 0xb0202a11 === + * bytes4(keccak256('transferAndCall(address,uint256)')) ^ + * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^ + * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^ + * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^ + * bytes4(keccak256('approveAndCall(address,uint256)')) ^ + * bytes4(keccak256('approveAndCall(address,uint256,bytes)')) + */ + + /** + * @dev Moves a `value` amount of tokens from the caller's account to `to` + * and then calls {IERC1363Receiver-onTransferReceived} on `to`. + * @param to The address which you want to transfer to. + * @param value The amount of tokens to be transferred. + * @return A boolean value indicating whether the operation succeeded unless throwing. + */ + function transferAndCall(address to, uint256 value) external returns (bool); + + /** + * @dev Moves a `value` amount of tokens from the caller's account to `to` + * and then calls {IERC1363Receiver-onTransferReceived} on `to`. + * @param to The address which you want to transfer to. + * @param value The amount of tokens to be transferred. + * @param data Additional data with no specified format, sent in call to `to`. + * @return A boolean value indicating whether the operation succeeded unless throwing. + */ + function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool); + + /** + * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism + * and then calls {IERC1363Receiver-onTransferReceived} on `to`. + * @param from The address which you want to send tokens from. + * @param to The address which you want to transfer to. + * @param value The amount of tokens to be transferred. + * @return A boolean value indicating whether the operation succeeded unless throwing. + */ + function transferFromAndCall(address from, address to, uint256 value) external returns (bool); + + /** + * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism + * and then calls {IERC1363Receiver-onTransferReceived} on `to`. + * @param from The address which you want to send tokens from. + * @param to The address which you want to transfer to. + * @param value The amount of tokens to be transferred. + * @param data Additional data with no specified format, sent in call to `to`. + * @return A boolean value indicating whether the operation succeeded unless throwing. + */ + function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool); + + /** + * @dev Sets a `value` amount of tokens as the allowance of `spender` over the + * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`. + * @param spender The address which will spend the funds. + * @param value The amount of tokens to be spent. + * @return A boolean value indicating whether the operation succeeded unless throwing. + */ + function approveAndCall(address spender, uint256 value) external returns (bool); + + /** + * @dev Sets a `value` amount of tokens as the allowance of `spender` over the + * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`. + * @param spender The address which will spend the funds. + * @param value The amount of tokens to be spent. + * @param data Additional data with no specified format, sent in call to `spender`. + * @return A boolean value indicating whether the operation succeeded unless throwing. + */ + function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool); +} + + +// File @openzeppelin/contracts/proxy/beacon/IBeacon.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol) + +pragma solidity ^0.8.20; + +/** + * @dev This is the interface that {BeaconProxy} expects of its beacon. + */ +interface IBeacon { + /** + * @dev Must return an address that can be used as a delegate call target. + * + * {UpgradeableBeacon} will check that this address is a contract. + */ + function implementation() external view returns (address); +} + + +// File @openzeppelin/contracts/interfaces/IERC1967.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol) + +pragma solidity ^0.8.20; + +/** + * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC. + */ +interface IERC1967 { + /** + * @dev Emitted when the implementation is upgraded. + */ + event Upgraded(address indexed implementation); + + /** + * @dev Emitted when the admin account has changed. + */ + event AdminChanged(address previousAdmin, address newAdmin); + + /** + * @dev Emitted when the beacon is changed. + */ + event BeaconUpgraded(address indexed beacon); +} + + +// File @openzeppelin/contracts/utils/Errors.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol) + +pragma solidity ^0.8.20; + +/** + * @dev Collection of common custom errors used in multiple contracts + * + * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. + * It is recommended to avoid relying on the error API for critical functionality. + * + * _Available since v5.1._ + */ +library Errors { + /** + * @dev The ETH balance of the account is not enough to perform the operation. + */ + error InsufficientBalance(uint256 balance, uint256 needed); + + /** + * @dev A call to an address target failed. The target may have reverted. + */ + error FailedCall(); + + /** + * @dev The deployment failed. + */ + error FailedDeployment(); + + /** + * @dev A necessary precompile is missing. + */ + error MissingPrecompile(address); +} + + +// File @openzeppelin/contracts/utils/Address.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol) + +pragma solidity ^0.8.20; + +/** + * @dev Collection of functions related to the address type + */ +library Address { + /** + * @dev There's no code at `target` (it is not a contract). + */ + error AddressEmptyCode(address target); + + /** + * @dev Replacement for Solidity's `transfer`: sends `amount` wei to + * `recipient`, forwarding all available gas and reverting on errors. + * + * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost + * of certain opcodes, possibly making contracts go over the 2300 gas limit + * imposed by `transfer`, making them unable to receive funds via + * `transfer`. {sendValue} removes this limitation. + * + * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. + * + * IMPORTANT: because control is transferred to `recipient`, care must be + * taken to not create reentrancy vulnerabilities. Consider using + * {ReentrancyGuard} or the + * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. + */ + function sendValue(address payable recipient, uint256 amount) internal { + if (address(this).balance < amount) { + revert Errors.InsufficientBalance(address(this).balance, amount); + } + + (bool success, ) = recipient.call{value: amount}(""); + if (!success) { + revert Errors.FailedCall(); + } + } + + /** + * @dev Performs a Solidity function call using a low level `call`. A + * plain `call` is an unsafe replacement for a function call: use this + * function instead. + * + * If `target` reverts with a revert reason or custom error, it is bubbled + * up by this function (like regular Solidity function calls). However, if + * the call reverted with no returned reason, this function reverts with a + * {Errors.FailedCall} error. + * + * Returns the raw returned data. To convert to the expected return value, + * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. + * + * Requirements: + * + * - `target` must be a contract. + * - calling `target` with `data` must not revert. + */ + function functionCall(address target, bytes memory data) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but also transferring `value` wei to `target`. + * + * Requirements: + * + * - the calling contract must have an ETH balance of at least `value`. + * - the called Solidity function must be `payable`. + */ + function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { + if (address(this).balance < value) { + revert Errors.InsufficientBalance(address(this).balance, value); + } + (bool success, bytes memory returndata) = target.call{value: value}(data); + return verifyCallResultFromTarget(target, success, returndata); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a static call. + */ + function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { + (bool success, bytes memory returndata) = target.staticcall(data); + return verifyCallResultFromTarget(target, success, returndata); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a delegate call. + */ + function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { + (bool success, bytes memory returndata) = target.delegatecall(data); + return verifyCallResultFromTarget(target, success, returndata); + } + + /** + * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target + * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case + * of an unsuccessful call. + */ + function verifyCallResultFromTarget( + address target, + bool success, + bytes memory returndata + ) internal view returns (bytes memory) { + if (!success) { + _revert(returndata); + } else { + // only check if target is a contract if the call was successful and the return data is empty + // otherwise we already know that it was a contract + if (returndata.length == 0 && target.code.length == 0) { + revert AddressEmptyCode(target); + } + return returndata; + } + } + + /** + * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the + * revert reason or with a default {Errors.FailedCall} error. + */ + function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { + if (!success) { + _revert(returndata); + } else { + return returndata; + } + } + + /** + * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}. + */ + function _revert(bytes memory returndata) private pure { + // Look for revert reason and bubble it up if present + if (returndata.length > 0) { + // The easiest way to bubble the revert reason is using memory via assembly + assembly ("memory-safe") { + let returndata_size := mload(returndata) + revert(add(32, returndata), returndata_size) + } + } else { + revert Errors.FailedCall(); + } + } +} + + +// File @openzeppelin/contracts/utils/StorageSlot.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol) +// This file was procedurally generated from scripts/generate/templates/StorageSlot.js. + +pragma solidity ^0.8.20; + +/** + * @dev Library for reading and writing primitive types to specific storage slots. + * + * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. + * This library helps with reading and writing to such slots without the need for inline assembly. + * + * The functions in this library return Slot structs that contain a `value` member that can be used to read or write. + * + * Example usage to set ERC-1967 implementation slot: + * ```solidity + * contract ERC1967 { + * // Define the slot. Alternatively, use the SlotDerivation library to derive the slot. + * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + * + * function _getImplementation() internal view returns (address) { + * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; + * } + * + * function _setImplementation(address newImplementation) internal { + * require(newImplementation.code.length > 0); + * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; + * } + * } + * ``` + * + * TIP: Consider using this library along with {SlotDerivation}. + */ +library StorageSlot { + struct AddressSlot { + address value; + } + + struct BooleanSlot { + bool value; + } + + struct Bytes32Slot { + bytes32 value; + } + + struct Uint256Slot { + uint256 value; + } + + struct Int256Slot { + int256 value; + } + + struct StringSlot { + string value; + } + + struct BytesSlot { + bytes value; + } + + /** + * @dev Returns an `AddressSlot` with member `value` located at `slot`. + */ + function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns a `BooleanSlot` with member `value` located at `slot`. + */ + function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns a `Bytes32Slot` with member `value` located at `slot`. + */ + function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns a `Uint256Slot` with member `value` located at `slot`. + */ + function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns a `Int256Slot` with member `value` located at `slot`. + */ + function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns a `StringSlot` with member `value` located at `slot`. + */ + function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns an `StringSlot` representation of the string storage pointer `store`. + */ + function getStringSlot(string storage store) internal pure returns (StringSlot storage r) { + assembly ("memory-safe") { + r.slot := store.slot + } + } + + /** + * @dev Returns a `BytesSlot` with member `value` located at `slot`. + */ + function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`. + */ + function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) { + assembly ("memory-safe") { + r.slot := store.slot + } + } +} + + +// File @openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.1.0) (proxy/ERC1967/ERC1967Utils.sol) + +pragma solidity ^0.8.21; + + + + +/** + * @dev This library provides getters and event emitting update functions for + * https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots. + */ +library ERC1967Utils { + /** + * @dev Storage slot with the address of the current implementation. + * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1. + */ + // solhint-disable-next-line private-vars-leading-underscore + bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + + /** + * @dev The `implementation` of the proxy is invalid. + */ + error ERC1967InvalidImplementation(address implementation); + + /** + * @dev The `admin` of the proxy is invalid. + */ + error ERC1967InvalidAdmin(address admin); + + /** + * @dev The `beacon` of the proxy is invalid. + */ + error ERC1967InvalidBeacon(address beacon); + + /** + * @dev An upgrade function sees `msg.value > 0` that may be lost. + */ + error ERC1967NonPayable(); + + /** + * @dev Returns the current implementation address. + */ + function getImplementation() internal view returns (address) { + return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value; + } + + /** + * @dev Stores a new address in the ERC-1967 implementation slot. + */ + function _setImplementation(address newImplementation) private { + if (newImplementation.code.length == 0) { + revert ERC1967InvalidImplementation(newImplementation); + } + StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation; + } + + /** + * @dev Performs implementation upgrade with additional setup call if data is nonempty. + * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected + * to avoid stuck value in the contract. + * + * Emits an {IERC1967-Upgraded} event. + */ + function upgradeToAndCall(address newImplementation, bytes memory data) internal { + _setImplementation(newImplementation); + emit IERC1967.Upgraded(newImplementation); + + if (data.length > 0) { + Address.functionDelegateCall(newImplementation, data); + } else { + _checkNonPayable(); + } + } + + /** + * @dev Storage slot with the admin of the contract. + * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1. + */ + // solhint-disable-next-line private-vars-leading-underscore + bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; + + /** + * @dev Returns the current admin. + * + * TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using + * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. + * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103` + */ + function getAdmin() internal view returns (address) { + return StorageSlot.getAddressSlot(ADMIN_SLOT).value; + } + + /** + * @dev Stores a new address in the ERC-1967 admin slot. + */ + function _setAdmin(address newAdmin) private { + if (newAdmin == address(0)) { + revert ERC1967InvalidAdmin(address(0)); + } + StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin; + } + + /** + * @dev Changes the admin of the proxy. + * + * Emits an {IERC1967-AdminChanged} event. + */ + function changeAdmin(address newAdmin) internal { + emit IERC1967.AdminChanged(getAdmin(), newAdmin); + _setAdmin(newAdmin); + } + + /** + * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. + * This is the keccak-256 hash of "eip1967.proxy.beacon" subtracted by 1. + */ + // solhint-disable-next-line private-vars-leading-underscore + bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; + + /** + * @dev Returns the current beacon. + */ + function getBeacon() internal view returns (address) { + return StorageSlot.getAddressSlot(BEACON_SLOT).value; + } + + /** + * @dev Stores a new beacon in the ERC-1967 beacon slot. + */ + function _setBeacon(address newBeacon) private { + if (newBeacon.code.length == 0) { + revert ERC1967InvalidBeacon(newBeacon); + } + + StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon; + + address beaconImplementation = IBeacon(newBeacon).implementation(); + if (beaconImplementation.code.length == 0) { + revert ERC1967InvalidImplementation(beaconImplementation); + } + } + + /** + * @dev Change the beacon and trigger a setup call if data is nonempty. + * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected + * to avoid stuck value in the contract. + * + * Emits an {IERC1967-BeaconUpgraded} event. + * + * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since + * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for + * efficiency. + */ + function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal { + _setBeacon(newBeacon); + emit IERC1967.BeaconUpgraded(newBeacon); + + if (data.length > 0) { + Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data); + } else { + _checkNonPayable(); + } + } + + /** + * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract + * if an upgrade doesn't perform an initialization call. + */ + function _checkNonPayable() private { + if (msg.value > 0) { + revert ERC1967NonPayable(); + } + } +} + + +// File @openzeppelin/contracts/proxy/Proxy.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Proxy.sol) + +pragma solidity ^0.8.20; + +/** + * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM + * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to + * be specified by overriding the virtual {_implementation} function. + * + * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a + * different contract through the {_delegate} function. + * + * The success and return data of the delegated call will be returned back to the caller of the proxy. + */ +abstract contract Proxy { + /** + * @dev Delegates the current call to `implementation`. + * + * This function does not return to its internal call site, it will return directly to the external caller. + */ + function _delegate(address implementation) internal virtual { + assembly { + // Copy msg.data. We take full control of memory in this inline assembly + // block because it will not return to Solidity code. We overwrite the + // Solidity scratch pad at memory position 0. + calldatacopy(0, 0, calldatasize()) + + // Call the implementation. + // out and outsize are 0 because we don't know the size yet. + let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) + + // Copy the returned data. + returndatacopy(0, 0, returndatasize()) + + switch result + // delegatecall returns 0 on error. + case 0 { + revert(0, returndatasize()) + } + default { + return(0, returndatasize()) + } + } + } + + /** + * @dev This is a virtual function that should be overridden so it returns the address to which the fallback + * function and {_fallback} should delegate. + */ + function _implementation() internal view virtual returns (address); + + /** + * @dev Delegates the current call to the address returned by `_implementation()`. + * + * This function does not return to its internal call site, it will return directly to the external caller. + */ + function _fallback() internal virtual { + _delegate(_implementation()); + } + + /** + * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other + * function in the contract matches the call data. + */ + fallback() external payable virtual { + _fallback(); + } +} + + +// File @openzeppelin/contracts/proxy/beacon/BeaconProxy.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.1.0) (proxy/beacon/BeaconProxy.sol) + +pragma solidity ^0.8.20; + + + +/** + * @dev This contract implements a proxy that gets the implementation address for each call from an {UpgradeableBeacon}. + * + * The beacon address can only be set once during construction, and cannot be changed afterwards. It is stored in an + * immutable variable to avoid unnecessary storage reads, and also in the beacon storage slot specified by + * https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] so that it can be accessed externally. + * + * CAUTION: Since the beacon address can never be changed, you must ensure that you either control the beacon, or trust + * the beacon to not upgrade the implementation maliciously. + * + * IMPORTANT: Do not use the implementation logic to modify the beacon storage slot. Doing so would leave the proxy in + * an inconsistent state where the beacon storage slot does not match the beacon address. + */ +contract BeaconProxy is Proxy { + // An immutable address for the beacon to avoid unnecessary SLOADs before each delegate call. + address private immutable _beacon; + + /** + * @dev Initializes the proxy with `beacon`. + * + * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This + * will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity + * constructor. + * + * Requirements: + * + * - `beacon` must be a contract with the interface {IBeacon}. + * - If `data` is empty, `msg.value` must be zero. + */ + constructor(address beacon, bytes memory data) payable { + ERC1967Utils.upgradeBeaconToAndCall(beacon, data); + _beacon = beacon; + } + + /** + * @dev Returns the current implementation address of the associated beacon. + */ + function _implementation() internal view virtual override returns (address) { + return IBeacon(_getBeacon()).implementation(); + } + + /** + * @dev Returns the beacon. + */ + function _getBeacon() internal view virtual returns (address) { + return _beacon; + } +} + + +// File @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol@v5.1.0 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol) + +pragma solidity ^0.8.20; + + + +/** + * @title SafeERC20 + * @dev Wrappers around ERC-20 operations that throw on failure (when the token + * contract returns false). Tokens that return no value (and instead revert or + * throw on failure) are also supported, non-reverting calls are assumed to be + * successful. + * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, + * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. + */ +library SafeERC20 { + /** + * @dev An operation with an ERC-20 token failed. + */ + error SafeERC20FailedOperation(address token); + + /** + * @dev Indicates a failed `decreaseAllowance` request. + */ + error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease); + + /** + * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, + * non-reverting calls are assumed to be successful. + */ + function safeTransfer(IERC20 token, address to, uint256 value) internal { + _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); + } + + /** + * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the + * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. + */ + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { + _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value))); + } + + /** + * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, + * non-reverting calls are assumed to be successful. + * + * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client" + * smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using + * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract + * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior. + */ + function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { + uint256 oldAllowance = token.allowance(address(this), spender); + forceApprove(token, spender, oldAllowance + value); + } + + /** + * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no + * value, non-reverting calls are assumed to be successful. + * + * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client" + * smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using + * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract + * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior. + */ + function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal { + unchecked { + uint256 currentAllowance = token.allowance(address(this), spender); + if (currentAllowance < requestedDecrease) { + revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease); + } + forceApprove(token, spender, currentAllowance - requestedDecrease); + } + } + + /** + * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, + * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval + * to be set to zero before setting it to a non-zero value, such as USDT. + * + * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function + * only sets the "standard" allowance. Any temporary allowance will remain active, in addition to the value being + * set here. + */ + function forceApprove(IERC20 token, address spender, uint256 value) internal { + bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value)); + + if (!_callOptionalReturnBool(token, approvalCall)) { + _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0))); + _callOptionalReturn(token, approvalCall); + } + } + + /** + * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no + * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when + * targeting contracts. + * + * Reverts if the returned value is other than `true`. + */ + function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal { + if (to.code.length == 0) { + safeTransfer(token, to, value); + } else if (!token.transferAndCall(to, value, data)) { + revert SafeERC20FailedOperation(address(token)); + } + } + + /** + * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target + * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when + * targeting contracts. + * + * Reverts if the returned value is other than `true`. + */ + function transferFromAndCallRelaxed( + IERC1363 token, + address from, + address to, + uint256 value, + bytes memory data + ) internal { + if (to.code.length == 0) { + safeTransferFrom(token, from, to, value); + } else if (!token.transferFromAndCall(from, to, value, data)) { + revert SafeERC20FailedOperation(address(token)); + } + } + + /** + * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no + * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when + * targeting contracts. + * + * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}. + * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall} + * once without retrying, and relies on the returned value to be true. + * + * Reverts if the returned value is other than `true`. + */ + function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal { + if (to.code.length == 0) { + forceApprove(token, to, value); + } else if (!token.approveAndCall(to, value, data)) { + revert SafeERC20FailedOperation(address(token)); + } + } + + /** + * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement + * on the return value: the return value is optional (but if data is returned, it must not be false). + * @param token The token targeted by the call. + * @param data The call data (encoded using abi.encode or one of its variants). + * + * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements. + */ + function _callOptionalReturn(IERC20 token, bytes memory data) private { + uint256 returnSize; + uint256 returnValue; + assembly ("memory-safe") { + let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20) + // bubble errors + if iszero(success) { + let ptr := mload(0x40) + returndatacopy(ptr, 0, returndatasize()) + revert(ptr, returndatasize()) + } + returnSize := returndatasize() + returnValue := mload(0) + } + + if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) { + revert SafeERC20FailedOperation(address(token)); + } + } + + /** + * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement + * on the return value: the return value is optional (but if data is returned, it must not be false). + * @param token The token targeted by the call. + * @param data The call data (encoded using abi.encode or one of its variants). + * + * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead. + */ + function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { + bool success; + uint256 returnSize; + uint256 returnValue; + assembly ("memory-safe") { + success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20) + returnSize := returndatasize() + returnValue := mload(0) + } + return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1); + } +} + + +// File contracts/interfaces/IInceptionAssetHandler.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.20; + +interface IInceptionAssetHandler { + /*////////////////////////// + ////// GET functions ////// + ////////////////////////*/ + + /// @dev returns total balance of Vault in the asset + function totalAssets() external view returns (uint256); +} + + +// File contracts/interfaces/IInceptionVaultErrors.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.20; + +interface IInceptionVaultErrors { + error TransferAssetFailed(address assetAddress); + + error TransferAssetFromFailed(address assetAddress); + + error InsufficientCapacity(uint256 capacity); + + error InceptionOnPause(); + + error InconsistentData(); + + error ApproveError(); + + error NullParams(); + + error ParameterExceedsLimits(uint256 param); + + error NotContract(); + + error DepositInconsistentResultedState(); + + error OperatorNotRegistered(); + + error RestakerNotRegistered(); + + error ImplementationNotSet(); + + error OnlyOperatorAllowed(); + + error AlreadyDelegated(); + + error DelegationManagerImmutable(); + + error IsNotAbleToRedeem(); + + error LowerMinAmount(uint256 minAmount); + + error ZeroFlashWithdrawFee(); + + /// TVL errors + + error ExceedsMaxPerDeposit(uint256 max, uint256 amount); + + error ExceedsMaxTotalDeposited(uint256 max, uint256 amount); + + /// EigenLayer Operators + + error NotEigenLayerOperator(); + + error EigenLayerOperatorAlreadyExists(); +} + + +// File contracts/lib/Convert.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.7; + +library Convert { + function saturatingMultiply( + uint256 a, + uint256 b + ) internal pure returns (uint256) { + unchecked { + if (a == 0) return 0; + uint256 c = a * b; + if (c / a != b) return type(uint256).max; + return c; + } + } + + function saturatingAdd( + uint256 a, + uint256 b + ) internal pure returns (uint256) { + unchecked { + uint256 c = a + b; + if (c < a) return type(uint256).max; + return c; + } + } + + // Preconditions: + // 1. a may be arbitrary (up to 2 ** 256 - 1) + // 2. b * c < 2 ** 256 + // Returned value: min(floor((a * b) / c), 2 ** 256 - 1) + function multiplyAndDivideFloor( + uint256 a, + uint256 b, + uint256 c + ) internal pure returns (uint256) { + return + saturatingAdd( + saturatingMultiply(a / c, b), + ((a % c) * b) / c // can't fail because of assumption 2. + ); + } + + // Preconditions: + // 1. a may be arbitrary (up to 2 ** 256 - 1) + // 2. b * c < 2 ** 256 + // Returned value: min(ceil((a * b) / c), 2 ** 256 - 1) + function multiplyAndDivideCeil( + uint256 a, + uint256 b, + uint256 c + ) internal pure returns (uint256) { + require(c != 0, "c == 0"); + return + saturatingAdd( + saturatingMultiply(a / c, b), + ((a % c) * b + (c - 1)) / c // can't fail because of assumption 2. + ); + } +} + + +// File contracts/lib/InceptionLibrary.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.24; + +/// @author The InceptionLRT team +/// @title The InceptionLibrary library +/// @dev It serves two primary functions: +/// 1. Flash vault-related logic for the calculations of deposit bonus and withdrawal fee +/// 2. Conversions between shares and assets +library InceptionLibrary { + uint256 constant MAX_PERCENT = 100 * 1e8; + + /************************************************************ + ************************ Flash Vault *********************** + ************************************************************/ + + function calculateDepositBonus( + uint256 amount, + uint256 capacity, + uint256 optimalCapacity, + uint256 optimalBonusRate, + uint256 maxDepositBonusRate, + uint256 targetCapacity + ) external pure returns (uint256 bonus) { + /// @dev the utilization rate is in the range [0:25] % + if (amount > 0 && capacity < optimalCapacity) { + uint256 replenished = amount; + if (optimalCapacity < capacity + amount) + replenished = optimalCapacity - capacity; + + uint256 bonusSlope = ((maxDepositBonusRate - optimalBonusRate) * + 1e18) / ((optimalCapacity * 1e18) / targetCapacity); + uint256 bonusPercent = maxDepositBonusRate - + (bonusSlope * (capacity + replenished / 2)) / + targetCapacity; + + capacity += replenished; + bonus += (replenished * bonusPercent) / MAX_PERCENT; + amount -= replenished; + } + /// @dev the utilization rate is in the range [25: ] % + if (amount > 0 && capacity <= targetCapacity) { + uint256 replenished = targetCapacity > capacity + amount + ? amount + : targetCapacity - capacity; + + bonus += (replenished * optimalBonusRate) / MAX_PERCENT; + } + } + + function calculateWithdrawalFee( + uint256 amount, + uint256 capacity, + uint256 optimalCapacity, + uint256 optimaFeeRate, + uint256 maxFlashWithdrawalFeeRate, + uint256 targetCapacity + ) external pure returns (uint256 fee) { + /// @dev the utilization rate is in the range [100:25] % + if (amount > 0 && capacity > optimalCapacity) { + uint256 replenished = amount; + if (capacity - amount < optimalCapacity) + replenished = capacity - optimalCapacity; + + fee += (replenished * optimaFeeRate) / MAX_PERCENT; + amount -= replenished; + capacity -= replenished; + if (fee == 0) ++fee; + } + /// @dev the utilization rate is in the range [25:0] % + if (amount > 0) { + uint256 feeSlope = ((maxFlashWithdrawalFeeRate - optimaFeeRate) * + 1e18) / ((optimalCapacity * 1e18) / targetCapacity); + uint256 bonusPercent = maxFlashWithdrawalFeeRate - + (feeSlope * (capacity - amount / 2)) / + targetCapacity; + fee += (amount * bonusPercent) / MAX_PERCENT; + if (fee == 0) ++fee; + } + if (fee == 0) ++fee; + } +} + + +// File contracts/assets-handler/InceptionAssetsHandler.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.24; + + + + + + +/// @author The InceptionLRT team +/// @title The InceptionAssetsHandler contract +/// @dev Handles operations with the corresponding asset +abstract contract InceptionAssetsHandler is + PausableUpgradeable, + ReentrancyGuardUpgradeable, + Ownable2StepUpgradeable, + IInceptionVaultErrors, + IInceptionAssetHandler +{ + using SafeERC20 for IERC20; + + IERC20 internal _asset; + + uint256[49] private __reserver; + + function __InceptionAssetsHandler_init( + IERC20 assetAddress + ) internal onlyInitializing { + __Pausable_init(); + __ReentrancyGuard_init(); + + _asset = assetAddress; + } + + /// @dev returns the address of the underlying token used for the vault for accounting, depositing, withdrawing. + function asset() public view returns (address) { + return address(_asset); + } + + /// @dev returns the balance of iVault in the asset + function totalAssets() public view override returns (uint256) { + return _asset.balanceOf(address(this)); + } + + function _transferAssetFrom(address staker, uint256 amount) internal { + if (!_asset.transferFrom(staker, address(this), amount)) + revert TransferAssetFromFailed(address(_asset)); + } + + function _transferAssetTo(address receiver, uint256 amount) internal { + if (!_asset.transfer(receiver, amount)) + revert TransferAssetFailed(address(_asset)); + } + + /// @dev The functions below serve the proper withdrawal and claiming operations + /// @notice Since a particular LST loses some wei on each transfer, + /// this needs to be taken into account + function _getAssetWithdrawAmount( + uint256 amount + ) internal view virtual returns (uint256) { + return amount; + } + + function _getAssetReceivedAmount( + uint256 amount + ) internal view virtual returns (uint256) { + return amount; + } +} + + +// File contracts/interfaces/IStrategy.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.20; + +interface IStrategyBase { + function deposit(IERC20 token, uint256 amount) external returns (uint256); + + function withdraw( + address depositor, + IERC20 token, + uint256 amountShares + ) external; + + function sharesToUnderlying( + uint256 amountShares + ) external returns (uint256); + + function underlyingToShares( + uint256 amountUnderlying + ) external returns (uint256); + + function userUnderlying(address user) external returns (uint256); + + function sharesToUnderlyingView( + uint256 amountShares + ) external view returns (uint256); + + function underlyingToSharesView( + uint256 amountUnderlying + ) external view returns (uint256); + + /** + * @notice convenience function for fetching the current underlying value of all of the `user`'s shares in + * this strategy. In contrast to `userUnderlying`, this function guarantees no state modifications + */ + function userUnderlyingView(address user) external view returns (uint256); + + /// @notice The underlying token for shares in this Strategy + function underlyingToken() external view returns (IERC20); + + /// @notice The total number of extant shares in this Strategy + function totalShares() external view returns (uint256); + + /// @notice Returns either a brief string explaining the strategy's goal & purpose, or a link to metadata that explains in more detail. + function explanation() external view returns (string memory); +} + +interface IStrategy is IStrategyBase { + /// @notice Simple getter function that returns the current values of `maxPerDeposit` and `maxTotalDeposits`. + function getTVLLimits() external view returns (uint256, uint256); +} + + +// File contracts/interfaces/IDelegationManager.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.20; + +interface IDelegationManager { + // @notice Struct that bundles together a signature and an expiration time for the signature. Used primarily for stack management. + struct SignatureWithExpiry { + // the signature itself, formatted as a single bytes object + bytes signature; + // the expiration timestamp (UTC) of the signature + uint256 expiry; + } + + // @notice Struct that bundles together a signature, a salt for uniqueness, and an expiration time for the signature. Used primarily for stack management. + struct SignatureWithSaltAndExpiry { + // the signature itself, formatted as a single bytes object + bytes signature; + // the salt used to generate the signature + bytes32 salt; + // the expiration timestamp (UTC) of the signature + uint256 expiry; + } + + struct QueuedWithdrawalParams { + // Array of strategies that the QueuedWithdrawal contains + IStrategy[] strategies; + // Array containing the amount of shares in each Strategy in the `strategies` array + uint256[] shares; + // The address of the withdrawer + address withdrawer; + } + + struct Withdrawal { + // The address that originated the Withdrawal + address staker; + // The address that the staker was delegated to at the time that the Withdrawal was created + address delegatedTo; + // The address that can complete the Withdrawal + will receive funds when completing the withdrawal + address withdrawer; + // Nonce used to guarantee that otherwise identical withdrawals have unique hashes + uint256 nonce; + // Block number when the Withdrawal was created + uint32 startBlock; + // Array of strategies that the Withdrawal contains + IStrategy[] strategies; + // Array containing the amount of shares in each Strategy in the `strategies` array + uint256[] shares; + } + + function delegateTo( + address operator, + SignatureWithExpiry memory approverSignatureAndExpiry, + bytes32 approverSalt + ) external; + + function undelegate(address staker) external; + + event WithdrawalQueued(bytes32 withdrawalRoot, Withdrawal withdrawal); + + function completeQueuedWithdrawal( + Withdrawal calldata withdrawal, + IERC20[] calldata tokens, + uint256 middlewareTimesIndex, + bool receiveAsTokens + ) external; + + function completeQueuedWithdrawals( + Withdrawal[] calldata withdrawals, + IERC20[][] calldata tokens, + uint256[] calldata middlewareTimesIndexes, + bool[] calldata receiveAsTokens + ) external; + + function queueWithdrawals( + QueuedWithdrawalParams[] calldata queuedWithdrawalParams + ) external returns (bytes32[] memory); + + function delegatedTo(address staker) external view returns (address); + + function operatorShares( + address operator, + address strategy + ) external view returns (uint256); + + function cumulativeWithdrawalsQueued( + address staker + ) external view returns (uint256); + + function withdrawalDelayBlocks() external view returns (uint256); + + function isOperator(address operator) external view returns (bool); + + function isDelegated(address staker) external view returns (bool); +} + + +// File contracts/interfaces/IStrategyManager.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.20; + +interface IStrategyManager { + struct WithdrawerAndNonce { + address withdrawer; + uint96 nonce; + } + + struct QueuedWithdrawal { + IStrategy[] strategies; + uint256[] shares; + address depositor; + WithdrawerAndNonce withdrawerAndNonce; + uint32 withdrawalStartBlock; + address delegatedAddress; + } + + function withdrawalRootPending(bytes32) external returns (bool); + + function depositIntoStrategy( + IStrategy strategy, + IERC20 token, + uint256 amount + ) external returns (uint256 shares); + + function stakerStrategyShares( + address user, + IStrategy strategy + ) external view returns (uint256 shares); + + function getDeposits( + address depositor + ) external view returns (IStrategy[] memory, uint256[] memory); + + function stakerStrategyListLength( + address staker + ) external view returns (uint256); + + function queueWithdrawal( + uint256[] calldata strategyIndexes, + IStrategy[] calldata strategies, + uint256[] calldata shares, + address withdrawer, + bool undelegateIfPossible + ) external returns (bytes32); + + function completeQueuedWithdrawal( + QueuedWithdrawal calldata queuedWithdrawal, + IERC20[] calldata tokens, + uint256 middlewareTimesIndex, + bool receiveAsTokens + ) external; + + function completeQueuedWithdrawals( + QueuedWithdrawal[] calldata queuedWithdrawals, + IERC20[][] calldata tokens, + uint256[] calldata middlewareTimesIndexes, + bool[] calldata receiveAsTokens + ) external; + + function slashShares( + address slashedAddress, + address recipient, + IStrategy[] calldata strategies, + IERC20[] calldata tokens, + uint256[] calldata strategyIndexes, + uint256[] calldata shareAmounts + ) external; + + function slashQueuedWithdrawal( + address recipient, + QueuedWithdrawal calldata queuedWithdrawal, + IERC20[] calldata tokens, + uint256[] calldata indicesToSkip + ) external; + + function calculateWithdrawalRoot( + QueuedWithdrawal memory queuedWithdrawal + ) external pure returns (bytes32); + + function addStrategiesToDepositWhitelist( + IStrategy[] calldata strategiesToWhitelist + ) external; + + function removeStrategiesFromDepositWhitelist( + IStrategy[] calldata strategiesToRemoveFromWhitelist + ) external; + + function withdrawalDelayBlocks() external view returns (uint256); + + function numWithdrawalsQueued( + address account + ) external view returns (uint256); + + function delegation() external view returns (address); +} + + +// File contracts/interfaces/IEigenLayerHandler.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.20; + +interface IEigenLayerHandler { + /// @dev Epoch represents the period of the rebalancing process + /// @dev Receiver is a receiver of assets in claim() + /// @dev Amount represents the exact amount of the asset to be claimed + struct Withdrawal { + uint256 epoch; + address receiver; + uint256 amount; + } + + event StartWithdrawal( + address indexed stakerAddress, + IStrategy strategy, + uint256 shares, + uint32 withdrawalStartBlock, + address delegatedAddress, + uint256 nonce + ); + + event DepositedToEL(address indexed stakerAddress, uint256 amount); + + event DelegatedTo( + address indexed stakerAddress, + address indexed operatorAddress, + uint256 amount + ); + + event WithdrawalClaimed(uint256 totalAmount); + + event DelegationManagerChanged(address prevValue, address newValue); + + event TargetCapacityChanged(uint256 prevValue, uint256 newValue); +} + + +// File contracts/interfaces/IInceptionRestaker.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.20; + +interface IInceptionRestaker { + event StartWithdrawal( + address indexed stakerAddress, + bytes32 withdrawalRoot, + IStrategy[] strategies, + uint256[] shares, + uint32 withdrawalStartBlock, + address delegatedAddress, + uint256 nonce + ); + + event Withdrawal( + bytes32 withdrawalRoot, + IStrategy[] strategies, + uint256[] shares, + uint32 withdrawalStartBlock + ); + + function depositAssetIntoStrategy(uint256 amount) external; + + function delegateToOperator( + address operator, + bytes32 approverSalt, + IDelegationManager.SignatureWithExpiry memory approverSignatureAndExpiry + ) external; + + function withdrawFromEL(uint256 shares) external; + + function claimWithdrawals( + IDelegationManager.Withdrawal[] calldata withdrawals, + IERC20[][] calldata tokens, + uint256[] calldata middlewareTimesIndexes, + bool[] calldata receiveAsTokens + ) external returns (uint256); +} + + +// File contracts/eigenlayer-handler/EigenLayerHandlerMock.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.24; + + + + +interface IMockStrategy { + function deposit(uint256 amount) external; + + function withdraw(uint256 amount) external; +} + +/// @author The InceptionLRT team +/// @title The EigenLayerHandler contract +/// @dev Serves communication with external EigenLayer protocol +/// @dev Specifically, this includes depositing, and handling withdrawal requests +abstract contract EigenLayerHandlerMock is InceptionAssetsHandler, IEigenLayerHandler { + address public strategy; + + uint256 public epoch; + + /// @dev inception operator + address internal _operator; + + /// @dev represents the pending amount to be redeemed by claimers, + /// @notice + amount to undelegate from EigenLayer + uint256 public totalAmountToWithdraw; + + /// @dev represents the amount pending processing until it is claimed + /// @dev amount measured in asset + uint256 internal _pendingWithdrawalAmount; + + Withdrawal[] public claimerWithdrawalsQueue; + + address internal constant _MOCK_ADDRESS = + 0x0000000000000000000000000012345000000000; + + /// @dev heap reserved for the claimers + uint256 public redeemReservedAmount; + + // /// @dev EigenLayer operator -> inception staker + // mapping(address => address) internal _operatorRestakers; + // address[] public restakers; + + uint256 public depositBonusAmount; + + /// @dev measured in percentage, MAX_TARGET_PERCENT - 100% + uint256 public targetCapacity; + + uint256 public constant MAX_TARGET_PERCENT = 100 * 1e18; + + /// @dev constants are not stored in the storage + uint256[50 - 13] private __reserver; + + modifier onlyOperator() { + if (msg.sender != _operator) revert OnlyOperatorAllowed(); + _; + } + + function __EigenLayerHandler_init( + address _assetStrategy, + IERC20 underlyingToken + ) internal onlyInitializing { + strategy = _assetStrategy; + __InceptionAssetsHandler_init(underlyingToken); + } + + /*////////////////////////////// + ////// Deposit functions ////// + ////////////////////////////*/ + + /// @dev checks whether it's still possible to deposit into the strategy + function _beforeDepositAssetIntoStrategy(uint256 amount) internal view { + if (amount > getFreeBalance()) + revert InsufficientCapacity(totalAssets()); + } + + /// @dev deposits asset to the corresponding strategy + function _depositAssetIntoStrategy( + address restaker, + uint256 amount + ) internal { + _asset.approve(restaker, amount); + IInceptionRestaker(restaker).depositAssetIntoStrategy(amount); + + emit DepositedToEL(restaker, amount); + } + + /// @dev delegates assets held in the strategy to the EL operator. + function _delegateToOperator( + address restaker, + address elOperator, + bytes32 approverSalt, + IDelegationManager.SignatureWithExpiry memory approverSignatureAndExpiry + ) internal { + IInceptionRestaker(restaker).delegateToOperator( + elOperator, + approverSalt, + approverSignatureAndExpiry + ); + } + + /*///////////////////////////////// + ////// Withdrawal functions ////// + ///////////////////////////////*/ + + /// @dev performs creating a withdrawal request from EigenLayer + /// @dev requires a specific amount to withdraw + function undelegateVault( + uint256 amount + ) external whenNotPaused nonReentrant onlyOperator { + IMockStrategy(strategy).withdraw(amount); + //emit WithdrawalClaimed(withdrawnAmount); + } + + // /// @dev claims completed withdrawals from EigenLayer, if they exist + // function claimCompletedWithdrawals( + // address restaker, + // IDelegationManager.Withdrawal[] calldata withdrawals + // ) public whenNotPaused nonReentrant { + + + // _pendingWithdrawalAmount = _pendingWithdrawalAmount < withdrawnAmount + // ? 0 + // : _pendingWithdrawalAmount - withdrawnAmount; + + // if (_pendingWithdrawalAmount < 7) { + // _pendingWithdrawalAmount = 0; + // } + + // _updateEpoch(availableBalance + withdrawnAmount); + // } + + + function updateEpoch() external whenNotPaused { + _updateEpoch(getFreeBalance()); + } + + /** + * @dev let's calculate how many withdrawals we can cover with the withdrawnAmount + * @dev #init state: + * - balance of the vault: X + * - epoch: means that the vault can handle the withdrawal queue up to the epoch index + * withdrawalQueue[... : epoch]; + * + * @dev #new state: + * - balance of the vault: X + withdrawnAmount + * - we need to recalculate a new value for epoch, new_epoch, to cover withdrawals: + * withdrawalQueue[epoch : new_epoch]; + */ + function _updateEpoch(uint256 availableBalance) internal { + uint256 withdrawalsNum = claimerWithdrawalsQueue.length; + for (uint256 i = epoch; i < withdrawalsNum; ) { + uint256 amount = claimerWithdrawalsQueue[i].amount; + unchecked { + if (amount > availableBalance) { + break; + } + redeemReservedAmount += amount; + availableBalance -= amount; + ++epoch; + ++i; + } + } + } + + + /*////////////////////////// + ////// GET functions ////// + ////////////////////////*/ + + /// @dev returns the total deposited into asset strategy + function getTotalDeposited() public view returns (uint256) { + return + getTotalDelegated() + + totalAssets() + + _pendingWithdrawalAmount - + depositBonusAmount; + } + + function getTotalDelegated() public view returns (uint256 total) { + return total + _asset.balanceOf(strategy); + } + + function getFreeBalance() public view returns (uint256 total) { + return + getFlashCapacity() < _getTargetCapacity() + ? 0 + : getFlashCapacity() - _getTargetCapacity(); + } + + function getPendingWithdrawalAmountFromEL() + public + view + returns (uint256 total) + { + return _pendingWithdrawalAmount; + } + + function getFlashCapacity() public view returns (uint256 total) { + return totalAssets() - redeemReservedAmount - depositBonusAmount; + } + + function _getTargetCapacity() internal view returns (uint256) { + return (targetCapacity * getTotalDeposited()) / MAX_TARGET_PERCENT; + } + + /*////////////////////////// + ////// SET functions ////// + ////////////////////////*/ + + function setTargetFlashCapacity( + uint256 newTargetCapacity + ) external onlyOwner { + emit TargetCapacityChanged(targetCapacity, newTargetCapacity); + targetCapacity = newTargetCapacity; + } +} + + +// File contracts/interfaces/IInceptionToken.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.20; + +interface IInceptionErrors { + error OnlyMinterAllowed(); + + error IsPaused(); + error NotPaused(); + error TransferIsPaused(); +} + +interface IInceptionToken { + event VaultChanged(address prevValue, address newValue); + event RebalancerChanged(address prevValue, address newValue); + + event Paused(address account); + event Unpaused(address account); + + function mint(address account, uint256 amount) external; + + function burn(address account, uint256 amount) external; +} + + +// File contracts/interfaces/IInceptionVault.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.20; + +interface IInceptionVault { + /*/////////////////// + ////// Events ////// + /////////////////*/ + + event Deposit( + address indexed sender, + address indexed receiver, + uint256 amount, + uint256 iShares + ); + + event Withdraw( + address indexed sender, + address indexed receiver, + address indexed owner, + uint256 amount, + uint256 iShares + ); + + event FlashWithdraw( + address indexed sender, + address indexed receiver, + address indexed owner, + uint256 amount, + uint256 iShares, + uint256 fee + ); + + event Redeem( + address indexed sender, + address indexed receiver, + uint256 amount + ); + + event RedeemedRequests(uint256[] withdrawals); + + event OperatorChanged(address prevValue, address newValue); + + event MinAmountChanged(uint256 prevValue, uint256 newValue); + + event ELOperatorAdded(address indexed newELOperator); + + event RestakerDeployed(address indexed restaker); + + event ImplementationUpgraded(address prevValue, address newValue); + + event RatioFeedChanged(address prevValue, address newValue); + + event NameChanged(string prevValue, string newValue); + + event TreasuryChanged(address prevValue, address newValue); + + event ReferralCode(bytes32 indexed code); + + event DepositBonus(uint256 amount); + + event DepositBonusParamsChanged( + uint256 newMaxBonusRate, + uint256 newOptimalBonusRate, + uint256 newDepositUtilizationKink + ); + + event WithdrawFeeParamsChanged( + uint256 newMaxFlashFeeRate, + uint256 newOptimalWithdrawalRate, + uint256 newWithdrawUtilizationKink + ); + + event ProtocolFeeChanged(uint256 prevValue, uint256 newValue); + + event TreasuryUpdated(address indexed prevTreasury, address indexed newTreasury); + event MessageToL1Sent( + uint256 indexed tokensAmount, + uint256 indexed ethAmount + ); + event EthToL1Sent(uint256 callValue); + + error OnlyOwnerOrOperator(); + error ResultISharesZero(); + error RatioFeedNotSet(); + error FreeBalanceIsZero(); + + error EthToL1Failed(uint256 amount); + error MessageToL1Failed(uint256 tokensAmount, uint256 ethAmount); + error CrossChainAdapterNotSet(); + + function inceptionToken() external view returns (IInceptionToken); + + function ratio() external view returns (uint256); +} + + +// File contracts/interfaces/IInceptionRatioFeed.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.20; + +interface IInceptionRatioFeedErrors { + error OperatorUnauthorizedAccount(address account); + + error InconsistentInputData(); + + error NullParams(); + + error RatioThresholdNotSet(); + + error NewRatioThresholdInvalid(); + + error IncorrectDay(uint256 day); + + error IncorrectToken(address token); +} + +interface IInceptionRatioFeed { + event OperatorUpdated(address prevValue, address newValue); + + event RatioUpdated( + address indexed tokenAddress, + uint256 prevValue, + uint256 newValue + ); + + event RatioNotUpdated( + address indexed tokenAddress, + uint256 failedRatio, + string reason + ); + + event RatioThresholdChanged(uint256 prevValue, uint256 newValue); + + function updateRatioBatch( + address[] calldata addresses, + uint256[] calldata ratios + ) external; + + function getRatioFor(address) external view returns (uint256); +} + + +// File contracts/interfaces/IOwnable.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.20; + +interface IOwnable { + function transferOwnership(address newOwner) external; +} + + +// File contracts/vaults/InceptionVaultMock.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity ^0.8.24; + + + + + + + + +/// @author The InceptionLRT team +/// @title The InceptionVault contract +/// @notice Aims to maximize the profit of EigenLayer for a certain asset. +contract InceptionVaultMock is IInceptionVault, EigenLayerHandlerMock { + /// @dev Inception restaking token + IInceptionToken public inceptionToken; + + /// @dev Reduces rounding issues + uint256 public minAmount; + + mapping(address => Withdrawal) private _claimerWithdrawals; + + /// @dev the unique InceptionVault name + string public name; + + /// @dev Factory variables + address private _stakerImplementation; + + /** + * @dev Flash withdrawal params + */ + + /// @dev 100% + uint64 public constant MAX_PERCENT = 100 * 1e8; + + IInceptionRatioFeed public ratioFeed; + address public treasury; + uint64 public protocolFee; + + /// @dev deposit bonus + uint64 public maxBonusRate; + uint64 public optimalBonusRate; + uint64 public depositUtilizationKink; + + /// @dev flash withdrawal fee + uint64 public maxFlashFeeRate; + uint64 public optimalWithdrawalRate; + uint64 public withdrawUtilizationKink; + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + + function initialize( + string memory vaultName, + address operatorAddress, + IERC20 underlyingAsset, + IInceptionToken _inceptionToken, + address _assetStrategy + ) external initializer { + __Ownable_init(msg.sender); + __EigenLayerHandler_init(_assetStrategy, underlyingAsset); + + name = vaultName; + _operator = operatorAddress; + inceptionToken = _inceptionToken; + + minAmount = 100; + + protocolFee = 50 * 1e8; + + /// @dev deposit bonus + depositUtilizationKink = 25 * 1e8; + maxBonusRate = 15 * 1e7; + optimalBonusRate = 25 * 1e6; + + /// @dev withdrawal fee + withdrawUtilizationKink = 25 * 1e8; + maxFlashFeeRate = 30 * 1e7; + optimalWithdrawalRate = 5 * 1e7; + + treasury = msg.sender; + } + + /*////////////////////////////// + ////// Deposit functions ////// + ////////////////////////////*/ + + function __beforeDeposit(address receiver, uint256 amount) internal view { + if (receiver == address(0)) revert NullParams(); + if (amount < minAmount) revert LowerMinAmount(minAmount); + + if (targetCapacity == 0) revert InceptionOnPause(); + } + + function __afterDeposit(uint256 iShares) internal pure { + if (iShares == 0) revert DepositInconsistentResultedState(); + } + + /// @dev Transfers the msg.sender's assets to the vault. + /// @dev Mints Inception tokens in accordance with the current ratio. + /// @dev Issues the tokens to the specified receiver address. + function deposit( + uint256 amount, + address receiver + ) external nonReentrant whenNotPaused returns (uint256) { + return _deposit(amount, msg.sender, receiver); + } + + /// @notice The deposit function but with a referral code + function depositWithReferral( + uint256 amount, + address receiver, + bytes32 code + ) external nonReentrant whenNotPaused returns (uint256) { + emit ReferralCode(code); + return _deposit(amount, msg.sender, receiver); + } + + function _deposit( + uint256 amount, + address sender, + address receiver + ) internal returns (uint256) { + // transfers assets from the sender and returns the received amount + // the actual received amount might slightly differ from the specified amount, + // approximately by -2 wei + __beforeDeposit(receiver, amount); + uint256 depositedBefore = totalAssets(); + uint256 depositBonus; + uint256 availableBonusAmount = depositBonusAmount; + if (availableBonusAmount > 0) { + depositBonus = calculateDepositBonus(amount); + if (depositBonus > availableBonusAmount) { + depositBonus = availableBonusAmount; + depositBonusAmount = 0; + } else { + depositBonusAmount -= depositBonus; + } + emit DepositBonus(depositBonus); + } + + // get the amount from the sender + _transferAssetFrom(sender, amount); + amount = totalAssets() - depositedBefore; + + uint256 iShares = convertToShares(amount + depositBonus); + inceptionToken.mint(receiver, iShares); + __afterDeposit(iShares); + + emit Deposit(sender, receiver, amount, iShares); + + return iShares; + } + + /*///////////////////////////////// + ////// Delegation functions ////// + ///////////////////////////////*/ + + function delegateToOperator( + uint256 amount, + address elOperator, + bytes32 approverSalt, + IDelegationManager.SignatureWithExpiry memory approverSignatureAndExpiry + ) external nonReentrant whenNotPaused onlyOperator { + _asset.approve(strategy, amount); + /// send to the mock address + IMockStrategy(strategy).deposit(amount); + emit DelegatedTo(address(0), elOperator, amount); + } + + /*/////////////////////////////////////// + ///////// Withdrawal functions ///////// + /////////////////////////////////////*/ + + function __beforeWithdraw(address receiver, uint256 iShares) internal view { + if (iShares == 0) revert NullParams(); + if (receiver == address(0)) revert NullParams(); + + if (targetCapacity == 0) revert InceptionOnPause(); + if (treasury == address(0)) revert InceptionOnPause(); + } + + /// @dev Performs burning iToken from mgs.sender + /// @dev Creates a withdrawal requests based on the current ratio + /// @param iShares is measured in Inception token(shares) + function withdraw( + uint256 iShares, + address receiver + ) external whenNotPaused nonReentrant { + __beforeWithdraw(receiver, iShares); + address claimer = msg.sender; + uint256 amount = convertToAssets(iShares); + if (amount < minAmount) revert LowerMinAmount(minAmount); + + // burn Inception token in view of the current ratio + inceptionToken.burn(claimer, iShares); + + // update global state and claimer's state + totalAmountToWithdraw += amount; + Withdrawal storage genRequest = _claimerWithdrawals[receiver]; + genRequest.amount += _getAssetReceivedAmount(amount); + claimerWithdrawalsQueue.push( + Withdrawal({ + epoch: claimerWithdrawalsQueue.length, + receiver: receiver, + amount: _getAssetReceivedAmount(amount) + }) + ); + + emit Withdraw(claimer, receiver, claimer, amount, iShares); + } + + function redeem(address receiver) external whenNotPaused nonReentrant { + (bool isAble, uint256[] memory availableWithdrawals) = isAbleToRedeem( + receiver + ); + if (!isAble) revert IsNotAbleToRedeem(); + + uint256 numOfWithdrawals = availableWithdrawals.length; + uint256[] memory redeemedWithdrawals = new uint256[](numOfWithdrawals); + + Withdrawal storage genRequest = _claimerWithdrawals[receiver]; + uint256 redeemedAmount; + for (uint256 i = 0; i < numOfWithdrawals; ++i) { + uint256 withdrawalNum = availableWithdrawals[i]; + Withdrawal storage request = claimerWithdrawalsQueue[withdrawalNum]; + uint256 amount = request.amount; + // update the genRequest and the global state + genRequest.amount -= amount; + + totalAmountToWithdraw -= _getAssetWithdrawAmount(amount); + redeemReservedAmount -= amount; + redeemedAmount += amount; + redeemedWithdrawals[i] = withdrawalNum; + + delete claimerWithdrawalsQueue[availableWithdrawals[i]]; + } + + // let's update the lowest epoch associated with the claimer + genRequest.epoch = availableWithdrawals[numOfWithdrawals - 1]; + + _transferAssetTo(receiver, redeemedAmount); + + emit RedeemedRequests(redeemedWithdrawals); + emit Redeem(msg.sender, receiver, redeemedAmount); + } + + /*///////////////////////////////////////////// + ///////// Flash Withdrawal functions ///////// + ///////////////////////////////////////////*/ + + /// @dev Performs burning iToken from mgs.sender + /// @dev Creates a withdrawal requests based on the current ratio + /// @param iShares is measured in Inception token(shares) + function flashWithdraw( + uint256 iShares, + address receiver + ) external whenNotPaused nonReentrant { + __beforeWithdraw(receiver, iShares); + + address claimer = msg.sender; + uint256 amount = convertToAssets(iShares); + + if (amount < minAmount) revert LowerMinAmount(minAmount); + + // burn Inception token in view of the current ratio + inceptionToken.burn(claimer, iShares); + + uint256 fee = calculateFlashWithdrawFee(amount); + if (fee == 0) revert ZeroFlashWithdrawFee(); + uint256 protocolWithdrawalFee = (fee * protocolFee) / MAX_PERCENT; + + amount -= fee; + depositBonusAmount += (fee - protocolWithdrawalFee); + + /// @notice instant transfer fee to the treasury + _transferAssetTo(treasury, protocolWithdrawalFee); + /// @notice instant transfer amount to the receiver + _transferAssetTo(receiver, amount); + + emit FlashWithdraw(claimer, receiver, claimer, amount, iShares, fee); + } + + /// @notice Function to calculate deposit bonus based on the utilization rate + function calculateDepositBonus( + uint256 amount + ) public view returns (uint256) { + return + InceptionLibrary.calculateDepositBonus( + amount, + getFlashCapacity(), + (_getTargetCapacity() * depositUtilizationKink) / MAX_PERCENT, + optimalBonusRate, + maxBonusRate, + _getTargetCapacity() + ); + } + + /// @dev Function to calculate flash withdrawal fee based on the utilization rate + function calculateFlashWithdrawFee( + uint256 amount + ) public view returns (uint256) { + uint256 capacity = getFlashCapacity(); + if (amount > capacity) revert InsufficientCapacity(capacity); + + return + InceptionLibrary.calculateWithdrawalFee( + amount, + capacity, + (_getTargetCapacity() * withdrawUtilizationKink) / MAX_PERCENT, + optimalWithdrawalRate, + maxFlashFeeRate, + _getTargetCapacity() + ); + } + + /*////////////////////////////// + ////// Factory functions ////// + ////////////////////////////*/ + + function implementation() external view returns (address) { + return _stakerImplementation; + } + + function upgradeTo( + address newImplementation + ) external whenNotPaused onlyOwner { + if (!_isContract(newImplementation)) revert NotContract(); + + emit ImplementationUpgraded(_stakerImplementation, newImplementation); + _stakerImplementation = newImplementation; + } + + function isAbleToRedeem( + address claimer + ) public view returns (bool able, uint256[] memory) { + // get the general request + uint256 index; + Withdrawal memory genRequest = _claimerWithdrawals[claimer]; + uint256[] memory availableWithdrawals = new uint256[]( + epoch - genRequest.epoch + ); + if (genRequest.amount == 0) return (false, availableWithdrawals); + + for (uint256 i = 0; i < epoch; ++i) { + if (claimerWithdrawalsQueue[i].receiver == claimer) { + able = true; + availableWithdrawals[index] = i; + ++index; + } + } + // decrease arrays + if (availableWithdrawals.length - index > 0) + assembly { + mstore(availableWithdrawals, index) + } + + return (able, availableWithdrawals); + } + + function ratio() public view returns (uint256) { + return ratioFeed.getRatioFor(address(inceptionToken)); + } + + function getPendingWithdrawalOf( + address claimer + ) external view returns (uint256) { + return _claimerWithdrawals[claimer].amount; + } + + function maxRedeem( + address account + ) external view returns (uint256 maxShares) { + return + convertToAssets(IERC20(address(inceptionToken)).balanceOf(account)); + } + + /*////////////////////////////// + ////// Convert functions ////// + ////////////////////////////*/ + + function convertToShares( + uint256 assets + ) public view returns (uint256 shares) { + return Convert.multiplyAndDivideFloor(assets, ratio(), 1e18); + } + + function convertToAssets( + uint256 iShares + ) public view returns (uint256 assets) { + return Convert.multiplyAndDivideFloor(iShares, 1e18, ratio()); + } + + /*////////////////////////// + ////// SET functions ////// + ////////////////////////*/ + + function setInceptionToken(IInceptionToken newInceptionToken) external onlyOwner { + inceptionToken = newInceptionToken; + } + + function setDepositBonusParams( + uint64 newMaxBonusRate, + uint64 newOptimalBonusRate, + uint64 newDepositUtilizationKink + ) external onlyOwner { + if (newMaxBonusRate > MAX_PERCENT) + revert ParameterExceedsLimits(newMaxBonusRate); + if (newOptimalBonusRate > MAX_PERCENT) + revert ParameterExceedsLimits(newOptimalBonusRate); + if (newDepositUtilizationKink > MAX_PERCENT) + revert ParameterExceedsLimits(newDepositUtilizationKink); + + maxBonusRate = newMaxBonusRate; + optimalBonusRate = newOptimalBonusRate; + depositUtilizationKink = newDepositUtilizationKink; + + emit DepositBonusParamsChanged( + newMaxBonusRate, + newOptimalBonusRate, + newDepositUtilizationKink + ); + } + + function setFlashWithdrawFeeParams( + uint64 newMaxFlashFeeRate, + uint64 newOptimalWithdrawalRate, + uint64 newWithdrawUtilizationKink + ) external onlyOwner { + if (newMaxFlashFeeRate > MAX_PERCENT) + revert ParameterExceedsLimits(newMaxFlashFeeRate); + if (newOptimalWithdrawalRate > MAX_PERCENT) + revert ParameterExceedsLimits(newOptimalWithdrawalRate); + if (newWithdrawUtilizationKink > MAX_PERCENT) + revert ParameterExceedsLimits(newWithdrawUtilizationKink); + + maxFlashFeeRate = newMaxFlashFeeRate; + optimalWithdrawalRate = newOptimalWithdrawalRate; + withdrawUtilizationKink = newWithdrawUtilizationKink; + + emit WithdrawFeeParamsChanged( + newMaxFlashFeeRate, + newOptimalWithdrawalRate, + newWithdrawUtilizationKink + ); + } + + function setProtocolFee(uint64 newProtocolFee) external onlyOwner { + if (newProtocolFee >= MAX_PERCENT) + revert ParameterExceedsLimits(newProtocolFee); + + emit ProtocolFeeChanged(protocolFee, newProtocolFee); + protocolFee = newProtocolFee; + } + + function setTreasuryAddress(address newTreasury) external onlyOwner { + if (newTreasury == address(0)) revert NullParams(); + + emit TreasuryChanged(treasury, newTreasury); + treasury = newTreasury; + } + + function setRatioFeed(IInceptionRatioFeed newRatioFeed) external onlyOwner { + if (address(newRatioFeed) == address(0)) revert NullParams(); + + emit RatioFeedChanged(address(ratioFeed), address(newRatioFeed)); + ratioFeed = newRatioFeed; + } + + function setOperator(address newOperator) external onlyOwner { + if (newOperator == address(0)) revert NullParams(); + + emit OperatorChanged(_operator, newOperator); + _operator = newOperator; + } + + function setMinAmount(uint256 newMinAmount) external onlyOwner { + emit MinAmountChanged(minAmount, newMinAmount); + minAmount = newMinAmount; + } + + function setName(string memory newVaultName) external onlyOwner { + if (bytes(newVaultName).length == 0) revert NullParams(); + + emit NameChanged(name, newVaultName); + name = newVaultName; + } + + // @dev added to replace the removed Address.isContract() from OZ, to be removed later + function _isContract(address account) internal view returns (bool) { + // This method checks the size of the code at the address. + uint256 size; + assembly { + size := extcodesize(account) + } + return size > 0; + } + + /*/////////////////////////////// + ////// Pausable functions ////// + /////////////////////////////*/ + + function pause() external onlyOwner { + _pause(); + } + + function unpause() external onlyOwner { + _unpause(); + } +} diff --git a/projects/omnichain-deployer/package.json b/projects/omnichain-deployer/package.json index a75cf3bc..2574cfa4 100644 --- a/projects/omnichain-deployer/package.json +++ b/projects/omnichain-deployer/package.json @@ -23,8 +23,8 @@ "@nomicfoundation/hardhat-toolbox": "^4.0.0", "@nomicfoundation/hardhat-verify": "^2.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", - "@openzeppelin/contracts": "^5.0.0", - "@openzeppelin/contracts-upgradeable": "^5.0.0", + "@openzeppelin/contracts": "^4.8.3", + "@openzeppelin/contracts-upgradeable": "^4.8.3", "@openzeppelin/hardhat-upgrades": "^3.0.0", "prettier": "3.3.2", "@typechain/ethers-v6": "^0.5.1", diff --git a/projects/omnichain-deployer/scripts/stage1.js b/projects/omnichain-deployer/scripts/stage1.js index 44eaf88d..3e5aebb1 100644 --- a/projects/omnichain-deployer/scripts/stage1.js +++ b/projects/omnichain-deployer/scripts/stage1.js @@ -43,7 +43,7 @@ const deployVaultAndToken = async (operatorAddress, strategyAddress, inceptionLi tx = await iVault.setRatioFeed(ratioFeedAddress);//("0x90D5a4860e087462F8eE15B52D9b1914BdC977B5"); await tx.wait(); - const feed = await ethers.getContractAt("IInceptionRatioFeed", ratioFeedAddress); //"0x90D5a4860e087462F8eE15B52D9b1914BdC977B5"); + const feed = await ethers.getContractAt("contracts/vaults/interfaces/common/IInceptionRatioFeed.sol:IInceptionRatioFeed", ratioFeedAddress); //"0x90D5a4860e087462F8eE15B52D9b1914BdC977B5"); //await feed.updateRatioBatch([iTokenAddress], ["1000000000000000000"]); // currently reverts with L1 ratiofeed due to access stuff return [iTokenAddress, iVaultAddress]; @@ -72,15 +72,15 @@ const deployERC20Rebalancer = async ( // set rebalancer as target receiver in L1 adapter const l1addapter = await ethers.getContractAt("LZCrossChainAdapterL1", defaultAdapter); // TODO fix (permissions on L1 adapter?) - await l1addapter.setTargetReceiver(rebalancerAddr); + //await l1addapter.setTargetReceiver(rebalancerAddr); return rebalancerAddr; }; const setRebalancerForItoken = async (reb, it) => { - const itoken = ethers.getContractAt("InceptionToken", it); + const itoken = await ethers.getContractAt("InceptionToken", it); // TODO fix (permissions on L1 adapter?) - //await itoken.setRebalancer(reb); + await itoken.setRebalancer(reb); } const main = async () => { diff --git a/projects/omnichain-deployer/state.example.json b/projects/omnichain-deployer/state.example.json index 39e16299..460cd968 100644 --- a/projects/omnichain-deployer/state.example.json +++ b/projects/omnichain-deployer/state.example.json @@ -12,7 +12,7 @@ "ratioFeedAddressL2": "0xD4D49e67710d3d466417b566b6c0a3Dd4e94e87a", "inceptionLibAddress": "0x3022ad4552b5fb285F36C71Bdd1545c33a4937ca", - "strategyAddress": "", + "strategyAddress": "0x865Ff05496eA73b0fA49fbBB97F2812776362c87", "ratioFeedAddressL1": "0x90D5a4860e087462F8eE15B52D9b1914BdC977B5", "underlyingAssetL1": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", diff --git a/projects/omnichain-deployer/yarn.lock b/projects/omnichain-deployer/yarn.lock index 05715322..db39e7d9 100644 --- a/projects/omnichain-deployer/yarn.lock +++ b/projects/omnichain-deployer/yarn.lock @@ -1134,15 +1134,15 @@ resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== -"@openzeppelin/contracts-upgradeable@^5.0.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.2.0.tgz#caf9a6eaf4f16d7f90f9b45a6db4e7b125f4b13b" - integrity sha512-mZIu9oa4tQTlGiOJHk6D3LdJlqFqF6oNOSn6S6UVJtzfs9UsY9/dhMEbAVTwElxUtJnjpf6yA062+oBp+eOyPg== - -"@openzeppelin/contracts@^5.0.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.2.0.tgz#bd020694218202b811b0ea3eec07277814c658da" - integrity sha512-bxjNie5z89W1Ea0NZLZluFh8PrFNn9DH8DQlujEok2yjsOlraUPKID5p1Wk3qdNbf6XkQ1Os2RvfiHrrXLHWKA== +"@openzeppelin/contracts-upgradeable@^4.8.3": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.6.tgz#38b21708a719da647de4bb0e4802ee235a0d24df" + integrity sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA== + +"@openzeppelin/contracts@^4.8.3": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.6.tgz#2a880a24eb19b4f8b25adc2a5095f2aa27f39677" + integrity sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA== "@openzeppelin/defender-sdk-base-client@^2.1.0": version "2.1.0" diff --git a/projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol b/projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol index 43cd93d9..f1e45e78 100644 --- a/projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol +++ b/projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol @@ -36,7 +36,7 @@ contract ERC20Rebalancer is ERC20RebalancerStorage { address payable _defaultAdapter, address _operator ) public initializer { - __Ownable_init(); + __Ownable2Step_init(); __RebalancerStorage_init( defaultChainId, From 4c3083f4b7e13f57c418ae507b65a99980c182eb Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Tue, 11 Feb 2025 13:30:46 +0300 Subject: [PATCH 13/41] fix stage2 and fraxferry bridge init --- .../FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol | 2 +- projects/omnichain-deployer/scripts/stage2.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol b/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol index 62060f96..c9995826 100644 --- a/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol +++ b/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol @@ -57,7 +57,7 @@ contract FraxFerryLZCrossChainAdapterL2 is uint32[] memory _eIds, uint256[] memory _chainIds ) public initializer { - __Ownable_init(); + __Ownable2Step_init(); __OAppUpgradeable_init(_endpoint, _delegate); require(_eIds.length == _chainIds.length, ArraysLengthsMismatch()); _l1ChainId = l1ChainId; diff --git a/projects/omnichain-deployer/scripts/stage2.js b/projects/omnichain-deployer/scripts/stage2.js index 7999a593..38f1342a 100644 --- a/projects/omnichain-deployer/scripts/stage2.js +++ b/projects/omnichain-deployer/scripts/stage2.js @@ -60,9 +60,9 @@ const deployL2vault = async (incToken, underlying, adapter, ratiofeed, vaultName await inceptionOmniVault.setRatioFeed(ratiofeed); // uncomment if needed - //TODO fix - // const feed = ethers.getContractAt("InceptionRatioFeed", ratiofeed); //"0x90D5a4860e087462F8eE15B52D9b1914BdC977B5"); - // await feed.updateRatioBatch([incToken], ["1000000000000000000"]); + + const feed = await ethers.getContractAt("InceptionRatioFeed", ratiofeed); //"0x90D5a4860e087462F8eE15B52D9b1914BdC977B5"); + await feed.updateRatioBatch([incToken], ["1000000000000000000"]); // todo: is it safe with live token but no vault? //await inETH.setVault(deployedAddress); From 9db8137071b744b948b2f3f2ca683855afde3ef1 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Tue, 11 Feb 2025 17:30:15 +0300 Subject: [PATCH 14/41] readme and configs --- hh.config.ts | 4 +++- projects/omnichain-deployer/README.md | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/hh.config.ts b/hh.config.ts index d3e1097b..1c8a3ca3 100644 --- a/hh.config.ts +++ b/hh.config.ts @@ -113,6 +113,8 @@ export const CONFIG = { etherscan: { apiKey: { holesky: "PP5CDPZBG6AF6FBGE9CJNYGCRYXYN549M1", + fraxHolesky: process.env.FRAXSCAN_API_KEY, + fraxtal: process.env.FRAXSCAN_API_KEY, mainnet: process.env.ETHERSCAN_API_KEY, }, customChains: [ @@ -133,7 +135,7 @@ export const CONFIG = { }, }, { - network: "fraxHolesky", + network: "fraxtal", chainId: 252, urls: { apiURL: "https://api.fraxscan.com/api", diff --git a/projects/omnichain-deployer/README.md b/projects/omnichain-deployer/README.md index 29e38eb0..4dc9352f 100644 --- a/projects/omnichain-deployer/README.md +++ b/projects/omnichain-deployer/README.md @@ -29,4 +29,6 @@ Stage 3: These scripts assume that the deployer has all the required permissions to set properties of the existing contracts. Currently commented out: -- Setting target receiver on L1 adapter (no permission on testnet) \ No newline at end of file +- Setting target receiver on L1 adapter (no permission on testnet) +- Setting ratio feed for newly deployed iToken on L1 +- Setting peer on L1 adapter From 1d49df661299b20dfc83b1e310a859034db7260a Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Tue, 11 Feb 2025 19:39:56 +0300 Subject: [PATCH 15/41] wip prod pre-config --- .../state.example.prod.json | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 projects/omnichain-deployer/state.example.prod.json diff --git a/projects/omnichain-deployer/state.example.prod.json b/projects/omnichain-deployer/state.example.prod.json new file mode 100644 index 00000000..a2d5af4d --- /dev/null +++ b/projects/omnichain-deployer/state.example.prod.json @@ -0,0 +1,32 @@ +{ + "chainIdL1": "1", + "chainIdL2": "252", + "eidL1": "30101", + "eidL2": "30217", + "tokenName": "Inception sfrxETH", + "tokenSymbol": "insfrxETH", + "vaultNameL2": "Inception_sfrxETH_Omnivault", + + "ferryL2": "0x67c6A8A715fc726ffD0A40588701813d9eC04d9C", + "lzEndpointL2": "0x1a44076050125825900e736c501f859c50fE728c", + "ratioFeedAddressL2": "", // TODO deploy on L2 + + "inceptionLibAddress": "", // not used - reusing IOV-L1 + "strategyAddress": "", // not used + + "ratioFeedAddressL1": "0xFd73Be536503B5Aa80Bf99D1Fd65b1306c69B191", // OK + "underlyingAssetL1": "0xac3e018457b222d93114458476f3e3416abbe38f", // sfrxETH on L1 + "underlyingAssetL2": "0xfc00000000000000000000000000000000000005", // sfrxETH on FRAX + + "iTokenAddressL1": "0x668308d77be3533c909a692302Cb4D135Bf8041C", // OK (l1 itoken) + "iVaultAddressL1": "0x295234B7E370a5Db2D2447aCA83bc7448f151161", // OK (l1 ivault) + + "lockbox": "", // TODO needed for rebalancer + + "crossChainL1": "", // deployment needed + "rebalancer": "", + + "iTokenAddressL2": "", + "iVaultAddressL2": "", + "crossChainL2": "" +} \ No newline at end of file From 8030478090b9838345404ae8d3ad040f80388a6f Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Tue, 11 Feb 2025 20:30:56 +0300 Subject: [PATCH 16/41] add L1 adapter deployment --- projects/omnichain-deployer/scripts/stage1.js | 46 +++++++++++++++++++ projects/omnichain-deployer/scripts/stage2.js | 1 - .../omnichain-deployer/state.example.json | 1 + .../state.example.prod.json | 1 + 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/projects/omnichain-deployer/scripts/stage1.js b/projects/omnichain-deployer/scripts/stage1.js index 3e5aebb1..3b924397 100644 --- a/projects/omnichain-deployer/scripts/stage1.js +++ b/projects/omnichain-deployer/scripts/stage1.js @@ -83,6 +83,39 @@ const setRebalancerForItoken = async (reb, it) => { await itoken.setRebalancer(reb); } +const deployL1adapter = async (deployer, lzEndpointL1, eidL2, chainidL2) => { + + const args_x = [lzEndpointL1, deployer, [eidL2], [chainidL2]]; + console.log("Deploying L1 adapter..."); + const contractFactory = await ethers.getContractFactory("LZCrossChainAdapterL1"); + const contract = await upgrades.deployProxy(contractFactory, args_x, { + kind: "transparent", + }); + await contract.waitForDeployment(); + console.log( + `Proxy deployed at:`, + await contract.getAddress(), + ); + + const proxyAdminAddress = await upgrades.erc1967.getAdminAddress( + await contract.getAddress(), + ); + console.log("ProxyAdmin deployed at:", proxyAdminAddress); + + const implementationAddress = await upgrades.erc1967.getImplementationAddress( + await contract.getAddress(), + ); + console.log("Implementation deployed at:", implementationAddress); + + return contract.getAddress(); + +} + +const setTargetReceiver = async (adapter, tr) => { + const a = await ethers.getContractAt("LZCrossChainAdapterL1", adapter); + await a.setTargetReceiver(tr); +} + const main = async () => { const [deployer] = await ethers.getSigners(); // Stage 1: this deploys and configures L1 contracts that don't depend on knowing L2 addresses @@ -98,6 +131,11 @@ const main = async () => { return; } + if (!obj.crossChainL1 && (!obj.chainIdL1 || !obj.lzEndpointL1 || !obj.eidL2 || !obj.chainidL2)) { + console.log("Missing required config info for adapter deployment"); + return; + } + console.log(obj); if (!obj.iTokenAddressL1 || !obj.iVaultAddressL1) { console.log(`Deploying IOVL1...`); @@ -105,10 +143,18 @@ const main = async () => { } await saveState(obj); + if (!!obj.crossChainL1) { + console.log(`Deploying L1 CCA...`); + obj.crossChainL1 = await deployL1adapter(await deployer.getAddress(), obj.lzEndpointL1, obj.eidL2, obj.chainidL2); + } + await saveState(obj); + + if (!obj.rebalancer) { console.log(`Deploying rebalancer...`); obj.rebalancer = await deployERC20Rebalancer(obj.chainIdL1, obj.iTokenAddressL1, obj.underlyingAssetL1, obj.lockbox, obj.iVaultAddressL1, obj.crossChainL1, await deployer.getAddress()); await setRebalancerForItoken(obj.rebalancer, obj.iTokenAddressL1); + await setTargetReceiver(obj.crossChainL1, obj.rebalancer); } await saveState(obj); } diff --git a/projects/omnichain-deployer/scripts/stage2.js b/projects/omnichain-deployer/scripts/stage2.js index 38f1342a..20df0764 100644 --- a/projects/omnichain-deployer/scripts/stage2.js +++ b/projects/omnichain-deployer/scripts/stage2.js @@ -109,7 +109,6 @@ const deployL2adapter = async (deployer, chainidL1, eidL1, LZEndpointL2, ferryL2 ); console.log("Implementation deployed at:", implementationAddress); - //await contract.setTargetReceiver(vaultL2); await contract.setPeer(eidL1,"0x000000000000000000000000" + adapterL1.substring(2)); return contract.getAddress(); diff --git a/projects/omnichain-deployer/state.example.json b/projects/omnichain-deployer/state.example.json index 460cd968..322b88b7 100644 --- a/projects/omnichain-deployer/state.example.json +++ b/projects/omnichain-deployer/state.example.json @@ -8,6 +8,7 @@ "vaultNameL2": "Inception_sfrxETH_Omnivault", "ferryL2": "0x54102317E9AeAcbb1Eac32214d099D60d260E9a3", + "lzEndpointL1": "0x6EDCE65403992e310A62460808c4b910D972f10f", "lzEndpointL2": "0x6EDCE65403992e310A62460808c4b910D972f10f", "ratioFeedAddressL2": "0xD4D49e67710d3d466417b566b6c0a3Dd4e94e87a", diff --git a/projects/omnichain-deployer/state.example.prod.json b/projects/omnichain-deployer/state.example.prod.json index a2d5af4d..883c4ccb 100644 --- a/projects/omnichain-deployer/state.example.prod.json +++ b/projects/omnichain-deployer/state.example.prod.json @@ -8,6 +8,7 @@ "vaultNameL2": "Inception_sfrxETH_Omnivault", "ferryL2": "0x67c6A8A715fc726ffD0A40588701813d9eC04d9C", + "lzEndpointL1": "0x1a44076050125825900e736c501f859c50fE728c", "lzEndpointL2": "0x1a44076050125825900e736c501f859c50fE728c", "ratioFeedAddressL2": "", // TODO deploy on L2 From 0e431ad401fc53050380c472684be766c6aa50ef Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Tue, 11 Feb 2025 21:36:28 +0300 Subject: [PATCH 17/41] wip full testnet deployment (w/o RF and lockbox) --- projects/omnichain-deployer/scripts/stage1.js | 14 ++++------- projects/omnichain-deployer/scripts/stage2.js | 14 +++-------- projects/omnichain-deployer/state.json | 25 +------------------ 3 files changed, 9 insertions(+), 44 deletions(-) diff --git a/projects/omnichain-deployer/scripts/stage1.js b/projects/omnichain-deployer/scripts/stage1.js index 3b924397..bdead43c 100644 --- a/projects/omnichain-deployer/scripts/stage1.js +++ b/projects/omnichain-deployer/scripts/stage1.js @@ -15,13 +15,14 @@ const saveState = async (state) => { } const deployVaultAndToken = async (operatorAddress, strategyAddress, inceptionLibAddress, ratioFeedAddress, underlyingL1) => { + // Intended for testnet use - mainnet already has this deployed // 1. Inception token const iTokenFactory = await hre.ethers.getContractFactory("InceptionToken"); const iToken = await upgrades.deployProxy(iTokenFactory, ["InsfrxETH", "InsfrxETH"], { kind: "transparent" }); await iToken.waitForDeployment(); const iTokenAddress = await iToken.getAddress(); console.log(`InceptionToken address: ${iTokenAddress}`); - //return iTokenAddress; + // 2. Inception vault (mock) const InceptionVaultFactory = await hre.ethers.getContractFactory("InceptionVaultMock", { libraries: { @@ -40,10 +41,10 @@ const deployVaultAndToken = async (operatorAddress, strategyAddress, inceptionLi tx = await iToken.setVault(iVaultAddress); await tx.wait(); // 6. set RatioFeed - tx = await iVault.setRatioFeed(ratioFeedAddress);//("0x90D5a4860e087462F8eE15B52D9b1914BdC977B5"); + tx = await iVault.setRatioFeed(ratioFeedAddress); await tx.wait(); - const feed = await ethers.getContractAt("contracts/vaults/interfaces/common/IInceptionRatioFeed.sol:IInceptionRatioFeed", ratioFeedAddress); //"0x90D5a4860e087462F8eE15B52D9b1914BdC977B5"); + const feed = await ethers.getContractAt("contracts/vaults/interfaces/common/IInceptionRatioFeed.sol:IInceptionRatioFeed", ratioFeedAddress); //await feed.updateRatioBatch([iTokenAddress], ["1000000000000000000"]); // currently reverts with L1 ratiofeed due to access stuff return [iTokenAddress, iVaultAddress]; @@ -69,17 +70,12 @@ const deployERC20Rebalancer = async ( const rebalancerAddr = await rebalancer.getAddress(); console.log(`ERC20Rebalancer address: ${rebalancerAddr}`); await rebalancer.setInfoMaxDelay(36000n); - // set rebalancer as target receiver in L1 adapter - const l1addapter = await ethers.getContractAt("LZCrossChainAdapterL1", defaultAdapter); - // TODO fix (permissions on L1 adapter?) - //await l1addapter.setTargetReceiver(rebalancerAddr); return rebalancerAddr; }; const setRebalancerForItoken = async (reb, it) => { const itoken = await ethers.getContractAt("InceptionToken", it); - // TODO fix (permissions on L1 adapter?) await itoken.setRebalancer(reb); } @@ -145,7 +141,7 @@ const main = async () => { if (!!obj.crossChainL1) { console.log(`Deploying L1 CCA...`); - obj.crossChainL1 = await deployL1adapter(await deployer.getAddress(), obj.lzEndpointL1, obj.eidL2, obj.chainidL2); + obj.crossChainL1 = await deployL1adapter(await deployer.getAddress(), obj.lzEndpointL1, obj.eidL2, obj.chainIdL2); } await saveState(obj); diff --git a/projects/omnichain-deployer/scripts/stage2.js b/projects/omnichain-deployer/scripts/stage2.js index 20df0764..3a416169 100644 --- a/projects/omnichain-deployer/scripts/stage2.js +++ b/projects/omnichain-deployer/scripts/stage2.js @@ -55,19 +55,13 @@ const deployL2vault = async (incToken, underlying, adapter, ratiofeed, vaultName const adminAddress = await upgrades.erc1967.getAdminAddress(deployedAddress); console.log("Proxy Admin Address:", adminAddress); -// console.log(`Target receiver set successfully on LZCrossChainAdapterL2: ${deployedAddress}`); await inceptionOmniVault.setRatioFeed(ratiofeed); - // uncomment if needed + // comment out if not needed - const feed = await ethers.getContractAt("InceptionRatioFeed", ratiofeed); //"0x90D5a4860e087462F8eE15B52D9b1914BdC977B5"); + const feed = await ethers.getContractAt("InceptionRatioFeed", ratiofeed); await feed.updateRatioBatch([incToken], ["1000000000000000000"]); - - // todo: is it safe with live token but no vault? - //await inETH.setVault(deployedAddress); - //console.log(`Token vault address set: ${deployedAddress}`); - return deployedAddress; } @@ -85,7 +79,7 @@ const setTargetReceiver = async (adapter, tr) => { const deployL2adapter = async (deployer, chainidL1, eidL1, LZEndpointL2, ferryL2, assetL2, rebalancerL1, adapterL1) => { - const args_x = [assetL2, ferryL2/*, rebalancerL1*/, LZEndpointL2, deployer, chainidL1, [eidL1], [chainidL1]]; + const args_x = [assetL2, ferryL2, LZEndpointL2, deployer, chainidL1, [eidL1], [chainidL1]]; console.log("Deploying L2 adapter..."); const contractFactory = await ethers.getContractFactory("FraxFerryLZCrossChainAdapterL2"); const contract = await upgrades.deployProxy(contractFactory, args_x, { @@ -142,8 +136,6 @@ const main = async () => { await setTargetReceiver(obj.crossChainL2, obj.iVaultAddressL2) } await saveState(obj); - - } main().then(() => process.exit(0)) diff --git a/projects/omnichain-deployer/state.json b/projects/omnichain-deployer/state.json index 498e842a..8f6f8ee1 100644 --- a/projects/omnichain-deployer/state.json +++ b/projects/omnichain-deployer/state.json @@ -1,24 +1 @@ -{ - "chainIdL1": "1", - "chainIdL2": "2522", - "eidL1": "40255", - "ferryL2": "0x54102317E9AeAcbb1Eac32214d099D60d260E9a3", - "lzEndpointL2": "0x6EDCE65403992e310A62460808c4b910D972f10f", - "ratioFeedAddressL2": "0xD4D49e67710d3d466417b566b6c0a3Dd4e94e87a", - "inceptionLibAddress": "0x3022ad4552b5fb285F36C71Bdd1545c33a4937ca", - "strategyAddress": "0x865Ff05496eA73b0fA49fbBB97F2812776362c87", - "ratioFeedAddressL1": "0x90D5a4860e087462F8eE15B52D9b1914BdC977B5", - "underlyingAssetL1": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", - "underlyingAssetL2": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", - "iTokenAddressL1": "0x08A90aF9A6eBBe11c322AD9930CC58E122231B5A", - "iVaultAddressL1": "0xFe44FF05D7C06E792D6eF4762B2441e82Bc602a5", - "lockbox": "0x865Ff05496eA73b0fA49fbBB97F2812776362c87", - "crossChainL1": "0xA2c902810eAE3C24208580e043cA0de36Ae66c3E", - "rebalancer": "0x47330D2fe6F75899597C14d615003Ef561B01B14", - "iTokenAddressL2": "0xEe170eFF1BCeA1f7a46F46634fa40d590AAa5200", - "iVaultAddressL2": "0x121f7e412A536D673DaB310F1448ce0e3843068a", - "crossChainL2": "0x022D2B8173c7BCad83420d0953362335afB89355", - "tokenName": "test", - "tokenSymbol": "TST", - "vaultNameL2": "IOVL2" -} \ No newline at end of file +{"chainIdL1":"17000","chainIdL2":"2522","eidL1":"40217","eidL2":"40255","tokenName":"Inception sfrxETH","tokenSymbol":"insfrxETH","vaultNameL2":"Inception_sfrxETH_Omnivault","ferryL2":"0x54102317E9AeAcbb1Eac32214d099D60d260E9a3","lzEndpointL1":"0x6EDCE65403992e310A62460808c4b910D972f10f","lzEndpointL2":"0x6EDCE65403992e310A62460808c4b910D972f10f","ratioFeedAddressL2":"0xD4D49e67710d3d466417b566b6c0a3Dd4e94e87a","inceptionLibAddress":"0x3022ad4552b5fb285F36C71Bdd1545c33a4937ca","strategyAddress":"0x865Ff05496eA73b0fA49fbBB97F2812776362c87","ratioFeedAddressL1":"0x90D5a4860e087462F8eE15B52D9b1914BdC977B5","underlyingAssetL1":"0x72DE502C4F68DCE383b075dA455ed45e15122a46","underlyingAssetL2":"0x72DE502C4F68DCE383b075dA455ed45e15122a46","iTokenAddressL1":"0x7bdccE77C958796027a3D3b2253f723d75491CA7","iVaultAddressL1":"0x8b2366eC5775497aE3E1a616C2E81dFa7dE6D13d","lockbox":"0x865Ff05496eA73b0fA49fbBB97F2812776362c87","crossChainL1":"0x8CE6Ba86Df61FEB96a47364fE89d1C7217B3aF1b","rebalancer":"0x4b16D1D74a8c11eDb04D817972D9D9735e90c527","iTokenAddressL2":"0x8663AB3894dd30B032C9312cD31a074234CbEfE3","iVaultAddressL2":"0xCf3D5171661528F65E94B1214adB0D05781a84b6","crossChainL2":"0x162443Cfabc9d2244974f3c144c974335030f58a"} \ No newline at end of file From 2ab0c8a71623a9e983d2f68419ee5e711f992391 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Tue, 11 Feb 2025 21:38:32 +0300 Subject: [PATCH 18/41] wip --- .../state.example.prod.json | 2 +- projects/omnichain-deployer/state.json | 27 ++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/projects/omnichain-deployer/state.example.prod.json b/projects/omnichain-deployer/state.example.prod.json index 883c4ccb..1014dbe0 100644 --- a/projects/omnichain-deployer/state.example.prod.json +++ b/projects/omnichain-deployer/state.example.prod.json @@ -1,4 +1,4 @@ -{ +{ // REMOVE COMMENTS BEFORE USE "chainIdL1": "1", "chainIdL2": "252", "eidL1": "30101", diff --git a/projects/omnichain-deployer/state.json b/projects/omnichain-deployer/state.json index 8f6f8ee1..424ccc51 100644 --- a/projects/omnichain-deployer/state.json +++ b/projects/omnichain-deployer/state.json @@ -1 +1,26 @@ -{"chainIdL1":"17000","chainIdL2":"2522","eidL1":"40217","eidL2":"40255","tokenName":"Inception sfrxETH","tokenSymbol":"insfrxETH","vaultNameL2":"Inception_sfrxETH_Omnivault","ferryL2":"0x54102317E9AeAcbb1Eac32214d099D60d260E9a3","lzEndpointL1":"0x6EDCE65403992e310A62460808c4b910D972f10f","lzEndpointL2":"0x6EDCE65403992e310A62460808c4b910D972f10f","ratioFeedAddressL2":"0xD4D49e67710d3d466417b566b6c0a3Dd4e94e87a","inceptionLibAddress":"0x3022ad4552b5fb285F36C71Bdd1545c33a4937ca","strategyAddress":"0x865Ff05496eA73b0fA49fbBB97F2812776362c87","ratioFeedAddressL1":"0x90D5a4860e087462F8eE15B52D9b1914BdC977B5","underlyingAssetL1":"0x72DE502C4F68DCE383b075dA455ed45e15122a46","underlyingAssetL2":"0x72DE502C4F68DCE383b075dA455ed45e15122a46","iTokenAddressL1":"0x7bdccE77C958796027a3D3b2253f723d75491CA7","iVaultAddressL1":"0x8b2366eC5775497aE3E1a616C2E81dFa7dE6D13d","lockbox":"0x865Ff05496eA73b0fA49fbBB97F2812776362c87","crossChainL1":"0x8CE6Ba86Df61FEB96a47364fE89d1C7217B3aF1b","rebalancer":"0x4b16D1D74a8c11eDb04D817972D9D9735e90c527","iTokenAddressL2":"0x8663AB3894dd30B032C9312cD31a074234CbEfE3","iVaultAddressL2":"0xCf3D5171661528F65E94B1214adB0D05781a84b6","crossChainL2":"0x162443Cfabc9d2244974f3c144c974335030f58a"} \ No newline at end of file +{ + "chainIdL1": "17000", + "chainIdL2": "2522", + "eidL1": "40217", + "eidL2": "40255", + "tokenName": "Inception sfrxETH", + "tokenSymbol": "insfrxETH", + "vaultNameL2": "Inception_sfrxETH_Omnivault", + "ferryL2": "0x54102317E9AeAcbb1Eac32214d099D60d260E9a3", + "lzEndpointL1": "0x6EDCE65403992e310A62460808c4b910D972f10f", + "lzEndpointL2": "0x6EDCE65403992e310A62460808c4b910D972f10f", + "ratioFeedAddressL2": "0xD4D49e67710d3d466417b566b6c0a3Dd4e94e87a", + "inceptionLibAddress": "0x3022ad4552b5fb285F36C71Bdd1545c33a4937ca", + "strategyAddress": "0x865Ff05496eA73b0fA49fbBB97F2812776362c87", + "ratioFeedAddressL1": "0x90D5a4860e087462F8eE15B52D9b1914BdC977B5", + "underlyingAssetL1": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", + "underlyingAssetL2": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", + "iTokenAddressL1": "0x7bdccE77C958796027a3D3b2253f723d75491CA7", + "iVaultAddressL1": "0x8b2366eC5775497aE3E1a616C2E81dFa7dE6D13d", + "lockbox": "0x865Ff05496eA73b0fA49fbBB97F2812776362c87", + "crossChainL1": "0x8CE6Ba86Df61FEB96a47364fE89d1C7217B3aF1b", + "rebalancer": "0x4b16D1D74a8c11eDb04D817972D9D9735e90c527", + "iTokenAddressL2": "0x8663AB3894dd30B032C9312cD31a074234CbEfE3", + "iVaultAddressL2": "0xCf3D5171661528F65E94B1214adB0D05781a84b6", + "crossChainL2": "0x162443Cfabc9d2244974f3c144c974335030f58a" +} \ No newline at end of file From 7d70c5505c6c2bfcdf407dc76a3639cd4f1f16d7 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Tue, 11 Feb 2025 22:55:53 +0300 Subject: [PATCH 19/41] fix rebalancer default ChainID --- projects/omnichain-deployer/scripts/stage1.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/omnichain-deployer/scripts/stage1.js b/projects/omnichain-deployer/scripts/stage1.js index bdead43c..498a138d 100644 --- a/projects/omnichain-deployer/scripts/stage1.js +++ b/projects/omnichain-deployer/scripts/stage1.js @@ -148,7 +148,7 @@ const main = async () => { if (!obj.rebalancer) { console.log(`Deploying rebalancer...`); - obj.rebalancer = await deployERC20Rebalancer(obj.chainIdL1, obj.iTokenAddressL1, obj.underlyingAssetL1, obj.lockbox, obj.iVaultAddressL1, obj.crossChainL1, await deployer.getAddress()); + obj.rebalancer = await deployERC20Rebalancer(obj.chainIdL2, obj.iTokenAddressL1, obj.underlyingAssetL1, obj.lockbox, obj.iVaultAddressL1, obj.crossChainL1, await deployer.getAddress()); await setRebalancerForItoken(obj.rebalancer, obj.iTokenAddressL1); await setTargetReceiver(obj.crossChainL1, obj.rebalancer); } From c4c8d63842b0000c9654610584ecfba73d5f341c Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Wed, 12 Feb 2025 15:30:58 +0300 Subject: [PATCH 20/41] update readme and commented code --- projects/omnichain-deployer/README.md | 4 +--- projects/omnichain-deployer/scripts/stage2.js | 4 ++-- projects/omnichain-deployer/state.json.old | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) create mode 100644 projects/omnichain-deployer/state.json.old diff --git a/projects/omnichain-deployer/README.md b/projects/omnichain-deployer/README.md index 4dc9352f..801680de 100644 --- a/projects/omnichain-deployer/README.md +++ b/projects/omnichain-deployer/README.md @@ -29,6 +29,4 @@ Stage 3: These scripts assume that the deployer has all the required permissions to set properties of the existing contracts. Currently commented out: -- Setting target receiver on L1 adapter (no permission on testnet) -- Setting ratio feed for newly deployed iToken on L1 -- Setting peer on L1 adapter +- Setting ratio feed for newly deployed iToken on L2 (ratio reuse from L1 expected) diff --git a/projects/omnichain-deployer/scripts/stage2.js b/projects/omnichain-deployer/scripts/stage2.js index 3a416169..4a53ef5d 100644 --- a/projects/omnichain-deployer/scripts/stage2.js +++ b/projects/omnichain-deployer/scripts/stage2.js @@ -60,8 +60,8 @@ const deployL2vault = async (incToken, underlying, adapter, ratiofeed, vaultName // comment out if not needed - const feed = await ethers.getContractAt("InceptionRatioFeed", ratiofeed); - await feed.updateRatioBatch([incToken], ["1000000000000000000"]); + // const feed = await ethers.getContractAt("InceptionRatioFeed", ratiofeed); + // await feed.updateRatioBatch([incToken], ["1000000000000000000"]); return deployedAddress; } diff --git a/projects/omnichain-deployer/state.json.old b/projects/omnichain-deployer/state.json.old new file mode 100644 index 00000000..9811965b --- /dev/null +++ b/projects/omnichain-deployer/state.json.old @@ -0,0 +1 @@ +{"chainIdL1":"17000","chainIdL2":"2522","eidL1":"40217","eidL2":"40255","tokenName":"Inception sfrxETH","tokenSymbol":"insfrxETH","vaultNameL2":"Inception_sfrxETH_Omnivault","ferryL2":"0x54102317E9AeAcbb1Eac32214d099D60d260E9a3","lzEndpointL2":"0x6EDCE65403992e310A62460808c4b910D972f10f","ratioFeedAddressL2":"0xD4D49e67710d3d466417b566b6c0a3Dd4e94e87a","inceptionLibAddress":"0x3022ad4552b5fb285F36C71Bdd1545c33a4937ca","strategyAddress":"0x865Ff05496eA73b0fA49fbBB97F2812776362c87","ratioFeedAddressL1":"0x90D5a4860e087462F8eE15B52D9b1914BdC977B5","underlyingAssetL1":"0x72DE502C4F68DCE383b075dA455ed45e15122a46","underlyingAssetL2":"0x72DE502C4F68DCE383b075dA455ed45e15122a46","iTokenAddressL1":"0x09908F11bcAF39C81631Efde9C0bEa9A575FD438","iVaultAddressL1":"0x7382C8aCD984f64730b93db26301d8eeC8e5b441","lockbox":"0x865Ff05496eA73b0fA49fbBB97F2812776362c87","crossChainL1":"0xA2c902810eAE3C24208580e043cA0de36Ae66c3E","rebalancer":"0x0A8c0FdC2b0d757228A52dCE08B219851baa8943","iTokenAddressL2":"0xcdC9a3345fE445ac027F2a1bE9dac69d6dFbA3DC","iVaultAddressL2":"0x11e75a8671a6810170a4557cEe844F5B1F47CaB1","crossChainL2":"0x54AcdCAdcE6468c1A128aAf7532a89156eE93AEe"} \ No newline at end of file From 68391a7cf33a17f50c9f2b0615c4727b5866730d Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Wed, 12 Feb 2025 21:09:05 +0300 Subject: [PATCH 21/41] comment cleanup --- projects/omnichain-deployer/state.example.prod.json | 2 +- projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol | 3 +-- .../vaults/contracts/vaults/vault_e2/ERC20OmniVault_E2.sol | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/projects/omnichain-deployer/state.example.prod.json b/projects/omnichain-deployer/state.example.prod.json index 1014dbe0..b09f8197 100644 --- a/projects/omnichain-deployer/state.example.prod.json +++ b/projects/omnichain-deployer/state.example.prod.json @@ -24,7 +24,7 @@ "lockbox": "", // TODO needed for rebalancer - "crossChainL1": "", // deployment needed + "crossChainL1": "", "rebalancer": "", "iTokenAddressL2": "", diff --git a/projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol b/projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol index 3052e0d1..10e21305 100644 --- a/projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol +++ b/projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol @@ -17,7 +17,7 @@ import {Convert} from "../lib/Convert.sol"; * @title InceptionERC20OmniVault * @author The InceptionLRT team * @dev A vault that handles deposits, withdrawals, and cross-chain operations for the Inception protocol. - * @notice Allows users to deposit an asset(e.g. stETH), receive inception tokens, and handle asset transfers between L1 and L2. + * @notice Allows users to deposit an ERC20 asset (e.g. sfrxETH), receive inception tokens, and handle asset transfers between L1 and L2. */ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { /// @dev Inception restaking token @@ -84,7 +84,6 @@ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { minAmount = 1e8; - /// TODO !!! targetCapacity = 1; protocolFee = 50 * 1e8; diff --git a/projects/vaults/contracts/vaults/vault_e2/ERC20OmniVault_E2.sol b/projects/vaults/contracts/vaults/vault_e2/ERC20OmniVault_E2.sol index bc278cde..b5dd162e 100644 --- a/projects/vaults/contracts/vaults/vault_e2/ERC20OmniVault_E2.sol +++ b/projects/vaults/contracts/vaults/vault_e2/ERC20OmniVault_E2.sol @@ -7,7 +7,7 @@ import {InceptionERC20OmniVault, IInceptionToken} from "../InceptionERC20OmniVau import {IERC20CrossChainBridge} from "../../interfaces/IERC20CrossChainBridge.sol"; /// @author The InceptionLRT team -/// @title The ERC20OmniVault_E2, specifically designed for the LST Omni Restaking +/// @title The ERC20OmniVault_E2, specifically designed for the Fraxtal Staked ETH omnichain restaking contract ERC20OmniVault_E2 is InceptionERC20OmniVault { /// @custom:oz-upgrades-unsafe-allow constructor constructor() payable{ From ee681b2611cb6ec6d060c2124c974569faf6de65 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Wed, 12 Feb 2025 23:50:54 +0300 Subject: [PATCH 22/41] comments --- projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol b/projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol index f1e45e78..f607bbad 100644 --- a/projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol +++ b/projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol @@ -50,7 +50,7 @@ contract ERC20Rebalancer is ERC20RebalancerStorage { } /** - * @notice Updates the treasury data by comparing the total L2 inETH balance and adjusting the treasury accordingly. + * @notice Updates the treasury data by comparing the total L2 Inception Token balance and adjusting the treasury accordingly. */ function updateTreasuryData() public { Transaction memory txData = getTransactionData(); From 16ee75b20e7767b9ec981681a9d4c108069b2ce6 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Thu, 13 Feb 2025 10:28:09 +0300 Subject: [PATCH 23/41] bug --- projects/omnichain-deployer/scripts/stage1.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/omnichain-deployer/scripts/stage1.js b/projects/omnichain-deployer/scripts/stage1.js index 498a138d..070ca135 100644 --- a/projects/omnichain-deployer/scripts/stage1.js +++ b/projects/omnichain-deployer/scripts/stage1.js @@ -139,7 +139,7 @@ const main = async () => { } await saveState(obj); - if (!!obj.crossChainL1) { + if (!obj.crossChainL1) { console.log(`Deploying L1 CCA...`); obj.crossChainL1 = await deployL1adapter(await deployer.getAddress(), obj.lzEndpointL1, obj.eidL2, obj.chainIdL2); } From fc765dbee73f038f18deabed1849f798f6450179 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Thu, 13 Feb 2025 12:08:33 +0300 Subject: [PATCH 24/41] xerc20 minter in the script --- projects/omnichain-deployer/scripts/stage2.js | 14 +++-- projects/omnichain-deployer/state.json | 53 +++++++++++-------- 2 files changed, 41 insertions(+), 26 deletions(-) diff --git a/projects/omnichain-deployer/scripts/stage2.js b/projects/omnichain-deployer/scripts/stage2.js index 4a53ef5d..2b82ed93 100644 --- a/projects/omnichain-deployer/scripts/stage2.js +++ b/projects/omnichain-deployer/scripts/stage2.js @@ -72,6 +72,12 @@ const setVaultInIncToken = async (vault, tokenAddr) => { await token.setVault(await vCon.getAddress()); } +const setVaultAsXERC20Minter = async (vault, tokenAddr) => { + const token = await ethers.getContractAt("IXERC20", tokenAddr); + const vCon = await ethers.getContractAt("ERC20OmniVault_E2", vault) + await token.setBridgeLimits(await vCon.getAddress(), 1000000000000000000000n, 1000000000000000000000n); +} + const setTargetReceiver = async (adapter, tr) => { const a = await ethers.getContractAt("FraxFerryLZCrossChainAdapterL2", adapter); await a.setTargetReceiver(tr); @@ -130,10 +136,12 @@ const main = async () => { if (!obj.iVaultAddressL2) { console.log("Deploying L2 IOV..."); obj.iVaultAddressL2 = await deployL2vault(obj.iTokenAddressL2, obj.underlyingAssetL2, obj.crossChainL2, obj.ratioFeedAddressL2, obj.vaultNameL2, await deployer.getAddress()); - console.log("Config 1..."); - await setVaultInIncToken(obj.iVaultAddressL2, obj.iTokenAddressL2); - console.log("Config 2..."); + console.log("Config 1... (target recv)"); await setTargetReceiver(obj.crossChainL2, obj.iVaultAddressL2) + console.log("Config 2... (minter)"); + //await setVaultInIncToken(obj.iVaultAddressL2, obj.iTokenAddressL2); + // replace with xerc20 bridge setup + await setVaultAsXERC20Minter(obj.iVaultAddressL2, obj.iTokenAddressL2); } await saveState(obj); } diff --git a/projects/omnichain-deployer/state.json b/projects/omnichain-deployer/state.json index 424ccc51..4af3520e 100644 --- a/projects/omnichain-deployer/state.json +++ b/projects/omnichain-deployer/state.json @@ -1,26 +1,33 @@ { - "chainIdL1": "17000", - "chainIdL2": "2522", - "eidL1": "40217", - "eidL2": "40255", - "tokenName": "Inception sfrxETH", + "chainIdL1": "1", + "chainIdL2": "252", + "eidL1": "30101", + "eidL2": "30217", + "tokenName": "Inception Restaked sfrxETH", "tokenSymbol": "insfrxETH", - "vaultNameL2": "Inception_sfrxETH_Omnivault", - "ferryL2": "0x54102317E9AeAcbb1Eac32214d099D60d260E9a3", - "lzEndpointL1": "0x6EDCE65403992e310A62460808c4b910D972f10f", - "lzEndpointL2": "0x6EDCE65403992e310A62460808c4b910D972f10f", - "ratioFeedAddressL2": "0xD4D49e67710d3d466417b566b6c0a3Dd4e94e87a", - "inceptionLibAddress": "0x3022ad4552b5fb285F36C71Bdd1545c33a4937ca", - "strategyAddress": "0x865Ff05496eA73b0fA49fbBB97F2812776362c87", - "ratioFeedAddressL1": "0x90D5a4860e087462F8eE15B52D9b1914BdC977B5", - "underlyingAssetL1": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", - "underlyingAssetL2": "0x72DE502C4F68DCE383b075dA455ed45e15122a46", - "iTokenAddressL1": "0x7bdccE77C958796027a3D3b2253f723d75491CA7", - "iVaultAddressL1": "0x8b2366eC5775497aE3E1a616C2E81dFa7dE6D13d", - "lockbox": "0x865Ff05496eA73b0fA49fbBB97F2812776362c87", - "crossChainL1": "0x8CE6Ba86Df61FEB96a47364fE89d1C7217B3aF1b", - "rebalancer": "0x4b16D1D74a8c11eDb04D817972D9D9735e90c527", - "iTokenAddressL2": "0x8663AB3894dd30B032C9312cD31a074234CbEfE3", - "iVaultAddressL2": "0xCf3D5171661528F65E94B1214adB0D05781a84b6", - "crossChainL2": "0x162443Cfabc9d2244974f3c144c974335030f58a" + "vaultNameL2": "Inception sfrxETH Omnivault", + + "ferryL2": "0x67c6A8A715fc726ffD0A40588701813d9eC04d9C", + "lzEndpointL1": "0x1a44076050125825900e736c501f859c50fE728c", + "lzEndpointL2": "0x1a44076050125825900e736c501f859c50fE728c", + "ratioFeedAddressL2": "", + + + "ratioFeedAddressL1": "0xFd73Be536503B5Aa80Bf99D1Fd65b1306c69B191", + "underlyingAssetL1": "0xac3e018457b222d93114458476f3e3416abbe38f", + "underlyingAssetL2": "0xfc00000000000000000000000000000000000005", + + "iTokenAddressL1": "0x668308d77be3533c909a692302Cb4D135Bf8041C", + "iVaultAddressL1": "0x295234B7E370a5Db2D2447aCA83bc7448f151161", + + "lockbox": "0x5b08a80b4aeda84560f0570451accc25ad1e0182", + + "crossChainL1": "", + "rebalancer": "", + + "iTokenAddressL2": "0xE162075a1C0Ac7e985253972bEcA5e83Da3BBaa4", + "iVaultAddressL2": "", + "crossChainL2": "", + "inceptionLibAddress": "", + "strategyAddress": "" } \ No newline at end of file From dc83f09194be4b8b824d534c72318412006fd7f3 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Thu, 13 Feb 2025 12:10:56 +0300 Subject: [PATCH 25/41] capital letter --- projects/omnichain-deployer/scripts/stage1.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/omnichain-deployer/scripts/stage1.js b/projects/omnichain-deployer/scripts/stage1.js index 070ca135..008b0865 100644 --- a/projects/omnichain-deployer/scripts/stage1.js +++ b/projects/omnichain-deployer/scripts/stage1.js @@ -127,7 +127,7 @@ const main = async () => { return; } - if (!obj.crossChainL1 && (!obj.chainIdL1 || !obj.lzEndpointL1 || !obj.eidL2 || !obj.chainidL2)) { + if (!obj.crossChainL1 && (!obj.chainIdL1 || !obj.lzEndpointL1 || !obj.eidL2 || !obj.chainIdL2)) { console.log("Missing required config info for adapter deployment"); return; } From c6d148da9269bc3ad6a007216d1eff0e3db5a8c7 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Thu, 13 Feb 2025 12:16:09 +0300 Subject: [PATCH 26/41] fix dependency order --- projects/omnichain-deployer/scripts/stage1.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/projects/omnichain-deployer/scripts/stage1.js b/projects/omnichain-deployer/scripts/stage1.js index 008b0865..e8b43e5d 100644 --- a/projects/omnichain-deployer/scripts/stage1.js +++ b/projects/omnichain-deployer/scripts/stage1.js @@ -122,13 +122,13 @@ const main = async () => { return; } - if (!obj.rebalancer && (!obj.chainIdL1 || !obj.underlyingAssetL1 || !obj.lockbox || !obj.crossChainL1)) { - console.log("Missing required config info for rebalancer deployment"); + if (!obj.crossChainL1 && (!obj.chainIdL1 || !obj.lzEndpointL1 || !obj.eidL2 || !obj.chainIdL2)) { + console.log("Missing required config info for adapter deployment"); return; } - if (!obj.crossChainL1 && (!obj.chainIdL1 || !obj.lzEndpointL1 || !obj.eidL2 || !obj.chainIdL2)) { - console.log("Missing required config info for adapter deployment"); + if (!obj.rebalancer && (!obj.chainIdL1 || !obj.underlyingAssetL1 || !obj.lockbox || !obj.crossChainL1)) { + console.log("Missing required config info for rebalancer deployment"); return; } From a6eca2dba1bfa83de7e3b4fd96dcd93cc1147f68 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Thu, 13 Feb 2025 12:18:21 +0300 Subject: [PATCH 27/41] remove cca dep --- projects/omnichain-deployer/scripts/stage1.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/omnichain-deployer/scripts/stage1.js b/projects/omnichain-deployer/scripts/stage1.js index e8b43e5d..d08a180b 100644 --- a/projects/omnichain-deployer/scripts/stage1.js +++ b/projects/omnichain-deployer/scripts/stage1.js @@ -127,7 +127,7 @@ const main = async () => { return; } - if (!obj.rebalancer && (!obj.chainIdL1 || !obj.underlyingAssetL1 || !obj.lockbox || !obj.crossChainL1)) { + if (!obj.rebalancer && (!obj.chainIdL1 || !obj.underlyingAssetL1 || !obj.lockbox)) { console.log("Missing required config info for rebalancer deployment"); return; } From c00419e27af8632cd42d58384695b2c15b9cdb85 Mon Sep 17 00:00:00 2001 From: mellaught Date: Fri, 14 Feb 2025 14:59:57 +0300 Subject: [PATCH 28/41] minor improvements --- .../.openzeppelin/unknown-252.json | 507 ++++++++++++++++++ projects/omnichain-deployer/state.json | 57 +- .../vaults/InceptionERC20OmniVault.sol | 92 ++-- 3 files changed, 568 insertions(+), 88 deletions(-) create mode 100644 projects/omnichain-deployer/.openzeppelin/unknown-252.json diff --git a/projects/omnichain-deployer/.openzeppelin/unknown-252.json b/projects/omnichain-deployer/.openzeppelin/unknown-252.json new file mode 100644 index 00000000..356d1412 --- /dev/null +++ b/projects/omnichain-deployer/.openzeppelin/unknown-252.json @@ -0,0 +1,507 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x7EEd6897D9F032AbccffD2f6AAFCfb59b24BD58E", + "txHash": "0x84e80c96fd6b32f2732dcb3f7d8265532d0878fac2aec302f89815e6af872bef", + "kind": "transparent" + }, + { + "address": "0xA45EA1D6fB4b5596B4b5C5E69D02Be480625bB44", + "txHash": "0xfd7bc22c0fbc4975ece3d8b9e62c9541da9bb8320ce0972a73ff54338b58a0a1", + "kind": "transparent" + } + ], + "impls": { + "8816a9090bfb233ffb3ddd3d2b815b5c0d1f31502be8778c9d4c5a61dd85f40a": { + "address": "0xcCE156D274B08d1fF08A5493D0E7B22EC934B708", + "txHash": "0xac0dd5c3dbe682fb0784b952ab837495073271f15d23a4981febe94cfd364402", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "endpoint", + "offset": 0, + "slot": "0", + "type": "t_contract(ILayerZeroEndpointV2)2638", + "contract": "OAppCoreUpgradeable", + "src": "contracts/bridge-lz/LayerZero/OAppCoreUpgradeable.sol:14" + }, + { + "label": "peers", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_uint32,t_bytes32)", + "contract": "OAppCoreUpgradeable", + "src": "contracts/bridge-lz/LayerZero/OAppCoreUpgradeable.sol:17" + }, + { + "label": "eidToChainId", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint32,t_uint256)", + "contract": "AbstractLZCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractLZCrossChainAdapter.sol:28" + }, + { + "label": "chainIdToEid", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_uint256,t_uint32)", + "contract": "AbstractLZCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractLZCrossChainAdapter.sol:29" + }, + { + "label": "targetReceiver", + "offset": 0, + "slot": "4", + "type": "t_address", + "contract": "AbstractCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractCrossChainAdapter.sol:21" + }, + { + "label": "ferry", + "offset": 0, + "slot": "5", + "type": "t_contract(IFraxFerry)16734", + "contract": "AbstractFraxFerryERC20Adapter", + "src": "contracts/bridge-lz/abstract/AbstractFraxFerryERC20Adapter.sol:20" + }, + { + "label": "token", + "offset": 0, + "slot": "6", + "type": "t_contract(IERC20)8697", + "contract": "AbstractFraxFerryERC20Adapter", + "src": "contracts/bridge-lz/abstract/AbstractFraxFerryERC20Adapter.sol:21" + }, + { + "label": "erc20DestinationChain", + "offset": 0, + "slot": "7", + "type": "t_address", + "contract": "AbstractFraxFerryERC20Adapter", + "src": "contracts/bridge-lz/abstract/AbstractFraxFerryERC20Adapter.sol:22" + }, + { + "label": "_initialized", + "offset": 20, + "slot": "7", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 21, + "slot": "7", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "8", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "58", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "59", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_pendingOwner", + "offset": 0, + "slot": "108", + "type": "t_address", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "109", + "type": "t_array(t_uint256)49_storage", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:70" + }, + { + "label": "_l1ChainId", + "offset": 0, + "slot": "158", + "type": "t_uint32", + "contract": "FraxFerryLZCrossChainAdapterL2", + "src": "contracts/bridge-lz/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol:30" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IERC20)8697": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IFraxFerry)16734": { + "label": "contract IFraxFerry", + "numberOfBytes": "20" + }, + "t_contract(ILayerZeroEndpointV2)2638": { + "label": "contract ILayerZeroEndpointV2", + "numberOfBytes": "20" + }, + "t_mapping(t_uint256,t_uint32)": { + "label": "mapping(uint256 => uint32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_bytes32)": { + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_uint256)": { + "label": "mapping(uint32 => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "67d885a84ce8f8a447d7ccbcd015335b7f5c0180379566a1e6d6005fc0ca12d5": { + "address": "0x9495fF28510F00eB9D3F6Ead0fEab7B01c24d35b", + "txHash": "0xb318d561304990c8adeaa4fd3bc9c3d4a8adeddaa5add66e067228dbfc5fa028", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_paused", + "offset": 0, + "slot": "51", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "101", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_pendingOwner", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:70" + }, + { + "label": "_asset", + "offset": 0, + "slot": "251", + "type": "t_contract(IERC20)1080", + "contract": "InceptionERC20OmniAssetsHandler", + "src": "contracts/vaults/assets-handler/InceptionERC20OmniAssetsHandler.sol:24" + }, + { + "label": "__reserver", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)49_storage", + "contract": "InceptionERC20OmniAssetsHandler", + "src": "contracts/vaults/assets-handler/InceptionERC20OmniAssetsHandler.sol:26" + }, + { + "label": "inceptionToken", + "offset": 0, + "slot": "301", + "type": "t_contract(IInceptionToken)2562", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:24" + }, + { + "label": "minAmount", + "offset": 0, + "slot": "302", + "type": "t_uint256", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:27" + }, + { + "label": "name", + "offset": 0, + "slot": "303", + "type": "t_string_storage", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:30" + }, + { + "label": "operator", + "offset": 0, + "slot": "304", + "type": "t_address", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:32" + }, + { + "label": "ratioFeed", + "offset": 0, + "slot": "305", + "type": "t_contract(IInceptionRatioFeed)2525", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:34" + }, + { + "label": "crossChainAdapterERC20", + "offset": 0, + "slot": "306", + "type": "t_contract(IERC20CrossChainBridge)2104", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:36" + }, + { + "label": "depositBonusAmount", + "offset": 0, + "slot": "307", + "type": "t_uint256", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:45" + }, + { + "label": "targetCapacity", + "offset": 0, + "slot": "308", + "type": "t_uint256", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:46" + }, + { + "label": "treasuryAddress", + "offset": 0, + "slot": "309", + "type": "t_address", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:48" + }, + { + "label": "protocolFee", + "offset": 20, + "slot": "309", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:49" + }, + { + "label": "maxBonusRate", + "offset": 0, + "slot": "310", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:52" + }, + { + "label": "optimalBonusRate", + "offset": 8, + "slot": "310", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:53" + }, + { + "label": "depositUtilizationKink", + "offset": 16, + "slot": "310", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:54" + }, + { + "label": "maxFlashFeeRate", + "offset": 24, + "slot": "310", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:57" + }, + { + "label": "optimalWithdrawalRate", + "offset": 0, + "slot": "311", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:58" + }, + { + "label": "withdrawUtilizationKink", + "offset": 8, + "slot": "311", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:59" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IERC20)1080": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IERC20CrossChainBridge)2104": { + "label": "contract IERC20CrossChainBridge", + "numberOfBytes": "20" + }, + "t_contract(IInceptionRatioFeed)2525": { + "label": "contract IInceptionRatioFeed", + "numberOfBytes": "20" + }, + "t_contract(IInceptionToken)2562": { + "label": "contract IInceptionToken", + "numberOfBytes": "20" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + } + } +} diff --git a/projects/omnichain-deployer/state.json b/projects/omnichain-deployer/state.json index 4af3520e..f43cac46 100644 --- a/projects/omnichain-deployer/state.json +++ b/projects/omnichain-deployer/state.json @@ -1,33 +1,26 @@ { - "chainIdL1": "1", - "chainIdL2": "252", - "eidL1": "30101", - "eidL2": "30217", - "tokenName": "Inception Restaked sfrxETH", - "tokenSymbol": "insfrxETH", - "vaultNameL2": "Inception sfrxETH Omnivault", - - "ferryL2": "0x67c6A8A715fc726ffD0A40588701813d9eC04d9C", - "lzEndpointL1": "0x1a44076050125825900e736c501f859c50fE728c", - "lzEndpointL2": "0x1a44076050125825900e736c501f859c50fE728c", - "ratioFeedAddressL2": "", - - - "ratioFeedAddressL1": "0xFd73Be536503B5Aa80Bf99D1Fd65b1306c69B191", - "underlyingAssetL1": "0xac3e018457b222d93114458476f3e3416abbe38f", - "underlyingAssetL2": "0xfc00000000000000000000000000000000000005", - - "iTokenAddressL1": "0x668308d77be3533c909a692302Cb4D135Bf8041C", - "iVaultAddressL1": "0x295234B7E370a5Db2D2447aCA83bc7448f151161", - - "lockbox": "0x5b08a80b4aeda84560f0570451accc25ad1e0182", - - "crossChainL1": "", - "rebalancer": "", - - "iTokenAddressL2": "0xE162075a1C0Ac7e985253972bEcA5e83Da3BBaa4", - "iVaultAddressL2": "", - "crossChainL2": "", - "inceptionLibAddress": "", - "strategyAddress": "" -} \ No newline at end of file + "chainIdL1": "1", + "chainIdL2": "252", + "eidL1": "30101", + "eidL2": "30217", + "tokenName": "Inception sfrxETH", + "tokenSymbol": "insfrxETH", + "vaultNameL2": "Inception sfrxETH Omnivault", + "ferryL2": "0x67c6A8A715fc726ffD0A40588701813d9eC04d9C", + "lzEndpointL1": "0x1a44076050125825900e736c501f859c50fE728c", + "lzEndpointL2": "0x1a44076050125825900e736c501f859c50fE728c", + "ratioFeedAddressL2": "0x19ba5ccc603e1224b8502c56087e4147cedd2522", + "ratioFeedAddressL1": "0xFd73Be536503B5Aa80Bf99D1Fd65b1306c69B191", + "underlyingAssetL1": "0xac3e018457b222d93114458476f3e3416abbe38f", + "underlyingAssetL2": "0xfc00000000000000000000000000000000000005", + "iTokenAddressL1": "0x668308d77be3533c909a692302Cb4D135Bf8041C", + "iVaultAddressL1": "0x295234B7E370a5Db2D2447aCA83bc7448f151161", + "lockbox": "0x5b08a80b4aeda84560f0570451accc25ad1e0182", + "crossChainL1": "0x53207e057E8cc72312F6981a889FC286fAFa59Dc", + "rebalancer": "0x203D19635E6dF0263a431C4d9b8E654dEc723f62", + "iTokenAddressL2": "0xE162075a1C0Ac7e985253972bEcA5e83Da3BBaa4", + "iVaultAddressL2": "0xA45EA1D6fB4b5596B4b5C5E69D02Be480625bB44", + "crossChainL2": "0x7EEd6897D9F032AbccffD2f6AAFCfb59b24BD58E", + "inceptionLibAddress": "", + "strategyAddress": "" +} diff --git a/projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol b/projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol index 10e21305..132d15b0 100644 --- a/projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol +++ b/projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol @@ -84,7 +84,7 @@ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { minAmount = 1e8; - targetCapacity = 1; + targetCapacity = 0.5 ether; protocolFee = 50 * 1e8; /// @dev deposit bonus @@ -123,12 +123,10 @@ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { /// @dev Transfers the msg.sender's assets to the vault. /// @dev Mints Inception tokens in accordance with the current ratio. /// @dev Issues the tokens to the specified receiver address. - function deposit(uint256 amount, address receiver) - external - nonReentrant - whenNotPaused - returns (uint256) - { + function deposit( + uint256 amount, + address receiver + ) external nonReentrant whenNotPaused returns (uint256) { return _deposit(amount, msg.sender, receiver); } @@ -200,11 +198,10 @@ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { /// @dev Performs burning iToken from msg.sender /// @dev Creates a withdrawal requests based on the current ratio /// @param iShares is measured in Inception token(shares) - function flashWithdraw(uint256 iShares, address receiver) - external - whenNotPaused - nonReentrant - { + function flashWithdraw( + uint256 iShares, + address receiver + ) external whenNotPaused nonReentrant { __beforeWithdraw(receiver, iShares); address claimer = msg.sender; @@ -242,11 +239,9 @@ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { /** * @notice Sends asset information (total Inception and underlying token balances) to Layer 1. */ - function sendAssetsInfoToL1(bytes memory _options) - external - payable - onlyOwnerOrOperator - { + function sendAssetsInfoToL1( + bytes memory _options + ) external payable onlyOwnerOrOperator { require( address(crossChainAdapterERC20) != address(0), CrossChainAdapterNotSet() @@ -284,11 +279,9 @@ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { /** * @notice Calculates price to send data message to Layer 1. */ - function quoteSendAssetsInfoToL1(bytes memory _options) - public - view - returns (uint256) - { + function quoteSendAssetsInfoToL1( + bytes memory _options + ) public view returns (uint256) { require( address(crossChainAdapterERC20) != address(0), CrossChainAdapterNotSet() @@ -308,11 +301,9 @@ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { * @notice Sends available ERC20 to another chain via cross-chain adapter. * @dev msg.value is used to pay for the cross-chain fees */ - function sendERC20ToL1(uint256 _chainId) - external - payable - onlyOwnerOrOperator - { + function sendERC20ToL1( + uint256 _chainId + ) external payable onlyOwnerOrOperator { uint256 freeBalance = getFreeBalance(); require( @@ -329,11 +320,9 @@ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { * @notice Calculates fees to send ERC20 to other chain. The `SEND_VALUE` encoded in options is not included in the return * @param _amount amount of token to be sent */ - function quoteSendERC20CrossChain(uint256 _amount) - public - view - returns (uint256) - { + function quoteSendERC20CrossChain( + uint256 _amount + ) public view returns (uint256) { require( address(crossChainAdapterERC20) != address(0), CrossChainAdapterNotSet() @@ -350,11 +339,9 @@ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { * @param amount Amount of the deposit. * @return bonus Calculated bonus. */ - function calculateDepositBonus(uint256 amount) - public - view - returns (uint256) - { + function calculateDepositBonus( + uint256 amount + ) public view returns (uint256) { return InternalInceptionLibrary.calculateDepositBonus( amount, @@ -367,11 +354,9 @@ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { } /// @dev Function to calculate flash withdrawal fee based on the utilization rate - function calculateFlashWithdrawFee(uint256 amount) - public - view - returns (uint256) - { + function calculateFlashWithdrawFee( + uint256 amount + ) public view returns (uint256) { uint256 capacity = getFlashCapacity(); if (amount > capacity) revert InsufficientCapacity(capacity); @@ -417,19 +402,15 @@ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { ////// Convert functions ////// ////////////////////////////*/ - function convertToShares(uint256 assets) - public - view - returns (uint256 shares) - { + function convertToShares( + uint256 assets + ) public view returns (uint256 shares) { return Convert.multiplyAndDivideFloor(assets, ratio(), 1e18); } - function convertToAssets(uint256 iShares) - public - view - returns (uint256 assets) - { + function convertToAssets( + uint256 iShares + ) public view returns (uint256 assets) { return Convert.multiplyAndDivideFloor(iShares, 1e18, ratio()); } @@ -524,10 +505,9 @@ abstract contract InceptionERC20OmniVault is InceptionERC20OmniAssetsHandler { treasuryAddress = _newTreasury; } - function setTargetFlashCapacity(uint256 newTargetCapacity) - external - onlyOwner - { + function setTargetFlashCapacity( + uint256 newTargetCapacity + ) external onlyOwner { if (newTargetCapacity == 0) revert NullParams(); emit TargetCapacityChanged(targetCapacity, newTargetCapacity); targetCapacity = newTargetCapacity; From 0203126ba40f3d6c4fb0e47c7d1d5858313b484f Mon Sep 17 00:00:00 2001 From: mellaught Date: Wed, 19 Feb 2025 13:59:01 +0300 Subject: [PATCH 29/41] minor fixes for InceptionToken --- .../contracts/tokens/InceptionToken.sol | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/projects/vaults/contracts/tokens/InceptionToken.sol b/projects/vaults/contracts/tokens/InceptionToken.sol index 9b1b9cf8..2aad1b4e 100644 --- a/projects/vaults/contracts/tokens/InceptionToken.sol +++ b/projects/vaults/contracts/tokens/InceptionToken.sol @@ -6,11 +6,11 @@ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Own import {IInceptionToken} from "../interfaces/common/IInceptionToken.sol"; import {IInceptionVault_EL} from "../interfaces/eigenlayer-vault/IInceptionVault_EL.sol"; -import "../lib/Convert.sol"; - -/// @author The InceptionLRT team -/// @title The InceptionToken contract -/// @dev Specifically, this includes pausable functions and minting from the vault +/** + * @author The InceptionLRT team + * @title The InceptionToken contract + * @dev Specifically, this includes pausable functions and minting from the vault + */ contract InceptionToken is OwnableUpgradeable, ERC20Upgradeable, @@ -24,7 +24,7 @@ contract InceptionToken is modifier onlyMinter() { require( - msg.sender == address(vault) || msg.sender == rebalancer, + msg.sender == address(vault) || msg.sender == rebalancer, "InceptionToken: only minter allowed" ); _; @@ -62,11 +62,17 @@ contract InceptionToken is require(!paused(), "InceptionToken: token transfer while paused"); } - function burn(address account, uint256 amount) external override onlyMinter { + function burn( + address account, + uint256 amount + ) external override onlyMinter { _burn(account, amount); } - function mint(address account, uint256 amount) external override onlyMinter { + function mint( + address account, + uint256 amount + ) external override onlyMinter { _mint(account, amount); } From 1eb78e630f7edd5601eeb3bdbcffa21c04c71631 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Wed, 19 Feb 2025 15:05:19 +0300 Subject: [PATCH 30/41] upgrade script for insfrxETH --- .../migration/mainnet/upgrade/upgrade-tokens.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/projects/vaults/scripts/migration/mainnet/upgrade/upgrade-tokens.js b/projects/vaults/scripts/migration/mainnet/upgrade/upgrade-tokens.js index 2bd1034d..41f33045 100644 --- a/projects/vaults/scripts/migration/mainnet/upgrade/upgrade-tokens.js +++ b/projects/vaults/scripts/migration/mainnet/upgrade/upgrade-tokens.js @@ -2,14 +2,18 @@ const { ethers, upgrades } = require("hardhat"); const { BatchBuilder } = require("../../gnosis-safe/gnosis-safe"); const InstETHAddress = "0x7FA768E035F956c41d6aeaa3Bd857e7E5141CAd5", - InrETHAddress = "0x80d69e79258FE9D056c822461c4eb0B4ca8802E2"; + InrETHAddress = "0x80d69e79258FE9D056c822461c4eb0B4ca8802E2", + InsfrxETHAddress = "0x668308d77be3533c909a692302Cb4D135Bf8041C"; async function main() { // IstETH - await upgradeInceptionToken("pausable", InstETHAddress); +// await upgradeInceptionToken("pausable", InstETHAddress); // InrETH - await upgradeInceptionToken("pausable", InrETHAddress); + // await upgradeInceptionToken("pausable", InrETHAddress); + + // InsfrxETH + await upgradeInceptionToken("pausable", InsfrxETHAddress); } const upgradeInceptionToken = async (upgradeName, address) => { @@ -23,7 +27,7 @@ const upgradeInceptionToken = async (upgradeName, address) => { const proxyAdmin = await upgrades.erc1967.getAdminAddress(address); const provider = await deployer.provider.getNetwork(); - new BatchBuilder("", `${upgradeName}_${address}`, "added pausable functions", provider).addOzUpgrade(proxyAdmin, address, impl).save(); + new BatchBuilder("", `${upgradeName}_${address}`, "added rebalancer minting", provider).addOzUpgrade(proxyAdmin, address, impl).save(); }; main() From 18ccaa3c58f1c2f71bbb0073844fdc2a728dd70c Mon Sep 17 00:00:00 2001 From: mellaught Date: Thu, 20 Feb 2025 13:14:45 +0300 Subject: [PATCH 31/41] deployed a new impl for insfrxETH --- projects/vaults/.openzeppelin/mainnet.json | 169 +++++++++++++++++++++ projects/vaults/hardhat.config.ts | 8 - 2 files changed, 169 insertions(+), 8 deletions(-) diff --git a/projects/vaults/.openzeppelin/mainnet.json b/projects/vaults/.openzeppelin/mainnet.json index 1483cce0..e4daf63a 100644 --- a/projects/vaults/.openzeppelin/mainnet.json +++ b/projects/vaults/.openzeppelin/mainnet.json @@ -6919,6 +6919,175 @@ }, "namespaces": {} } + }, + "456f9fbd8e38071d7b934b125bc375a192ff2bafe87763efe1f99771012f09c3": { + "address": "0x54e1eab75Ce5EFDF9b16029E2DB5f9996FD46C37", + "txHash": "0x18d313689017a25e71b99add759d9b7160c159155fd7d173315ddfbdc455cd51", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_balances", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:42" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "103", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "_name", + "offset": 0, + "slot": "104", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:46" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "105", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:47" + }, + { + "label": "__gap", + "offset": 0, + "slot": "106", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:376" + }, + { + "label": "vault", + "offset": 0, + "slot": "151", + "type": "t_contract(IInceptionVault_EL)6712", + "contract": "InceptionToken", + "src": "contracts/tokens/InceptionToken.sol:19" + }, + { + "label": "_paused", + "offset": 20, + "slot": "151", + "type": "t_bool", + "contract": "InceptionToken", + "src": "contracts/tokens/InceptionToken.sol:21" + }, + { + "label": "rebalancer", + "offset": 0, + "slot": "152", + "type": "t_address", + "contract": "InceptionToken", + "src": "contracts/tokens/InceptionToken.sol:23" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IInceptionVault_EL)6712": { + "label": "contract IInceptionVault_EL", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } } } } diff --git a/projects/vaults/hardhat.config.ts b/projects/vaults/hardhat.config.ts index 03bc5aaa..2c035c20 100644 --- a/projects/vaults/hardhat.config.ts +++ b/projects/vaults/hardhat.config.ts @@ -21,14 +21,6 @@ const config: HardhatUserConfig = { }, }, }, - networks: { - hardhat: { - forking: { - url: `${process.env.HOLESKY_RPC}`, - blockNumber: 2680454, - }, - }, - }, }; export default config; From 69fab70a82551eb096d10fd23452305286dd982d Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Fri, 21 Feb 2025 22:55:49 +0300 Subject: [PATCH 32/41] LZ config scripts --- .../scripts/fix_lz_config_l1.js | 84 +++++++++++++++++++ .../scripts/fix_lz_config_l2.js | 84 +++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 projects/omnichain-deployer/scripts/fix_lz_config_l1.js create mode 100644 projects/omnichain-deployer/scripts/fix_lz_config_l2.js diff --git a/projects/omnichain-deployer/scripts/fix_lz_config_l1.js b/projects/omnichain-deployer/scripts/fix_lz_config_l1.js new file mode 100644 index 00000000..393ce376 --- /dev/null +++ b/projects/omnichain-deployer/scripts/fix_lz_config_l1.js @@ -0,0 +1,84 @@ +const { ethers } = require('hardhat'); + + +// Send the transaction +async function sendTransaction() { + try { + // Addresses + const oappAddress = '0x53207e057E8cc72312F6981a889FC286fAFa59Dc'; // Replace with your OApp address + const recvLibAddress = '0xc02Ab410f0734EFa3F14628780e6e695156024C2'; // Replace with your send message library address + + // Configuration + const remoteEid = 30255; // Example EID, replace with the actual value + const ulnConfig = { + confirmations: 20, // Example value, replace with actual + requiredDVNCount: 2, // Example value, replace with actual + optionalDVNCount: 0, // Example value, replace with actual + optionalDVNThreshold: 0, // Example value, replace with actual + requiredDVNs: ['0x589dedbd617e0cbcb916a9223f4d1300c294236b', '0xa59ba433ac34d2927232918ef5b2eaafcf130ba5'], // Replace with actual addresses, must be in alphabetical order + optionalDVNs: [], // Replace with actual addresses, must be in alphabetical order + }; + /* + const executorConfig = { + maxMessageSize: 10000, // Example value, replace with actual + executorAddress: '0xExecutorAddress', // Replace with the actual executor address + }; + */ + // Provider and Signer + //const provider = new ethers.providers.JsonRpcProvider(YOUR_RPC_URL); + const [signer] = await ethers.getSigners(); + + // ABI and Contract + const endpointAbi = [ + 'function setConfig(address oappAddress, address sendLibAddress, tuple(uint32 eid, uint32 configType, bytes config)[] setConfigParams) external', + ]; + const endpointContract = new ethers.Contract("0x1a44076050125825900e736c501f859c50fE728c", endpointAbi, signer); + + // Encode UlnConfig using defaultAbiCoder + const configTypeUlnStruct = + 'tuple(uint64 confirmations, uint8 requiredDVNCount, uint8 optionalDVNCount, uint8 optionalDVNThreshold, address[] requiredDVNs, address[] optionalDVNs)'; + const encodedUlnConfig = ethers.AbiCoder.defaultAbiCoder().encode([configTypeUlnStruct], [ulnConfig]); + + // Encode ExecutorConfig using defaultAbiCoder + /* + const configTypeExecutorStruct = 'tuple(uint32 maxMessageSize, address executorAddress)'; + const encodedExecutorConfig = ethers.utils.defaultAbiCoder.encode( + [configTypeExecutorStruct], + [executorConfig], + ); + */ + // Define the SetConfigParam structs + const setConfigParamUln = { + eid: remoteEid, + configType: 2, // ULN_CONFIG_TYPE + config: encodedUlnConfig, + }; + /* + const setConfigParamExecutor = { + eid: remoteEid, + configType: 1, // EXECUTOR_CONFIG_TYPE + config: encodedExecutorConfig, + }; + */ + + + + + + + + const tx = await endpointContract.setConfig( + oappAddress, + recvLibAddress, + [setConfigParamUln] //, setConfigParamExecutor], // Array of SetConfigParam structs + ); + + console.log('Transaction sent:', tx.hash); + const receipt = await tx.wait(); + console.log('Transaction confirmed:', receipt.status); + } catch (error) { + console.error('Transaction failed:', error); + } +} + +sendTransaction(); \ No newline at end of file diff --git a/projects/omnichain-deployer/scripts/fix_lz_config_l2.js b/projects/omnichain-deployer/scripts/fix_lz_config_l2.js new file mode 100644 index 00000000..58633d38 --- /dev/null +++ b/projects/omnichain-deployer/scripts/fix_lz_config_l2.js @@ -0,0 +1,84 @@ +const { ethers } = require('hardhat'); + + +// Send the transaction +async function sendTransaction() { + try { + // Addresses + const oappAddress = '0x7EEd6897D9F032AbccffD2f6AAFCfb59b24BD58E'; // Replace with your OApp address + const sendLibAddress = '0x377530cdA84DFb2673bF4d145DCF0C4D7fdcB5b6'; // Replace with your send message library address + + // Configuration + const remoteEid = 30101; // Example EID, replace with the actual value + const ulnConfig = { + confirmations: 20, // Example value, replace with actual + requiredDVNCount: 2, // Example value, replace with actual + optionalDVNCount: 0, // Example value, replace with actual + optionalDVNThreshold: 0, // Example value, replace with actual + requiredDVNs: ['0xa7b5189bca84cd304d8553977c7c614329750d99', '0xcce466a522984415bc91338c232d98869193d46e'], // Replace with actual addresses, must be in alphabetical order + optionalDVNs: [], // Replace with actual addresses, must be in alphabetical order + }; + /* + const executorConfig = { + maxMessageSize: 10000, // Example value, replace with actual + executorAddress: '0xExecutorAddress', // Replace with the actual executor address + }; + */ + // Provider and Signer + //const provider = new ethers.providers.JsonRpcProvider(YOUR_RPC_URL); + const [signer] = await ethers.getSigners(); + + // ABI and Contract + const endpointAbi = [ + 'function setConfig(address oappAddress, address sendLibAddress, tuple(uint32 eid, uint32 configType, bytes config)[] setConfigParams) external', + ]; + const endpointContract = new ethers.Contract("0x1a44076050125825900e736c501f859c50fE728c", endpointAbi, signer); + + // Encode UlnConfig using defaultAbiCoder + const configTypeUlnStruct = + 'tuple(uint64 confirmations, uint8 requiredDVNCount, uint8 optionalDVNCount, uint8 optionalDVNThreshold, address[] requiredDVNs, address[] optionalDVNs)'; + const encodedUlnConfig = ethers.AbiCoder.defaultAbiCoder().encode([configTypeUlnStruct], [ulnConfig]); + + // Encode ExecutorConfig using defaultAbiCoder + /* + const configTypeExecutorStruct = 'tuple(uint32 maxMessageSize, address executorAddress)'; + const encodedExecutorConfig = ethers.utils.defaultAbiCoder.encode( + [configTypeExecutorStruct], + [executorConfig], + ); + */ + // Define the SetConfigParam structs + const setConfigParamUln = { + eid: remoteEid, + configType: 2, // ULN_CONFIG_TYPE + config: encodedUlnConfig, + }; + /* + const setConfigParamExecutor = { + eid: remoteEid, + configType: 1, // EXECUTOR_CONFIG_TYPE + config: encodedExecutorConfig, + }; + */ + + + + + + + + const tx = await endpointContract.setConfig( + oappAddress, + sendLibAddress, + [setConfigParamUln] //, setConfigParamExecutor], // Array of SetConfigParam structs + ); + + console.log('Transaction sent:', tx.hash); + const receipt = await tx.wait(); + console.log('Transaction confirmed:', receipt.status); + } catch (error) { + console.error('Transaction failed:', error); + } +} + +sendTransaction(); \ No newline at end of file From ce821c8b5c8b59d7cfd1374beac0b51823ee9424 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Thu, 27 Feb 2025 16:24:35 +0300 Subject: [PATCH 33/41] fix l2 chainid --- projects/omnichain-deployer/state.example.prod.json | 2 +- projects/omnichain-deployer/state.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/omnichain-deployer/state.example.prod.json b/projects/omnichain-deployer/state.example.prod.json index b09f8197..5ca0722c 100644 --- a/projects/omnichain-deployer/state.example.prod.json +++ b/projects/omnichain-deployer/state.example.prod.json @@ -2,7 +2,7 @@ "chainIdL1": "1", "chainIdL2": "252", "eidL1": "30101", - "eidL2": "30217", + "eidL2": "30255", "tokenName": "Inception sfrxETH", "tokenSymbol": "insfrxETH", "vaultNameL2": "Inception_sfrxETH_Omnivault", diff --git a/projects/omnichain-deployer/state.json b/projects/omnichain-deployer/state.json index f43cac46..a1dacb45 100644 --- a/projects/omnichain-deployer/state.json +++ b/projects/omnichain-deployer/state.json @@ -2,7 +2,7 @@ "chainIdL1": "1", "chainIdL2": "252", "eidL1": "30101", - "eidL2": "30217", + "eidL2": "30255", "tokenName": "Inception sfrxETH", "tokenSymbol": "insfrxETH", "vaultNameL2": "Inception sfrxETH Omnivault", From 54ef5e99e681a73beb987c4bd8c46c2216545a0d Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Thu, 27 Feb 2025 16:24:57 +0300 Subject: [PATCH 34/41] misc scripts --- .../scripts/gnosis-safe/checksum.js | 55 ++++ .../scripts/gnosis-safe/gnosis-safe.js | 287 ++++++++++++++++++ .../scripts/set_l1_peer_data.js | 43 +++ .../ownership/accept-ownership-multi.js | 36 +++ 4 files changed, 421 insertions(+) create mode 100644 projects/omnichain-deployer/scripts/gnosis-safe/checksum.js create mode 100644 projects/omnichain-deployer/scripts/gnosis-safe/gnosis-safe.js create mode 100644 projects/omnichain-deployer/scripts/set_l1_peer_data.js create mode 100644 projects/vaults/scripts/migration/mainnet/ownership/accept-ownership-multi.js diff --git a/projects/omnichain-deployer/scripts/gnosis-safe/checksum.js b/projects/omnichain-deployer/scripts/gnosis-safe/checksum.js new file mode 100644 index 00000000..94325328 --- /dev/null +++ b/projects/omnichain-deployer/scripts/gnosis-safe/checksum.js @@ -0,0 +1,55 @@ +// https://github.com/safe-global/safe-react-apps/blob/main/apps/tx-builder/src/lib/checksum.ts +const stringifyReplacer = (_, value) => (value === undefined ? null : value); + +const serializeJSONObject = (json) => { + if (Array.isArray(json)) { + return `[${json.map((el) => serializeJSONObject(el)).join(",")}]`; + } + + if (typeof json === "object" && json !== null) { + let acc = ""; + const keys = Object.keys(json).sort(); + acc += `{${JSON.stringify(keys, stringifyReplacer)}`; + + for (let i = 0; i < keys.length; i++) { + acc += `${serializeJSONObject(json[keys[i]])},`; + } + + return `${acc}}`; + } + + return `${JSON.stringify(json, stringifyReplacer)}`; +}; + +const calculateChecksum = (batchFile, web3) => { + const serialized = serializeJSONObject({ + ...batchFile, + meta: { ...batchFile.meta, name: null }, + }); + const sha = web3.utils.sha3(serialized); + + return sha || undefined; +}; + +const addChecksum = (batchFile, web3) => { + return { + ...batchFile, + meta: { + ...batchFile.meta, + checksum: calculateChecksum(batchFile, web3), + }, + }; +}; + +const validateChecksum = (batchFile) => { + const targetObj = { ...batchFile }; + const checksum = targetObj.meta.checksum; + delete targetObj.meta.checksum; + + return calculateChecksum(targetObj) === checksum; +}; + +module.exports = { + validateChecksum, + addChecksum, +}; diff --git a/projects/omnichain-deployer/scripts/gnosis-safe/gnosis-safe.js b/projects/omnichain-deployer/scripts/gnosis-safe/gnosis-safe.js new file mode 100644 index 00000000..ed048d4e --- /dev/null +++ b/projects/omnichain-deployer/scripts/gnosis-safe/gnosis-safe.js @@ -0,0 +1,287 @@ +const fs = require("fs"); +const { addChecksum } = require("./checksum"); + +const GS_BATCH_TEMPLATE = { + version: "1.0", + chainId: "5", // actual chain id + createdAt: 1, + meta: { + name: "", // migration name + description: "", // short description of migration + txBuilderVersion: "1.11.1", + createdFromSafeAddress: "", // can be empty? + createdFromOwnerAddress: "", // can be empty? + checksum: "", // ?? + }, + transactions: [], +}; + +const GS_TX_TEMPLATE = { + to: "", // to address + value: "0", + data: null, + contractMethod: { + inputs: [ + { + internalType: "address", + name: "impl", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + payable: false, + }, + contractInputsValues: {}, +}; + +const ERC1967ProxyABI = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + stateMutability: "payable", + type: "fallback", + }, + { + stateMutability: "payable", + type: "receive", + }, + { + inputs: [], + name: "getCurrentVersion", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "impl", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; +const TUProxyAdmin = [ + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "address", name: "previousOwner", type: "address" }, + { indexed: true, internalType: "address", name: "newOwner", type: "address" }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [ + { internalType: "contract AdminUpgradeabilityProxy", name: "proxy", type: "address" }, + { internalType: "address", name: "newAdmin", type: "address" }, + ], + name: "changeProxyAdmin", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [{ internalType: "contract AdminUpgradeabilityProxy", name: "proxy", type: "address" }], + name: "getProxyAdmin", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [{ internalType: "contract AdminUpgradeabilityProxy", name: "proxy", type: "address" }], + name: "getProxyImplementation", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { inputs: [], name: "renounceOwnership", outputs: [], stateMutability: "nonpayable", type: "function" }, + { + inputs: [{ internalType: "address", name: "newOwner", type: "address" }], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { internalType: "contract AdminUpgradeabilityProxy", name: "proxy", type: "address" }, + { internalType: "address", name: "implementation", type: "address" }, + ], + name: "upgrade", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { internalType: "contract AdminUpgradeabilityProxy", name: "proxy", type: "address" }, + { internalType: "address", name: "implementation", type: "address" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + name: "upgradeAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, +]; + +class BatchBuilder { + web3; + data; + + constructor(web3, name, description, provider) { + this.web3 = web3; + + const meta = Object.assign({}, GS_BATCH_TEMPLATE.meta, { + name: `${name}_${provider.name}`, + description, + }); + const chain_id = provider.chainId; + // console.log("template", GS_BATCH_TEMPLATE); + + this.data = { + ...GS_BATCH_TEMPLATE, + createdAt: Date.now(), + chainId: chain_id.toString(), + meta, + transactions: [], + }; + } + + send({ to, value }) { + this.data.transactions.push({ + to, + value, + }); + } + + add({ to, value, method, args }, abi) { + this.data.transactions.push( + Object.assign({}, GS_TX_TEMPLATE, { + contractMethod: abi.find((v) => v.name === method && v.type === "function"), + to, + value: value || "0", + contractInputsValues: args, + }) + ); + return this; + } + + addOzUpgrade(admin, proxy, impl) { + this.add( + { + to: admin.address || admin, + method: "upgrade", + args: { + proxy: proxy, + implementation: impl, + }, + }, + admin.abi || TUProxyAdmin + ); + + return this; + } + + addERC1967Upgrade(proxy, impl) { + this.add( + { + to: proxy.address, + method: "upgradeToAndCall", + args: { + impl: impl.address, + data: "0x", + }, + }, + ERC1967ProxyABI + ); + + return this; + } + + save() { + // this.data = addChecksum(this.data, this.web3); + console.log("transaction batch before save", this.data); + if (!fs.existsSync("safe-batch")) { + fs.mkdirSync("safe-batch"); + } + fs.writeFileSync(`safe-batch/${this.data.meta.name}.json`, JSON.stringify(this.data)); + this.data = {}; + } +} + +module.exports = { + BatchBuilder, +}; diff --git a/projects/omnichain-deployer/scripts/set_l1_peer_data.js b/projects/omnichain-deployer/scripts/set_l1_peer_data.js new file mode 100644 index 00000000..78f36e42 --- /dev/null +++ b/projects/omnichain-deployer/scripts/set_l1_peer_data.js @@ -0,0 +1,43 @@ +const { ethers, upgrades } = require("hardhat"); +const { BatchBuilder } = require("./gnosis-safe/gnosis-safe") + +const adapterAddr = "0x53207e057e8cc72312f6981a889fc286fafa59dc" // L1 adapter +const adapterL2 = "0x7EEd6897D9F032AbccffD2f6AAFCfb59b24BD58E" +const peerValue = "0x000000000000000000000000" + adapterL2.substring(2) + +async function main() { + // @openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable + const [deployer] = await ethers.getSigners(); + const provider = await deployer.provider.getNetwork(); + + const bb = new BatchBuilder("", `Repair LZ config`, "Repair LZ config that was erased by setting receive lib", provider) + + + let contract = await ethers.getContractAt("LZCrossChainAdapterL1", adapterAddr); + bb.add( + { + to: contract, + value: 0, + method: "setChainIdFromEid", + args: { _eid:"30255", _chainId:"252"} + }, + JSON.parse(await contract.interface.formatJson()) + ).add( + { + to: contract, + value: 0, + method: "setPeer", + args: {_eid:"30255", _peer:peerValue} + }, + JSON.parse(await contract.interface.formatJson()) + ).save(); + + //bb.save(); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/projects/vaults/scripts/migration/mainnet/ownership/accept-ownership-multi.js b/projects/vaults/scripts/migration/mainnet/ownership/accept-ownership-multi.js new file mode 100644 index 00000000..7bca44fb --- /dev/null +++ b/projects/vaults/scripts/migration/mainnet/ownership/accept-ownership-multi.js @@ -0,0 +1,36 @@ +const { ethers, upgrades } = require("hardhat"); +const { BatchBuilder } = require("../../gnosis-safe/gnosis-safe"); + +const addressesToAccept = [ + "0x203d19635e6df0263a431c4d9b8e654dec723f62", // L1 rebalancer + "0x53207e057e8cc72312f6981a889fc286fafa59dc" // L1 adapter +] + +async function main() { + // @openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable + const [deployer] = await ethers.getSigners(); + + const bb = new BatchBuilder("", `Accepting ownerships`, "Batch-accept ownerships as multisig", provider) + + + addressesToAccept.forEach(async (element) => { + let contract = await ethers.getContractAt("@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable", element); + bb.add( + { + to: element, + value: 0, + method: "acceptOwnership", + args: {} + }, + JSON.parse(await contract.interface.formatJson())) + }); + + bb.save(); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); From d6a2eef69330473079e724056e14ada9f44046d3 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Fri, 28 Feb 2025 15:56:00 +0300 Subject: [PATCH 35/41] add a way to set LZ delegate to contract owner --- .../FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol | 6 ++++++ .../contracts/LayerZero/LZCrossChainAdapterL1.sol | 6 ++++++ .../contracts/LayerZero/LZCrossChainAdapterL2.sol | 7 +++++++ projects/bridge-lz/contracts/interfaces/IAdapter.sol | 1 + 4 files changed, 20 insertions(+) diff --git a/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol b/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol index c9995826..ef4f4bc4 100644 --- a/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol +++ b/projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol @@ -144,4 +144,10 @@ contract FraxFerryLZCrossChainAdapterL2 is { revert NotAllowedInThisAdapterType(); } + + function setDelegateToCurrentOwner() external onlyOwnerRestricted { + address delegate = owner(); + endpoint.setDelegate(delegate); + emit LZDelegateSet(delegate); + } } diff --git a/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL1.sol b/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL1.sol index e3d4d647..a36a3c3a 100644 --- a/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL1.sol +++ b/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL1.sol @@ -71,4 +71,10 @@ contract LZCrossChainAdapterL1 is _handleCrossChainData(chainId, payload); } } + + function setDelegateToCurrentOwner() external onlyOwnerRestricted { + address delegate = owner(); + endpoint.setDelegate(delegate); + emit LZDelegateSet(delegate); + } } diff --git a/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL2.sol b/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL2.sol index 33d49473..247d4be3 100644 --- a/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL2.sol +++ b/projects/bridge-lz/contracts/LayerZero/LZCrossChainAdapterL2.sol @@ -87,4 +87,11 @@ contract LZCrossChainAdapterL2 is _handleCrossChainEth(chainId); } } + + function setDelegateToCurrentOwner() external onlyOwnerRestricted { + address delegate = owner(); + endpoint.setDelegate(delegate); + emit LZDelegateSet(delegate); + } + } diff --git a/projects/bridge-lz/contracts/interfaces/IAdapter.sol b/projects/bridge-lz/contracts/interfaces/IAdapter.sol index ceee6788..b3544523 100644 --- a/projects/bridge-lz/contracts/interfaces/IAdapter.sol +++ b/projects/bridge-lz/contracts/interfaces/IAdapter.sol @@ -21,6 +21,7 @@ interface IAdapter { bytes data, uint256 fee ); + event LZDelegateSet(address indexed delegate); error TargetReceiverNotSet(); error TransferToTargetReceiverFailed(); From f8ed4203839b6cd0c9f079e6d426d89539248398 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Fri, 28 Feb 2025 16:13:05 +0300 Subject: [PATCH 36/41] adapter upgrade scripts --- .../scripts/upgrade_frax_adapter_safe.js | 30 +++++++++++++++++++ .../scripts/upgrade_l1_adapter_safe.js | 30 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 projects/omnichain-deployer/scripts/upgrade_frax_adapter_safe.js create mode 100644 projects/omnichain-deployer/scripts/upgrade_l1_adapter_safe.js diff --git a/projects/omnichain-deployer/scripts/upgrade_frax_adapter_safe.js b/projects/omnichain-deployer/scripts/upgrade_frax_adapter_safe.js new file mode 100644 index 00000000..dcb4a900 --- /dev/null +++ b/projects/omnichain-deployer/scripts/upgrade_frax_adapter_safe.js @@ -0,0 +1,30 @@ +// deplot proxy +const { ethers, upgrades } = require("hardhat"); +const { BatchBuilder } = require("./gnosis-safe/gnosis-safe"); + +const ADAPTER_ADDRESS = "0x7EEd6897D9F032AbccffD2f6AAFCfb59b24BD58E"; + +async function main() { + const [deployer] = await ethers.getSigners(); + + console.log("Deploying contracts with the account:", deployer.address); + const initBalance = await deployer.provider.getBalance(deployer.address); + console.log("Account balance:", initBalance.toString()); + + const adapterFactory = await hre.ethers.getContractFactory("FraxFerryLZCrossChainAdapterL2"); + const impl = await upgrades.prepareUpgrade(ADAPTER_ADDRESS, adapterFactory); + console.log(`New Impl of FraxFeryLZCrosschainAdapterL2(${impl}) was deployed`); + + const proxyAdmin = await upgrades.erc1967.getAdminAddress(ADAPTER_ADDRESS); + const provider = await deployer.provider.getNetwork(); + new BatchBuilder("", `LZDelegate_${ADAPTER_ADDRESS}`, "added LZ delegate setting", provider).addOzUpgrade(proxyAdmin, ADAPTER_ADDRESS, impl).save(); + console.log("Frax LZ adapter upgrade ready"); +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); + diff --git a/projects/omnichain-deployer/scripts/upgrade_l1_adapter_safe.js b/projects/omnichain-deployer/scripts/upgrade_l1_adapter_safe.js new file mode 100644 index 00000000..4074184b --- /dev/null +++ b/projects/omnichain-deployer/scripts/upgrade_l1_adapter_safe.js @@ -0,0 +1,30 @@ +// deplot proxy +const { ethers, upgrades } = require("hardhat"); +const { BatchBuilder } = require("./gnosis-safe/gnosis-safe"); + +const L1_ADAPTER_ADDRESS = "0x53207e057E8cc72312F6981a889FC286fAFa59Dc"; + +async function main() { + const [deployer] = await ethers.getSigners(); + + console.log("Deploying contracts with the account:", deployer.address); + const initBalance = await deployer.provider.getBalance(deployer.address); + console.log("Account balance:", initBalance.toString()); + + const adapterFactory = await hre.ethers.getContractFactory("LZCrossChainAdapterL1"); + const impl = await upgrades.prepareUpgrade(L1_ADAPTER_ADDRESS, adapterFactory); + console.log(`New Impl of LZCrossChainAdapterL1(${impl}) was deployed`); + + const proxyAdmin = await upgrades.erc1967.getAdminAddress(L1_ADAPTER_ADDRESS); + const provider = await deployer.provider.getNetwork(); + new BatchBuilder("", `LZDelegate_${L1_ADAPTER_ADDRESS}`, "added LZ delegate setting", provider).addOzUpgrade(proxyAdmin, L1_ADAPTER_ADDRESS, impl).save(); + console.log("LZCrossChainAdapterL1 upgrade ready"); +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); + From c549af0ae01cff8e66098441fbd8659d6346bf56 Mon Sep 17 00:00:00 2001 From: mellaught Date: Mon, 3 Mar 2025 12:47:52 +0300 Subject: [PATCH 37/41] deployed new impls for adapters --- .../.openzeppelin/mainnet.json | 548 ++++++++++++++++++ .../.openzeppelin/unknown-252.json | 197 +++++++ 2 files changed, 745 insertions(+) create mode 100644 projects/omnichain-deployer/.openzeppelin/mainnet.json diff --git a/projects/omnichain-deployer/.openzeppelin/mainnet.json b/projects/omnichain-deployer/.openzeppelin/mainnet.json new file mode 100644 index 00000000..d7d41251 --- /dev/null +++ b/projects/omnichain-deployer/.openzeppelin/mainnet.json @@ -0,0 +1,548 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x53207e057E8cc72312F6981a889FC286fAFa59Dc", + "txHash": "0xe05dd4f39f18bf2972debf36262f4d9188fa8fe6910e72a7969b909cbfb97ea7", + "kind": "transparent" + }, + { + "address": "0x203D19635E6dF0263a431C4d9b8E654dEc723f62", + "txHash": "0xc2c2d69c3a50e09e988790216d7dd25dc9d3d5154913c905138f34578a0e41b5", + "kind": "transparent" + } + ], + "impls": { + "282e0124b49f383e0311a1370ee13b2c4aaba3a36e709eba7be4b029e36dda6e": { + "address": "0xA25cd75108334E5Ae6cf3a1b69b4880878B4FE83", + "txHash": "0xd83d46b9b84ca07f95b3563445d85d1922b5dc84dea9d3983339b244e9866189", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "endpoint", + "offset": 0, + "slot": "0", + "type": "t_contract(ILayerZeroEndpointV2)2638", + "contract": "OAppCoreUpgradeable", + "src": "contracts/bridge-lz/LayerZero/OAppCoreUpgradeable.sol:14" + }, + { + "label": "peers", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_uint32,t_bytes32)", + "contract": "OAppCoreUpgradeable", + "src": "contracts/bridge-lz/LayerZero/OAppCoreUpgradeable.sol:17" + }, + { + "label": "eidToChainId", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint32,t_uint256)", + "contract": "AbstractLZCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractLZCrossChainAdapter.sol:28" + }, + { + "label": "chainIdToEid", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_uint256,t_uint32)", + "contract": "AbstractLZCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractLZCrossChainAdapter.sol:29" + }, + { + "label": "targetReceiver", + "offset": 0, + "slot": "4", + "type": "t_address", + "contract": "AbstractCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractCrossChainAdapter.sol:21" + }, + { + "label": "_initialized", + "offset": 20, + "slot": "4", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 21, + "slot": "4", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "5", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "55", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_pendingOwner", + "offset": 0, + "slot": "105", + "type": "t_address", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "106", + "type": "t_array(t_uint256)49_storage", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:70" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(ILayerZeroEndpointV2)2638": { + "label": "contract ILayerZeroEndpointV2", + "numberOfBytes": "20" + }, + "t_mapping(t_uint256,t_uint32)": { + "label": "mapping(uint256 => uint32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_bytes32)": { + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_uint256)": { + "label": "mapping(uint32 => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "17334431a718242e313d37c1d88535868bc4c2ff9e2a3ac23d60acfa380c47da": { + "address": "0x8842C3642F6f2a561c1b3428E7f64000e494Cd30", + "txHash": "0x73ac86cce2ecf2266b372abf6e9089759e37803040a6b47d1c2ecd2591ccafbc", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:70" + }, + { + "label": "underlyingAsset", + "offset": 0, + "slot": "151", + "type": "t_contract(IERC20)995", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:24" + }, + { + "label": "inceptionToken", + "offset": 0, + "slot": "152", + "type": "t_contract(IInceptionToken)2166", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:25" + }, + { + "label": "lockBox", + "offset": 0, + "slot": "153", + "type": "t_address", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:26" + }, + { + "label": "inceptionVault", + "offset": 0, + "slot": "154", + "type": "t_contract(IInceptionVault)1911", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:27" + }, + { + "label": "operator", + "offset": 0, + "slot": "155", + "type": "t_address", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:29" + }, + { + "label": "lastTx", + "offset": 0, + "slot": "156", + "type": "t_struct(Transaction)1920_storage", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:31" + }, + { + "label": "defaultAdapter", + "offset": 0, + "slot": "159", + "type": "t_address_payable", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:33" + }, + { + "label": "defaultChainId", + "offset": 0, + "slot": "160", + "type": "t_uint256", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:34" + }, + { + "label": "assetInfoTxMaxDelay", + "offset": 0, + "slot": "161", + "type": "t_uint256", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:35" + }, + { + "label": "__gap", + "offset": 0, + "slot": "162", + "type": "t_array(t_uint256)41_storage", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:37" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_uint256)41_storage": { + "label": "uint256[41]", + "numberOfBytes": "1312" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IERC20)995": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IInceptionToken)2166": { + "label": "contract IInceptionToken", + "numberOfBytes": "20" + }, + "t_contract(IInceptionVault)1911": { + "label": "contract IInceptionVault", + "numberOfBytes": "20" + }, + "t_struct(Transaction)1920_storage": { + "label": "struct IRebalancer.Transaction", + "members": [ + { + "label": "timestamp", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "underlyingBalance", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "inceptionTokenSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "f8a7080f80c8e4805c2fe533906180797ecf37ffdbea180f2daf74a566689fa0": { + "address": "0xC18c5025615b26bCdF66128715C031fDa082F6ef", + "txHash": "0xd2acd10481e6efc8696d3c39a77b373d0cc738bf7bc536528f594cea61a0137d", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "endpoint", + "offset": 0, + "slot": "0", + "type": "t_contract(ILayerZeroEndpointV2)677", + "contract": "OAppCoreUpgradeable", + "src": "contracts/bridge-lz/LayerZero/OAppCoreUpgradeable.sol:14" + }, + { + "label": "peers", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_uint32,t_bytes32)", + "contract": "OAppCoreUpgradeable", + "src": "contracts/bridge-lz/LayerZero/OAppCoreUpgradeable.sol:17" + }, + { + "label": "eidToChainId", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint32,t_uint256)", + "contract": "AbstractLZCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractLZCrossChainAdapter.sol:28" + }, + { + "label": "chainIdToEid", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_uint256,t_uint32)", + "contract": "AbstractLZCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractLZCrossChainAdapter.sol:29" + }, + { + "label": "targetReceiver", + "offset": 0, + "slot": "4", + "type": "t_address", + "contract": "AbstractCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractCrossChainAdapter.sol:21" + }, + { + "label": "_initialized", + "offset": 20, + "slot": "4", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 21, + "slot": "4", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "5", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "55", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_pendingOwner", + "offset": 0, + "slot": "105", + "type": "t_address", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "106", + "type": "t_array(t_uint256)49_storage", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:70" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(ILayerZeroEndpointV2)677": { + "label": "contract ILayerZeroEndpointV2", + "numberOfBytes": "20" + }, + "t_mapping(t_uint256,t_uint32)": { + "label": "mapping(uint256 => uint32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_bytes32)": { + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_uint256)": { + "label": "mapping(uint32 => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + } + } +} diff --git a/projects/omnichain-deployer/.openzeppelin/unknown-252.json b/projects/omnichain-deployer/.openzeppelin/unknown-252.json index 356d1412..6ba485b8 100644 --- a/projects/omnichain-deployer/.openzeppelin/unknown-252.json +++ b/projects/omnichain-deployer/.openzeppelin/unknown-252.json @@ -502,6 +502,203 @@ }, "namespaces": {} } + }, + "58a103b05e18746b42ea967d907be8a056bd8d6d1b8002aef00b6151f03042e2": { + "address": "0x5115fFCb0d676511d111867fD2b9Fcb692a68491", + "txHash": "0xb22a7a846b2fa985114f9e72ba120f65e2544ff9e7c81896603b8172cd0fb917", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "endpoint", + "offset": 0, + "slot": "0", + "type": "t_contract(ILayerZeroEndpointV2)677", + "contract": "OAppCoreUpgradeable", + "src": "contracts/bridge-lz/LayerZero/OAppCoreUpgradeable.sol:14" + }, + { + "label": "peers", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_uint32,t_bytes32)", + "contract": "OAppCoreUpgradeable", + "src": "contracts/bridge-lz/LayerZero/OAppCoreUpgradeable.sol:17" + }, + { + "label": "eidToChainId", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint32,t_uint256)", + "contract": "AbstractLZCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractLZCrossChainAdapter.sol:28" + }, + { + "label": "chainIdToEid", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_uint256,t_uint32)", + "contract": "AbstractLZCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractLZCrossChainAdapter.sol:29" + }, + { + "label": "targetReceiver", + "offset": 0, + "slot": "4", + "type": "t_address", + "contract": "AbstractCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractCrossChainAdapter.sol:21" + }, + { + "label": "ferry", + "offset": 0, + "slot": "5", + "type": "t_contract(IFraxFerry)9099", + "contract": "AbstractFraxFerryERC20Adapter", + "src": "contracts/bridge-lz/abstract/AbstractFraxFerryERC20Adapter.sol:20" + }, + { + "label": "token", + "offset": 0, + "slot": "6", + "type": "t_contract(IERC20)3714", + "contract": "AbstractFraxFerryERC20Adapter", + "src": "contracts/bridge-lz/abstract/AbstractFraxFerryERC20Adapter.sol:21" + }, + { + "label": "erc20DestinationChain", + "offset": 0, + "slot": "7", + "type": "t_address", + "contract": "AbstractFraxFerryERC20Adapter", + "src": "contracts/bridge-lz/abstract/AbstractFraxFerryERC20Adapter.sol:22" + }, + { + "label": "_initialized", + "offset": 20, + "slot": "7", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 21, + "slot": "7", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "8", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "58", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "59", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_pendingOwner", + "offset": 0, + "slot": "108", + "type": "t_address", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "109", + "type": "t_array(t_uint256)49_storage", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:70" + }, + { + "label": "_l1ChainId", + "offset": 0, + "slot": "158", + "type": "t_uint32", + "contract": "FraxFerryLZCrossChainAdapterL2", + "src": "contracts/bridge-lz/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol:30" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IERC20)3714": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IFraxFerry)9099": { + "label": "contract IFraxFerry", + "numberOfBytes": "20" + }, + "t_contract(ILayerZeroEndpointV2)677": { + "label": "contract ILayerZeroEndpointV2", + "numberOfBytes": "20" + }, + "t_mapping(t_uint256,t_uint32)": { + "label": "mapping(uint256 => uint32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_bytes32)": { + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_uint256)": { + "label": "mapping(uint32 => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } } } } From 1e5d2c89fa88e910f573199603be024c18c1eb69 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Tue, 14 Jan 2025 13:27:18 +0300 Subject: [PATCH 38/41] audit --- ...T_incremental _audit_report_2025-01-14.pdf | Bin 0 -> 1717585 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 audits/InceptionLRT_incremental _audit_report_2025-01-14.pdf diff --git a/audits/InceptionLRT_incremental _audit_report_2025-01-14.pdf b/audits/InceptionLRT_incremental _audit_report_2025-01-14.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4ae6034c2da5084866f3637366b515c7f8be0a78 GIT binary patch literal 1717585 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

!j%laTxIZjK?7s>9DKq~$5k*Ztv(D<7fY~ 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Á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

uF8s4!dRup%i6htz7|o8x5-$FoDGeXf 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 z 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 z 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 z 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%0A(7TU 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%0D_I8c9t?zH;UWg1JZH7_X{DeZWD+w#t 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

_rElIoUyKl%CwX5&`TDl0M4gX~uVS$y)nu=@y5 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 literal 0 HcmV?d00001 From eb42ad4d14bff9a1bfcc72a8edf17bd52b1c8124 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Tue, 14 Jan 2025 13:35:53 +0300 Subject: [PATCH 39/41] audit readme --- audits/README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/audits/README.md b/audits/README.md index 62ae30bb..9e15fd7b 100644 --- a/audits/README.md +++ b/audits/README.md @@ -11,3 +11,19 @@ This folder consists of the audit reports performed on Inception Vaults smart co | LST Vaults Release of V2, M2 EigenLayer contracts | All contracts are located in the `projects/vaults/contracts/Inception/` | Halborn | 01.05.2024 | | LST Vaults Release of the Flash withdrawal feature | All contracts are located in the `projects/vaults/contracts/Inception/` | Halborn | 28.06.2024 | | SymbioticVault, DiamondProxy for InceptionVaults | All contracts are located in the `projects/vaults/contracts/` | Halborn | 25.10.2024 | +| Omnistaking | `projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapter.sol` | Salus | 08.11.2024 | +| | `projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapterL1.sol` | | | +| | `projects/bridge-lz/contracts/abstract/AbstractCrossChainAdapterL2.sol` | | | +| | `projects/bridge-lz/contracts/abstract/AbstractLZCrossChainAdapter.sol` | | | +| | `projects/bridge-lz/contracts/LZCrossChainAdapterL1.sol` | | | +| | `projects/bridge-lz/contracts/LZCrossChainAdapterL2.sol` | | | +| | `projects/vaults/contracts/vaults/InceptionOmniVault.sol` | | | +| | `projects/vaults/contracts/assets-handler/InceptionAssetsHandler.sol` | | | +| | `projects/restaking-pool/contracts/NativeRebalancer.sol` | | | +| | `projects/restaking-pool/contracts/cToken.sol` | | | +| Fraxtal ERC20 Omnistaking | `projects/bridge-lz/contracts/abstract/AbstractFraxFerryERC20Adapter.sol` | Salus | 14.01.2025 | +| | `projects/bridge-lz/contracts/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol` | | | +| | `projects/vaults/contracts/rebalancer/ERC20Rebalancer.sol` | | | +| | `projects/vaults/contracts/rebalancer/ERC20RebalancerStorage.sol` | | | +| | `projects/vaults/contracts/vaults/InceptionERC20OmniVault.sol` | | | + From 8fe7510ab094d873da3d897a1f3edac32625c965 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Wed, 5 Mar 2025 16:20:31 +0300 Subject: [PATCH 40/41] misc --- README.md | 66 +++ projects/bridge-lz/README.md | 102 +--- projects/bridge-lz/how-to-deploy.md | 32 -- .../img/OmniStaking-Deposit-FWithdrawal.svg | 385 +++++++++++++ .../bridge-lz/img/OmniStaking-FerryToL1.svg | 431 +++++++++++++++ .../bridge-lz/img/OmniStaking-SyncToL1.svg | 523 ++++++++++++++++++ projects/bridge-lz/layerzero.config.ts | 54 -- 7 files changed, 1413 insertions(+), 180 deletions(-) delete mode 100644 projects/bridge-lz/how-to-deploy.md create mode 100644 projects/bridge-lz/img/OmniStaking-Deposit-FWithdrawal.svg create mode 100644 projects/bridge-lz/img/OmniStaking-FerryToL1.svg create mode 100644 projects/bridge-lz/img/OmniStaking-SyncToL1.svg delete mode 100644 projects/bridge-lz/layerzero.config.ts diff --git a/README.md b/README.md index e69de29b..851f99c8 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,66 @@ +![OmniStaking Architecture](./OmniStaking_Architecture.jpg) + +# OmniStaking + +OmniStaking is a cross-chain staking system designed to maintain the balance of Inception Tokens across Layer 1 (L1) and multiple Layer 2 (L2) networks. By managing both data and ETH transfers between chains, OmniStaking ensures that the protocol maintains a consistent supply of Inception Tokens across all deployed chains, creating a unified and decentralized staking ecosystem. + +## Overview + +OmniStaking operates through a sequence of cross-chain communications involving several key contracts and components: + +1. **InceptionOmniVault**: This contract initiates the transfer process. Operators (backend) interact with it to send either: + + - **Data Messages**: For reporting asset balances, using `sendAssetsInfoToL1()`. + - **ETH Transfers**: For transferring ETH across chains, using `sendEthCrossChain()`. + +2. **LZCrossChainAdapterL2**: This contract, specific to L2 chains, is responsible for processing and transmitting cross-chain messages. It receives calls from `InceptionOmniVault` and initiates cross-chain transfers using the LayerZero protocol. + +3. **LZCrossChainAdapterL1**: After a specified delay (e.g., 7 days for mainnets or 20 minutes for testnets), messages or ETH transfers from L2 arrive at this L1 contract. Here, the contract: + + - Decodes data messages. + - Relays the decoded information or ETH to the **NativeRebalancer**. + +4. **NativeRebalancer**: This L1 contract aggregates data from all L2 chains. When data from each L2 is received, users can call `updateTreasuryData` on **NativeRebalancer**. This function recalculates the token supply, minting or burning tokens to maintain the invariant: + +$$ +\text{sum(Inception Tokens on L2s)} = \text{Inception Tokens on L1} +$$ + +## Message Flow + +### L2 to L1 (Data and ETH Transfer) + +1. **Data Transfer**: + + - The operator calls `sendAssetsInfoToL1()` on **InceptionOmniVault**. + - This data message is forwarded to **LZCrossChainAdapterL2**, which encodes and sends the data across chains. + +2. **ETH Transfer**: + - The operator initiates `sendEthCrossChain()` on **InceptionOmniVault**. + - **LZCrossChainAdapterL2** processes and sends the ETH transfer request to **LZCrossChainAdapterL1**. + +### L1 Reception and Balancing + +After the specified waiting period, **LZCrossChainAdapterL1** receives the cross-chain message or ETH transfer: + +1. **Data Message**: **LZCrossChainAdapterL1** decodes the data and relays it to **NativeRebalancer**. +2. **ETH Transfer**: The ETH is directly forwarded as specified in the initial transfer request. + +Once all L2 data has been received, users call `updateTreasuryData()` on **NativeRebalancer**, which mints or burns Inception Tokens on L1 as needed to ensure cross-chain token balance. + +## Components + +- **InceptionOmniVault**: Initiates L2 to L1 cross-chain transfers. +- **LZCrossChainAdapterL2**: Manages cross-chain messaging from L2 to L1. +- **LZCrossChainAdapterL1**: Receives and processes messages or ETH on L1. +- **NativeRebalancer**: Maintains the Inception Token invariant across chains by adjusting L1 supply. + +## Invariant Guarantee + +OmniStaking maintains the invariant: + +$$ +\text{sum(Inception Tokens on L2s)} = \text{Inception Tokens on L1} +$$ + +This ensures that the total supply of Inception Tokens is balanced across all chains in the OmniStaking ecosystem. diff --git a/projects/bridge-lz/README.md b/projects/bridge-lz/README.md index b4c2fc5a..798cca47 100644 --- a/projects/bridge-lz/README.md +++ b/projects/bridge-lz/README.md @@ -1,108 +1,22 @@ -

- - LayerZero - -

+
-

- Homepage | Docs | Developers -

-

OApp Example

+ Deposit and (flash) withdrawal -

- Quickstart | Configuration | Message Execution Options | Endpoint Addresses -

-

Template project for getting started with LayerZero's OApp contract development.

+ ![OmniStaking Architecture](./img/OmniStaking-Deposit-FWithdrawal.svg) -## 1) Developing Contracts -#### Installing dependencies + Sync to L1 -We recommend using `pnpm` as a package manager (but you can of course use a package manager of your choice): -```bash -pnpm install -``` + ![OmniStaking Architecture](./img/OmniStaking-SyncToL1.svg) -#### Compiling your contracts -This project supports both `hardhat` and `forge` compilation. By default, the `compile` command will execute both: + Token transfer to L1 via FraxFerry -```bash -pnpm compile -``` -If you prefer one over the other, you can use the tooling-specific commands: + ![OmniStaking Architecture](./img/OmniStaking-FerryToL1.svg) -```bash -pnpm compile:forge -pnpm compile:hardhat -``` -Or adjust the `package.json` to for example remove `forge` build: - -```diff -- "compile": "$npm_execpath run compile:forge && $npm_execpath run compile:hardhat", -- "compile:forge": "forge build", -- "compile:hardhat": "hardhat compile", -+ "compile": "hardhat compile" -``` - -#### Running tests - -Similarly to the contract compilation, we support both `hardhat` and `forge` tests. By default, the `test` command will execute both: - -```bash -pnpm test -``` - -If you prefer one over the other, you can use the tooling-specific commands: - -```bash -pnpm test:forge -pnpm test:hardhat -``` - -Or adjust the `package.json` to for example remove `hardhat` tests: - -```diff -- "test": "$npm_execpath test:forge && $npm_execpath test:hardhat", -- "test:forge": "forge test", -- "test:hardhat": "$npm_execpath hardhat test" -+ "test": "forge test" -``` - -## 2) Deploying Contracts - -Set up deployer wallet/account: - -- Rename `.env.example` -> `.env` -- Choose your preferred means of setting up your deployer wallet/account: - -``` -MNEMONIC="test test test test test test test test test test test junk" -or... -PRIVATE_KEY="0xabc...def" -``` - -To deploy your contracts to your desired blockchains, run the following command in your project's folder: - -```bash -npx hardhat lz:deploy -``` - -More information about available CLI arguments can be found using the `--help` flag: - -```bash -npx hardhat lz:deploy --help -``` - -By following these steps, you can focus more on creating innovative omnichain solutions and less on the complexities of cross-chain communication. - -

- -

- Join our community on Discord | Follow us on Twitter -

+
diff --git a/projects/bridge-lz/how-to-deploy.md b/projects/bridge-lz/how-to-deploy.md deleted file mode 100644 index 259554b9..00000000 --- a/projects/bridge-lz/how-to-deploy.md +++ /dev/null @@ -1,32 +0,0 @@ -# How to deploy all - -## Deploy LZCrossChainBridges -0. Ensure /bridge-lz project has no `deployments` folder. -1. Deploy the Sepolia bridge by running the command below, choosing `sepolia` as network and `l1` as tag. ->npx hardhat lz:deploy ->npx @layerzerolabs/verify-contract -d "./deployments" --contracts "LZCrossChainAdapterL1" -n "sepolia" -u "https://api-sepolia.etherscan.io/api" -k "5ECZSNXK68TW6UVFTETFJK7YDC7KBSFHGC" -2. Deploy the Arbitrum-Sepolia and Optimism-Sepolia bridges by running the command below, choosing `arbitrum sepolia` and `optimism sepolia` as networks and `l2` as tag. ->npx hardhat lz:deploy -3. Verify Arbitrum and Optimism LZCrossChainBridgeL2 contracts: ->npx @layerzerolabs/verify-contract -d "./deployments" --contracts "LZCrossChainAdapterL2" -n "arbitrum-sepolia" -u "https://api-sepolia.arbiscan.io/api" -k "RDRJNYQ7NDDSNCX3FJGKC81M5Q8PA55K6U" ->npx @layerzerolabs/verify-contract -d "./deployments" --contracts "LZCrossChainAdapterL2" -n "optimism-sepolia" -u "https://api-optimistic.etherscan.io/api" -k "C3JF1ZDIQ4TT388IVSIW8WHAZRKZH5R9XJ" -4. Write down their addresses in the repository's root: `deployment_checkpoint_sepolia.json`, `deployment_checkpoint_optimism-sepolia.json` and `deployment_checkpoint_arbitrum-sepolia.json` -5. Set peers manually, running these commands from this folder: -> npx hardhat run scripts/set-peers-l1.ts --network sepolia - -> npx hardhat run scripts/set-peers-l2-arb.ts --network arbitrum-sepolia - -> npx hardhat run scripts/set-peers-l2-opt.ts --network optimism-sepolia - -6. Deploy all other contracts: ->cd projects/restaking-pool ->yarn hardhat run scripts/deploy-omni-staking.ts --network sepolia - ->cd projects/vaults ->npx hardhat run scripts/deploy-omni-staking-l2.ts --network arbitrumSepolia -7. Now it's time to fire the test ->cd projects/restaking-pool - ->npx hardhat run scripts/call/send-eth-to-l1.ts --network arbitrumSepolia - ->npx hardhat run scripts/call/send-data-to-l1.ts --network arbitrumSepolia \ No newline at end of file diff --git a/projects/bridge-lz/img/OmniStaking-Deposit-FWithdrawal.svg b/projects/bridge-lz/img/OmniStaking-Deposit-FWithdrawal.svg new file mode 100644 index 00000000..3318415b --- /dev/null +++ b/projects/bridge-lz/img/OmniStaking-Deposit-FWithdrawal.svg @@ -0,0 +1,385 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page-1 + + + + + + + + + Actor lifeline + User + + Sheet.2 + User + + + + User + + Sheet.3 + + + + Sheet.4 + + + Sheet.5 + + + + + + + User + + + + + + + + Object lifeline + L2 vault + + Sheet.7 + + + + Sheet.8 + + + + Sheet.9 + + + Sheet.10 + + + + + + + L2 vault + + + Message + Deposit + + + + + + + + + + + Deposit + + + + + + + Object lifeline.12 + L2 incToken + + Sheet.13 + + + + Sheet.14 + + + + Sheet.15 + + + Sheet.16 + + + + + + + L2 incToken + + + + + + + + Object lifeline.17 + Ratio feed (L2) + + Sheet.18 + + + + Sheet.19 + + + + Sheet.20 + + + Sheet.21 + + + + + + + Ratio feed (L2) + + + Message.22 + Query ratio + + + + + + + + + + + Query ratio + + Return Message + Ratio + + + + + + + + + + + Ratio + + Activation + + + + + + + Message.25 + Mint tokens + + + + + + + + + + + Mint tokens + + Return Message.26 + Minted incTokens + + + + + + + + + + + Minted incTokens + + Activation.27 + + + + + + + Activation.28 + + + + + + + Activation.29 + + + + + + + Activation.30 + + + + + + + Activation.31 + + + + + + + Activation.33 + + + + + + + Message.34 + Withdraw + + + + + + + + + + + Withdraw + + Message.35 + Query ratio + + + + + + + + + + + Query ratio + + Return Message.36 + Ratio + + + + + + + + + + + Ratio + + Activation.37 + + + + + + + Message.38 + Burn tokens + + + + + + + + + + + Burn tokens + + Return Message.39 + Burned + + + + + + + + + + + Burned + + Return Message.40 + Orig asset + + + + + + + + + + + Orig asset + + diff --git a/projects/bridge-lz/img/OmniStaking-FerryToL1.svg b/projects/bridge-lz/img/OmniStaking-FerryToL1.svg new file mode 100644 index 00000000..b651b91f --- /dev/null +++ b/projects/bridge-lz/img/OmniStaking-FerryToL1.svg @@ -0,0 +1,431 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page-3 + + + + + + + + + Actor lifeline + Operator + + Sheet.2 + + + + Sheet.3 + + + + Sheet.4 + + + Sheet.5 + + + + + + + Operator + + + + + + + + + Actor lifeline.6 + L2 vault + + Sheet.7 + + + + Sheet.8 + + + Sheet.9 + + + Sheet.10 + + + + + + + L2 vault + + + + + + + + + Actor lifeline.11 + L2 adapter + + Sheet.12 + + + + Sheet.13 + + + Sheet.14 + + + Sheet.15 + + + + + + + L2 adapter + + + + + + + + Actor lifeline.16 + FraxFerry (both L2 and L1) + + Sheet.17 + + + + Sheet.18 + + + + Sheet.19 + + + Sheet.20 + + + + + + + FraxFerry(both L2 and L1) + + + Activation + + + + + + + Activation.22 + + + + + + + Message + sendERC20toL1() + + + + + + + + + + + sendERC20toL1() + + Activation.24 + + + + + + + Message.25 + sendTokens() + + + + + + + + + + + sendTokens() + + Activation.26 + + + + + + + Message.27 + Embark + + + + + + + + + + + Embark + + Return Message + Embark OK + + + + + + + + + + + Embark OK + + Return Message.29 + Unused dust + + + + + + + + + + + Unused dust + + Return Message.30 + Send OK + + + + + + + + + + + Send OK + + + + + + + Object lifeline + Rebalancer + + Sheet.32 + + + + Sheet.33 + + + + Sheet.34 + + + Sheet.35 + + + + + + + Rebalancer + + + + + + + + Object lifeline.36 + L1 vault + + Sheet.37 + + + + Sheet.38 + + + + Sheet.39 + + + Sheet.40 + + + + + + + L1 vault + + + Message.41 + Disembark (tokens) + + + + + + + + + + + + Disembark (tokens) + + Activation.42 + + + + + + + Activation.43 + + + + + + + Message.44 + stake() / updateTreasuryData() (if there was an update) + + + + + + + + + + + stake() / updateTreasuryData() (if there was an update) + + Message.45 + Tokens + + + + + + + + + + + Tokens + + Return Message.46 + Transferred + + + + + + + + + + + Transferred + + Return Message.47 + Transferred + + + + + + + + + + + Transferred + + diff --git a/projects/bridge-lz/img/OmniStaking-SyncToL1.svg b/projects/bridge-lz/img/OmniStaking-SyncToL1.svg new file mode 100644 index 00000000..e589ba0f --- /dev/null +++ b/projects/bridge-lz/img/OmniStaking-SyncToL1.svg @@ -0,0 +1,523 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page-2 + + + + + + + + + Actor lifeline + Operator + + Sheet.7 + + + + Sheet.8 + + + + Sheet.9 + + + Sheet.10 + + + + + + + Operator + + + + + + + + Object lifeline + L2 vault + + Sheet.12 + + + + Sheet.13 + + + + Sheet.14 + + + Sheet.15 + + + + + + + L2 vault + + + + + + + + Object lifeline.16 + L2 adapter + + Sheet.17 + + + + Sheet.18 + + + + Sheet.19 + + + Sheet.20 + + + + + + + L2 adapter + + + + + + + + Object lifeline.21 + L1 adapter + + Sheet.22 + + + + Sheet.23 + + + + Sheet.24 + + + Sheet.25 + + + + + + + L1 adapter + + + + + + + + Object lifeline.26 + Rebalancer + + Sheet.27 + + + + Sheet.28 + + + + Sheet.29 + + + Sheet.30 + + + + + + + Rebalancer + + + + + + + + Object lifeline.36 + L1 iToken + + Sheet.37 + + + + Sheet.38 + + + + Sheet.39 + + + Sheet.40 + + + + + + + L1 iToken + + + Activation + + + + + + + Activation.42 + + + + + + + Activation.43 + + + + + + + + + + + + Object lifeline.44 + LZ Endpoint + + Sheet.45 + + + + Sheet.46 + + + + Sheet.47 + + + Sheet.48 + + + + + + + LZ Endpoint + + + Message + sendAssetInfo() + + + + + + + + + + + sendAssetInfo() + + Message.50 + Supply and balances + + + + + + + + + + + Supply and balances + + Activation.51 + + + + + + + Message.52 + L2 data and eth for the fee + + + + + + + + + + + L2 data and ethfor the fee + + Message.53 + L2 data + + + + + + + + + + + + L2 data + + Self Message + Calculate LZ fee + + + + + + + + + + + Calculate LZ fee + + Activation.55 + + + + + + + Activation.56 + + + + + + + Message.57 + L2 data + + + + + + + + + + + L2 data + + Return Message + Send OK + + + + + + + + + + + Send OK + + Return Message.59 + Send OK + + + + + + + + + + + Send OK + + Return Message.60 + Send OK + + + + + + + + + + + Send OK + + Self Message.61 + L2 info received + + + + + + + + + + + L2 info received + + Activation.62 + + + + + + + Activation.63 + + + + + + + Message.64 + updateTreasuryData() + + + + + + + + + + + updateTreasuryData() + + Activation.65 + + + + + + + Message.66 + Mint/burn lockbox tokens + + + + + + + + + + + Mint/burn lockbox tokens + + Return Message.67 + Mint/burn OK + + + + + + + + + + + Mint/burn OK + + Return Message.68 + Data updated + + + + + + + + + + + Data updated + + diff --git a/projects/bridge-lz/layerzero.config.ts b/projects/bridge-lz/layerzero.config.ts deleted file mode 100644 index 3951d82a..00000000 --- a/projects/bridge-lz/layerzero.config.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { OAppOmniGraphHardhat, OmniPointHardhat } from '@layerzerolabs/toolbox-hardhat' - -const sepoliaContract: OmniPointHardhat = { - eid: 40161, - contractName: 'CrossChainBridge', -} - -const arbitrumContract: OmniPointHardhat = { - eid: 40231, - contractName: 'CrossChainBridge', -} - -const optimismContract: OmniPointHardhat = { - eid: 40232, - contractName: 'CrossChainBridge', -} - - -const config: OAppOmniGraphHardhat = { - contracts: [ - { - contract: sepoliaContract, - }, - { - contract: arbitrumContract, - }, - { - contract: optimismContract, - } - ], - connections: [ - { - from: sepoliaContract, - to: optimismContract, - }, - { - from: optimismContract, - to: sepoliaContract, - - }, - { - from: sepoliaContract, - to: arbitrumContract, - - }, - { - from: arbitrumContract, - to: sepoliaContract, - - } - ], -} - -export default config From c13522610a870e21b311d61081d676819f6f0fb6 Mon Sep 17 00:00:00 2001 From: Svyatoslav Osin Date: Wed, 5 Mar 2025 17:00:16 +0300 Subject: [PATCH 41/41] more cleaning up --- projects/bridge-lz/package-lock.json | 17468 ---------------- .../.openzeppelin/holesky.json | 1042 + .../.openzeppelin/unknown-2522.json | 696 + .../safe-batch/Repair LZ config_mainnet.json | 1 + .../scripts/fix_lz_config_l1.js | 84 - .../scripts/fix_lz_config_l2.js | 84 - .../scripts/set_l1_peer_data.js | 43 - projects/omnichain-deployer/state.json.old | 1 - 8 files changed, 1739 insertions(+), 17680 deletions(-) delete mode 100644 projects/bridge-lz/package-lock.json create mode 100644 projects/omnichain-deployer/.openzeppelin/holesky.json create mode 100644 projects/omnichain-deployer/.openzeppelin/unknown-2522.json create mode 100644 projects/omnichain-deployer/safe-batch/Repair LZ config_mainnet.json delete mode 100644 projects/omnichain-deployer/scripts/fix_lz_config_l1.js delete mode 100644 projects/omnichain-deployer/scripts/fix_lz_config_l2.js delete mode 100644 projects/omnichain-deployer/scripts/set_l1_peer_data.js delete mode 100644 projects/omnichain-deployer/state.json.old diff --git a/projects/bridge-lz/package-lock.json b/projects/bridge-lz/package-lock.json deleted file mode 100644 index 4e95895e..00000000 --- a/projects/bridge-lz/package-lock.json +++ /dev/null @@ -1,17468 +0,0 @@ -{ - "name": "InceptionBridge", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "InceptionBridge", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "solidity-bytes-utils": "^0.8.2" - }, - "devDependencies": { - "@aragon/os": "^4.4.0", - "@arbitrum/nitro-contracts": "^2.1.0", - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@layerzerolabs/devtools-evm": "~0.4.2", - "@layerzerolabs/devtools-evm-hardhat": "1.0.0", - "@layerzerolabs/eslint-config-next": "~2.3.39", - "@layerzerolabs/lz-definitions": "^2.3.39", - "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.39", - "@layerzerolabs/lz-evm-protocol-v2": "^2.3.39", - "@layerzerolabs/lz-evm-v1-0.7": "^2.3.39", - "@layerzerolabs/lz-v2-utilities": "^3.0.7", - "@layerzerolabs/oapp-evm": "^0.0.4", - "@layerzerolabs/oft-evm": "^0.1.0", - "@layerzerolabs/prettier-config-next": "^2.3.39", - "@layerzerolabs/solhint-config": "^2.3.39", - "@layerzerolabs/toolbox-hardhat": "~0.4.0", - "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-ignition": "^0.15.0", - "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-toolbox": "^5.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.11", - "@nomiclabs/hardhat-etherscan": "^3.1.8", - "@openzeppelin/contracts": "^5.1.0", - "@openzeppelin/contracts-upgradeable": "^5.1.0", - "@openzeppelin/hardhat-upgrades": "^3.5.0", - "@typechain/ethers-v6": "^0.5.1", - "@typechain/hardhat": "^9.1.0", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/node": ">=18.0.0", - "axios": "^1.7.7", - "chai": "^4.2.0", - "dotenv": "^16.4.7", - "ethers": "^6.4.0", - "hardhat": "^2.22.13", - "hardhat-contract-sizer": "^2.10.0", - "hardhat-deploy": "^0.12.4", - "hardhat-gas-reporter": "^1.0.8", - "hardhat-storage-layout": "^0.1.7", - "hardhat-tracer": "^2.6.0", - "prettier": "3.3.2", - "solidity-coverage": "^0.8.0", - "ts-node": ">=8.0.0", - "typechain": "^8.3.0", - "typescript": ">=4.5.0" - } - }, - "node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "dev": true - }, - "node_modules/@aragon/os": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@aragon/os/-/os-4.4.0.tgz", - "integrity": "sha512-EYyMj5pX0Qxu7axHAPe4hqwwDINDn+6ZZ4DqJP0tAKYKDmTxHcW8m/7DDctIM3uRqXr8HlYrNOGd6zE/hhHetQ==", - "dev": true, - "dependencies": { - "@aragon/truffle-config-v4": "^1.0.1", - "homedir": "^0.6.0", - "mkdirp": "^0.5.1", - "truffle-flattener": "^1.2.9" - } - }, - "node_modules/@aragon/truffle-config-v4": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@aragon/truffle-config-v4/-/truffle-config-v4-1.2.0.tgz", - "integrity": "sha512-eXxUpHr9D/VYLVsHzaPL4FTz4bCESGvnnHqsP2BB74B4ZlopoIVwdur9flxHIxw4ROoh6xGyrEnScw4zVD2ifw==", - "dev": true, - "dependencies": { - "@truffle/hdwallet-provider": "^1.0.0" - } - }, - "node_modules/@arbitrum/nitro-contracts": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-2.1.1.tgz", - "integrity": "sha512-cA1JnwRkUT8p0ppDrrnYXU2gO4aLjV8P+a2jaHW7R602MKsIRqbae12MM8iNttRsK9ysKWZq5qrdWjvTVlqwvg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@offchainlabs/upgrade-executor": "1.1.0-beta.0", - "@openzeppelin/contracts": "4.5.0", - "@openzeppelin/contracts-upgradeable": "4.5.2", - "patch-package": "^6.4.7", - "solady": "0.0.182" - } - }, - "node_modules/@arbitrum/nitro-contracts/node_modules/@openzeppelin/contracts": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.5.0.tgz", - "integrity": "sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==", - "dev": true - }, - "node_modules/@arbitrum/nitro-contracts/node_modules/@openzeppelin/contracts-upgradeable": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", - "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==", - "dev": true - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", - "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", - "dev": true, - "dependencies": { - "@aws-crypto/util": "^1.2.2", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/util": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", - "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.696.0.tgz", - "integrity": "sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw==", - "dev": true, - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/types/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-utf8-browser/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.26.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", - "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bytecodealliance/preview2-shim": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz", - "integrity": "sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==", - "dev": true - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dev": true, - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/rlp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", - "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", - "dev": true, - "bin": { - "rlp": "bin/rlp" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/util": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", - "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", - "dev": true, - "dependencies": { - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", - "dev": true, - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] - }, - "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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.0", - "@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.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@layerzerolabs/devtools": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@layerzerolabs/devtools/-/devtools-0.3.29.tgz", - "integrity": "sha512-zOWRl7NL67gqGb75arPuseoTxvgom6RgLZknciYwTwnZL8jY5Ea9czCh+rZMcKMAgsZNa6YHu3nzJOitEVHJEQ==", - "dev": true, - "dependencies": { - "bs58": "^6.0.0", - "exponential-backoff": "~3.1.1", - "js-yaml": "~4.1.0" - }, - "peerDependencies": { - "@ethersproject/bytes": "~5.7.0", - "@layerzerolabs/io-devtools": "~0.1.13", - "@layerzerolabs/lz-definitions": "^2.3.3", - "zod": "^3.22.4" - } - }, - "node_modules/@layerzerolabs/devtools-evm": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@layerzerolabs/devtools-evm/-/devtools-evm-0.4.2.tgz", - "integrity": "sha512-/X9Bsvbi9SyaPeL7dkXClnKwsE1roU+OCtOo1Sg/dtM3+xQOa1MBGycAYjuLPg8yV1mgxL7yYKniAsGnsZ7IeQ==", - "dev": true, - "dependencies": { - "@safe-global/api-kit": "^1.3.0", - "@safe-global/protocol-kit": "^1.3.0", - "ethers": "^5.7.2", - "p-memoize": "~4.0.4" - }, - "peerDependencies": { - "@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/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@layerzerolabs/devtools": "~0.3.25", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^2.3.3", - "fp-ts": "^2.16.2", - "zod": "^3.22.4" - } - }, - "node_modules/@layerzerolabs/devtools-evm-hardhat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@layerzerolabs/devtools-evm-hardhat/-/devtools-evm-hardhat-1.0.0.tgz", - "integrity": "sha512-/MMT/PxQPpX3AGEiaXR9qjC27VSb7dXAocDb2KbY3ntqjr5z4hxiRy/Gv3sTFVrm89BO+TF9yQ/nArBJ4dZ8GQ==", - "dev": true, - "dependencies": { - "@layerzerolabs/export-deployments": "~0.0.10", - "@safe-global/protocol-kit": "^1.3.0", - "micro-memoize": "~4.1.2", - "p-memoize": "~4.0.4", - "zod": "^3.22.4" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@layerzerolabs/devtools": "~0.3.19", - "@layerzerolabs/devtools-evm": "~0.4.0", - "@layerzerolabs/io-devtools": "~0.1.11", - "@layerzerolabs/lz-definitions": "^2.3.3", - "@nomiclabs/hardhat-ethers": "^2.2.3", - "fp-ts": "^2.16.2", - "hardhat": "^2.22.3", - "hardhat-deploy": "^0.12.1" - } - }, - "node_modules/@layerzerolabs/devtools-evm/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@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/contracts": "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/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@layerzerolabs/devtools/node_modules/base-x": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.0.tgz", - "integrity": "sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==", - "dev": true - }, - "node_modules/@layerzerolabs/devtools/node_modules/bs58": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", - "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", - "dev": true, - "dependencies": { - "base-x": "^5.0.0" - } - }, - "node_modules/@layerzerolabs/eslint-config-next": { - "version": "2.3.44", - "resolved": "https://registry.npmjs.org/@layerzerolabs/eslint-config-next/-/eslint-config-next-2.3.44.tgz", - "integrity": "sha512-WlBSy47LGPILdrNgzPiRtQf/hAY62IN37ncUsQwcr8T7cyX1HZREx2qljuXpvduLDAKn5otsm0XIqHuCRUHEFg==", - "dev": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "^7.5.0", - "@typescript-eslint/parser": "^7.5.0", - "eslint": "^8.55.0", - "eslint-config-prettier": "^9.1.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-autofix": "^2.0.0", - "eslint-plugin-compat": "^4.2.0", - "eslint-plugin-import": "^2.29.0", - "eslint-plugin-prettier": "^5.0.1", - "eslint-plugin-unused-imports": "^3.2.0", - "prettier": "^3.2.4" - } - }, - "node_modules/@layerzerolabs/evm-sdks-core": { - "version": "2.3.44", - "resolved": "https://registry.npmjs.org/@layerzerolabs/evm-sdks-core/-/evm-sdks-core-2.3.44.tgz", - "integrity": "sha512-T0XDKtoox8qDrlzo6H+fpFRNj2wlh8uKH5QN4RvwK1DShkL+3fmnA52LWPfI6jX17ONN9M8lrjYhIfo1mQKy1w==", - "dev": true, - "dependencies": { - "ethers": "^5.7.2" - } - }, - "node_modules/@layerzerolabs/evm-sdks-core/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@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/contracts": "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/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@layerzerolabs/export-deployments": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@layerzerolabs/export-deployments/-/export-deployments-0.0.14.tgz", - "integrity": "sha512-OBwqci1LZGCq9ZSYfB4nHGZ3QKNVjr+yOUQB4M4gEpPrwaJGLOuOxQNLSEkRWPD8si22Nk48Elbrku8M1Ke3Ow==", - "dev": true, - "dependencies": { - "typescript": "^5.4.4" - }, - "bin": { - "export-deployments": "cli.js" - } - }, - "node_modules/@layerzerolabs/io-devtools": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/@layerzerolabs/io-devtools/-/io-devtools-0.1.14.tgz", - "integrity": "sha512-ENiiwow9bu51MiJ0jxwhUchmimIuHevait8WTP4YtuSjRcWkT7g/8F6z3mTJs4BsCIVNOHdYWBFGgcB2IDTqdQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "logform": "^2.6.0", - "prompts": "^2.4.2", - "table": "~6.8.2", - "winston": "^3.11.0" - }, - "peerDependencies": { - "ink": "^3.2.0", - "ink-gradient": "^2.0.0", - "ink-table": "^3.1.0", - "react": "^17.0.2", - "yoga-layout-prebuilt": "^1.9.6", - "zod": "^3.22.4" - }, - "peerDependenciesMeta": { - "ink": { - "optional": true - }, - "ink-gradient": { - "optional": true - }, - "ink-table": { - "optional": true - }, - "react": { - "optional": true - }, - "yoga-layout-prebuilt": { - "optional": true - } - } - }, - "node_modules/@layerzerolabs/lz-definitions": { - "version": "2.3.44", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-definitions/-/lz-definitions-2.3.44.tgz", - "integrity": "sha512-8dH7rbHCVG+GDOizCb4RrtHEFHr5wud9Lf9Kxs/MLThgu7VWcXvy78KYHMQ4S7AXoFnyzMPaiEU/LS8kRWfhag==", - "dev": true, - "dependencies": { - "tiny-invariant": "^1.3.1" - } - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2": { - "version": "2.3.44", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-messagelib-v2/-/lz-evm-messagelib-v2-2.3.44.tgz", - "integrity": "sha512-2HZMjV0KZH0e3W2KL/H8HvE3I7QMJw1no46IQ5LpGSvxIm5Ri45tnQAynbmEbRyKXrRSP3Brkvkc2U7VrfZ/Cg==", - "dev": true, - "peerDependencies": { - "@arbitrum/nitro-contracts": "^1.1.0", - "@axelar-network/axelar-gmp-sdk-solidity": "^5.6.4", - "@chainlink/contracts-ccip": "^0.7.6", - "@eth-optimism/contracts": "^0.6.0", - "@layerzerolabs/lz-evm-protocol-v2": "^2.3.44", - "@layerzerolabs/lz-evm-v1-0.7": "^2.3.44", - "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", - "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0", - "hardhat-deploy": "^0.12.4", - "solidity-bytes-utils": "^0.8.0" - }, - "peerDependenciesMeta": { - "@arbitrum/nitro-contracts": { - "optional": true - } - } - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2": { - "version": "2.3.44", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-protocol-v2/-/lz-evm-protocol-v2-2.3.44.tgz", - "integrity": "sha512-oNtwl4HGCogFVOr45T3FfrkB0/CRW2eGAEScBw/FY/6mlncnS4dqlvrCJ3SFlK17cu1w9q0ztD3NzS9sUrb7vw==", - "dev": true, - "peerDependencies": { - "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", - "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0", - "hardhat-deploy": "^0.12.4", - "solidity-bytes-utils": "^0.8.0" - } - }, - "node_modules/@layerzerolabs/lz-evm-sdk-v1": { - "version": "2.3.44", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-sdk-v1/-/lz-evm-sdk-v1-2.3.44.tgz", - "integrity": "sha512-jHnFqSqRQGD11TuPcpwCSY87FfVqGTdZj/1xFUTdW7r/zyZYTTr2pE/wZG5qWNZrO5VkPqgp2ttaZC6UM87+0w==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@layerzerolabs/evm-sdks-core": "^2.3.44", - "ethers": "^5.7.2" - } - }, - "node_modules/@layerzerolabs/lz-evm-sdk-v1/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@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/contracts": "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/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@layerzerolabs/lz-evm-sdk-v2": { - "version": "2.3.44", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-sdk-v2/-/lz-evm-sdk-v2-2.3.44.tgz", - "integrity": "sha512-j99rAzalyaYx3sDn06Dfc7bLsQfLCRbx3qhgIhBxOfe9T9bYKRXV6UAD+dHFpwdFOU0UxioQKosKCGgIwSNKAw==", - "dev": true, - "dependencies": { - "@layerzerolabs/evm-sdks-core": "^2.3.44", - "ethers": "^5.7.2" - } - }, - "node_modules/@layerzerolabs/lz-evm-sdk-v2/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@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/contracts": "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/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@layerzerolabs/lz-evm-v1-0.7": { - "version": "2.3.44", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-v1-0.7/-/lz-evm-v1-0.7-2.3.44.tgz", - "integrity": "sha512-gxPUv5yk5TLy4Rp4KwFqiPHGpVOPMtnwUi+LvRysnGgkqopOJRCzzvWqEv6M2YMUAsof+Vmr3UYWxKcilvv97g==", - "dev": true, - "peerDependencies": { - "@openzeppelin/contracts": "3.4.2-solc-0.7 || ^3.4.2 || ^4.0.0 || ^5.0.0", - "@openzeppelin/contracts-upgradeable": "3.4.2-solc-0.7 || ^3.4.2 || ^4.0.0 || ^5.0.0", - "hardhat-deploy": "^0.12.4" - } - }, - "node_modules/@layerzerolabs/lz-v2-utilities": { - "version": "3.0.19", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-v2-utilities/-/lz-v2-utilities-3.0.19.tgz", - "integrity": "sha512-V4b3rahsXylonyzTHUAAmtcQ6qCg8+3Oyqjrr30hUr6wzUqJ6Uo0jOR9/v3bWVNG9jlbQqPgVXahyoRL98mCsw==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/solidity": "^5.7.0", - "bs58": "^5.0.0", - "tiny-invariant": "^1.3.1" - } - }, - "node_modules/@layerzerolabs/oapp-evm": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@layerzerolabs/oapp-evm/-/oapp-evm-0.0.4.tgz", - "integrity": "sha512-h0papPd9mQAPsWoQuzZk3dIcLWLrJ8tnDNPg7Hn8aa+v7HPY1lo6Zmyn3t7RmzfKnvrjnjKWDTbX2zgesu4hYg==", - "dev": true, - "dependencies": { - "ethers": "^5.7.2" - }, - "peerDependencies": { - "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.39", - "@layerzerolabs/lz-evm-protocol-v2": "^2.3.39", - "@layerzerolabs/lz-evm-v1-0.7": "^2.3.39", - "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", - "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0" - } - }, - "node_modules/@layerzerolabs/oapp-evm/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@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/contracts": "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/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/@layerzerolabs/oft-evm": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@layerzerolabs/oft-evm/-/oft-evm-0.1.0.tgz", - "integrity": "sha512-8LiotgJjbQN+wexOtpUPh2vgYDgec2ac0ypKKbBIE2kt1DWAxvKxI8nGuE6RRjBnvvMS3qNGmJQFxzwcOKHq+g==", - "dev": true, - "peerDependencies": { - "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.39", - "@layerzerolabs/lz-evm-protocol-v2": "^2.3.39", - "@layerzerolabs/lz-evm-v1-0.7": "^2.3.39", - "@layerzerolabs/oapp-evm": "^0.0.4", - "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", - "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0" - } - }, - "node_modules/@layerzerolabs/prettier-config-next": { - "version": "2.3.44", - "resolved": "https://registry.npmjs.org/@layerzerolabs/prettier-config-next/-/prettier-config-next-2.3.44.tgz", - "integrity": "sha512-mIsxKLaelXHXXXvMEAE6Jc8IVydra0PesHquHYwvxFKwDhMhzfrnoRLLzbgCX/Zi1q0GGET/oMAKJTs6OWFPxQ==", - "dev": true, - "dependencies": { - "prettier": "^3.2.4", - "prettier-plugin-packagejson": "^2.4.7", - "prettier-plugin-solidity": "^1.2.0" - } - }, - "node_modules/@layerzerolabs/protocol-devtools": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@layerzerolabs/protocol-devtools/-/protocol-devtools-0.4.3.tgz", - "integrity": "sha512-72qMcXw99wpe3v6qyh6ynFW66U6rnYuAzKXKz6R7q5JdYI/sAbnVNxuANq7ON0hffs3d24ea6qX4f6T+Lo6zJQ==", - "dev": true, - "peerDependencies": { - "@layerzerolabs/devtools": "~0.3.25", - "@layerzerolabs/lz-definitions": "^2.3.3", - "zod": "^3.22.4" - } - }, - "node_modules/@layerzerolabs/protocol-devtools-evm": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@layerzerolabs/protocol-devtools-evm/-/protocol-devtools-evm-1.2.1.tgz", - "integrity": "sha512-VyjpO4LJ+eiszxImXWst6lfJQNm0dv7XAf8m7vI6ZJk8Tg48QswBYoNZwlDDLBvMWv3vz+uf5HHn1AspVModyA==", - "dev": true, - "dependencies": { - "p-memoize": "~4.0.4" - }, - "peerDependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@layerzerolabs/devtools": "~0.3.25", - "@layerzerolabs/devtools-evm": "~0.4.2", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^2.3.3", - "@layerzerolabs/protocol-devtools": "~0.4.3", - "zod": "^3.22.4" - } - }, - "node_modules/@layerzerolabs/solhint-config": { - "version": "2.3.44", - "resolved": "https://registry.npmjs.org/@layerzerolabs/solhint-config/-/solhint-config-2.3.44.tgz", - "integrity": "sha512-1FnAwiV6FNH2KAcVWd36u7xthcs4+HI6BvU8BLp8boxEppYylxm1KFCcWSyHij9Ct5bUScKTPI6jwks/FzTU3A==", - "dev": true, - "dependencies": { - "solhint": "^4.0.0" - } - }, - "node_modules/@layerzerolabs/test-devtools-evm-hardhat": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@layerzerolabs/test-devtools-evm-hardhat/-/test-devtools-evm-hardhat-0.3.0.tgz", - "integrity": "sha512-776SF+Rp6+8PPMjl5WYglgfas6IyqZ2g7dU73seQC9VaPfbM+6XORtOCLVUxl6Hrp43edAI0dZuIm6xWhVFiYQ==", - "dev": true, - "peerDependencies": { - "hardhat": "^2.22.10", - "solidity-bytes-utils": "^0.8.2" - } - }, - "node_modules/@layerzerolabs/toolbox-hardhat": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@layerzerolabs/toolbox-hardhat/-/toolbox-hardhat-0.4.0.tgz", - "integrity": "sha512-WTc22nlEX4HwBUSvsVA/RzkZKp4wkY0f9k8m/NKXY7BrikdpilkWXJ+jgE1hG7tPY55bKd6CNHm41P5bTqIh4w==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/address": "~5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@layerzerolabs/devtools": "~0.3.25", - "@layerzerolabs/devtools-evm": "~0.4.2", - "@layerzerolabs/devtools-evm-hardhat": "~1.2.0", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^2.3.39", - "@layerzerolabs/lz-evm-sdk-v1": "^2.3.39", - "@layerzerolabs/lz-evm-sdk-v2": "^2.3.39", - "@layerzerolabs/lz-v2-utilities": "^2.3.39", - "@layerzerolabs/protocol-devtools": "~0.4.3", - "@layerzerolabs/protocol-devtools-evm": "~1.2.1", - "@layerzerolabs/test-devtools-evm-hardhat": "~0.3.0", - "@layerzerolabs/ua-devtools": "~1.0.5", - "@layerzerolabs/ua-devtools-evm": "~3.0.1", - "@layerzerolabs/ua-devtools-evm-hardhat": "~4.0.0", - "fp-ts": "^2.16.2", - "ink": "^3.2.0", - "ink-gradient": "^2.0.0", - "ink-table": "^3.1.0", - "react": "^17.0.2", - "yoga-layout-prebuilt": "^1.10.0", - "zod": "^3.22.4" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.0.2", - "ethers": "^5.7.2", - "hardhat": "^2.22.10", - "hardhat-deploy": "^0.12.1" - } - }, - "node_modules/@layerzerolabs/toolbox-hardhat/node_modules/@layerzerolabs/devtools-evm-hardhat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@layerzerolabs/devtools-evm-hardhat/-/devtools-evm-hardhat-1.2.3.tgz", - "integrity": "sha512-kIVMvLb1BZ+7rcPjjfl3iDnrszLfH+RnD9H4PWsbazqEOWizNQnO0+u9Aj9/KMTyly6hl5e5gZINZoTwkrPi+w==", - "dev": true, - "dependencies": { - "@layerzerolabs/export-deployments": "~0.0.12", - "@safe-global/protocol-kit": "^1.3.0", - "micro-memoize": "~4.1.2", - "p-memoize": "~4.0.4", - "zod": "^3.22.4" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@layerzerolabs/devtools": "~0.3.27", - "@layerzerolabs/devtools-evm": "~0.4.2", - "@layerzerolabs/io-devtools": "~0.1.13", - "@layerzerolabs/lz-definitions": "^2.3.3", - "@nomiclabs/hardhat-ethers": "^2.2.3", - "fp-ts": "^2.16.2", - "hardhat": "^2.22.10", - "hardhat-deploy": "^0.12.1" - } - }, - "node_modules/@layerzerolabs/toolbox-hardhat/node_modules/@layerzerolabs/lz-v2-utilities": { - "version": "2.3.44", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-v2-utilities/-/lz-v2-utilities-2.3.44.tgz", - "integrity": "sha512-0p7tdJCf6BSmN38tAnO7WyOoC84NDTCQt1MqPBomXTyIux1RLpkS82jcxv92+E+1LNulhHIx5W62gaKKx27B2A==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/solidity": "^5.7.0", - "bs58": "^5.0.0", - "tiny-invariant": "^1.3.1" - } - }, - "node_modules/@layerzerolabs/ua-devtools": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@layerzerolabs/ua-devtools/-/ua-devtools-1.0.6.tgz", - "integrity": "sha512-PP6Alf5VoQA+tiQJybe0VZ6Ol/HzoPE8tIFp6BE/PyEallLwkO3KEaYKv1vfA24wFaOuEdzfurIrP3AmIrrY8Q==", - "dev": true, - "peerDependencies": { - "@layerzerolabs/devtools": "~0.3.25", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^2.3.3", - "@layerzerolabs/lz-v2-utilities": "^2.3.3", - "@layerzerolabs/protocol-devtools": "~0.4.3", - "zod": "^3.22.4" - } - }, - "node_modules/@layerzerolabs/ua-devtools-evm": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@layerzerolabs/ua-devtools-evm/-/ua-devtools-evm-3.0.1.tgz", - "integrity": "sha512-r/Voc1vmB9OEXc18sA/7prQdmZOqO7eR2/8CeiH7T3yCSA2vjjgByn2wxbmYy828gIw8wcx7GEky5F4gpvRnow==", - "dev": true, - "dependencies": { - "p-memoize": "~4.0.4" - }, - "peerDependencies": { - "@ethersproject/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@layerzerolabs/devtools": "~0.3.25", - "@layerzerolabs/devtools-evm": "~0.4.2", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^2.3.3", - "@layerzerolabs/lz-v2-utilities": "^2.3.3", - "@layerzerolabs/protocol-devtools": "~0.4.3", - "@layerzerolabs/protocol-devtools-evm": "~1.2.1", - "@layerzerolabs/ua-devtools": "~1.0.5", - "zod": "^3.22.4" - } - }, - "node_modules/@layerzerolabs/ua-devtools-evm-hardhat": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@layerzerolabs/ua-devtools-evm-hardhat/-/ua-devtools-evm-hardhat-4.0.2.tgz", - "integrity": "sha512-1ePEYl5j27Rw5M799PXTjDkzXdV9zHOjHP8Adb/pKVq4u4yVhLFuUbOUEprTkrRBvOfK/HfIPZT0t7L32tthQQ==", - "dev": true, - "dependencies": { - "p-memoize": "~4.0.4", - "typescript": "^5.4.4" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@layerzerolabs/devtools": "~0.3.29", - "@layerzerolabs/devtools-evm": "~0.4.2", - "@layerzerolabs/devtools-evm-hardhat": "~1.2.2", - "@layerzerolabs/io-devtools": "~0.1.13", - "@layerzerolabs/lz-definitions": "^2.3.3", - "@layerzerolabs/protocol-devtools": "~0.4.3", - "@layerzerolabs/protocol-devtools-evm": "~1.2.1", - "@layerzerolabs/ua-devtools": "~1.0.5", - "@layerzerolabs/ua-devtools-evm": "~3.0.1", - "ethers": "^5.7.2", - "hardhat": "^2.22.10", - "hardhat-deploy": "^0.12.1" - } - }, - "node_modules/@mdn/browser-compat-data": { - "version": "5.6.19", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.6.19.tgz", - "integrity": "sha512-nov43xmgYccY9ePMQfqPD29ASOKbOhn3iOJxA5reOfC3wLbEM5an8Sn6A3Th1TuD3XfXc0hjrFQYbJ3qhyPhhQ==", - "dev": true - }, - "node_modules/@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "dependencies": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@nomicfoundation/edr": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.6.5.tgz", - "integrity": "sha512-tAqMslLP+/2b2sZP4qe9AuGxG3OkQ5gGgHE4isUuq6dUVjwCRPFhAOhpdFl+OjY5P3yEv3hmq9HjUGRa2VNjng==", - "dev": true, - "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.6.5", - "@nomicfoundation/edr-darwin-x64": "0.6.5", - "@nomicfoundation/edr-linux-arm64-gnu": "0.6.5", - "@nomicfoundation/edr-linux-arm64-musl": "0.6.5", - "@nomicfoundation/edr-linux-x64-gnu": "0.6.5", - "@nomicfoundation/edr-linux-x64-musl": "0.6.5", - "@nomicfoundation/edr-win32-x64-msvc": "0.6.5" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.5.tgz", - "integrity": "sha512-A9zCCbbNxBpLgjS1kEJSpqxIvGGAX4cYbpDYCU2f3jVqOwaZ/NU761y1SvuCRVpOwhoCXqByN9b7HPpHi0L4hw==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.5.tgz", - "integrity": "sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.5.tgz", - "integrity": "sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.5.tgz", - "integrity": "sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.5.tgz", - "integrity": "sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.5.tgz", - "integrity": "sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.5.tgz", - "integrity": "sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", - "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-util": "9.0.4" - } - }, - "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", - "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", - "dev": true, - "bin": { - "rlp": "bin/rlp.cjs" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", - "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } - } - }, - "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", - "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } - } - }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.8.tgz", - "integrity": "sha512-Z5PiCXH4xhNLASROlSUOADfhfpfhYO6D7Hn9xp8PddmHey0jq704cr6kfU8TRrQ4PUZbpfsZadPj+pCfZdjPIg==", - "dev": true, - "dependencies": { - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "chai": "^4.2.0", - "ethers": "^6.1.0", - "hardhat": "^2.9.4" - } - }, - "node_modules/@nomicfoundation/hardhat-ethers": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz", - "integrity": "sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "lodash.isequal": "^4.5.0" - }, - "peerDependencies": { - "ethers": "^6.1.0", - "hardhat": "^2.0.0" - } - }, - "node_modules/@nomicfoundation/hardhat-ignition": { - "version": "0.15.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.8.tgz", - "integrity": "sha512-TN8TFQokcd7VyqGfbXO+KS8Q4K/gmsOFlv8dPnt/N596AncgV2Igxh5C3O+KVez11PDHNqoj1JzcDzzNVHrIRw==", - "dev": true, - "dependencies": { - "@nomicfoundation/ignition-core": "^0.15.8", - "@nomicfoundation/ignition-ui": "^0.15.8", - "chalk": "^4.0.0", - "debug": "^4.3.2", - "fs-extra": "^10.0.0", - "json5": "^2.2.3", - "prompts": "^2.4.2" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-verify": "^2.0.1", - "hardhat": "^2.18.0" - } - }, - "node_modules/@nomicfoundation/hardhat-ignition-ethers": { - "version": "0.15.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.8.tgz", - "integrity": "sha512-5Ev8cXBKgqqOsFXxWe8iijsRabWGd/Vclx3SC903KeKVePdssVsZcYTtRNRcIwRcPJ0RIKJPIZz7MNDo64l3+w==", - "dev": true, - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.0.4", - "@nomicfoundation/hardhat-ignition": "^0.15.8", - "@nomicfoundation/ignition-core": "^0.15.8", - "ethers": "^6.7.0", - "hardhat": "^2.18.0" - } - }, - "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.12.tgz", - "integrity": "sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA==", - "dev": true, - "dependencies": { - "ethereumjs-util": "^7.1.4" - }, - "peerDependencies": { - "hardhat": "^2.9.5" - } - }, - "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-5.0.0.tgz", - "integrity": "sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==", - "dev": true, - "peerDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "@typechain/ethers-v6": "^0.5.0", - "@typechain/hardhat": "^9.0.0", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/node": ">=18.0.0", - "chai": "^4.2.0", - "ethers": "^6.4.0", - "hardhat": "^2.11.0", - "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.1", - "ts-node": ">=8.0.0", - "typechain": "^8.3.0", - "typescript": ">=4.5.0" - } - }, - "node_modules/@nomicfoundation/hardhat-verify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.12.tgz", - "integrity": "sha512-Lg3Nu7DCXASQRVI/YysjuAX2z8jwOCbS0w5tz2HalWGSTZThqA0v9N0v0psHbKNqzPJa8bNOeapIVSziyJTnAg==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "debug": "^4.1.1", - "lodash.clonedeep": "^4.5.0", - "picocolors": "^1.1.0", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" - }, - "peerDependencies": { - "hardhat": "^2.0.4" - } - }, - "node_modules/@nomicfoundation/ignition-core": { - "version": "0.15.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.8.tgz", - "integrity": "sha512-U+CmTjKU9uwvh7qIabqboy/K/sDoClDgpsFRHoFvAj87DPDkXYb/mZBSkXPTU1wxTxrW6GTFE4lG3e7LAyF+kw==", - "dev": true, - "dependencies": { - "@ethersproject/address": "5.6.1", - "@nomicfoundation/solidity-analyzer": "^0.1.1", - "cbor": "^9.0.0", - "debug": "^4.3.2", - "ethers": "^6.7.0", - "fs-extra": "^10.0.0", - "immer": "10.0.2", - "lodash": "4.17.21", - "ndjson": "2.0.0" - } - }, - "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "node_modules/@nomicfoundation/ignition-core/node_modules/cbor": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", - "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", - "dev": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@nomicfoundation/ignition-ui": { - "version": "0.15.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.8.tgz", - "integrity": "sha512-VUD5MsWrrv7E2P0AJO01pV8w8m66Du0uwBKXM0oUV5DRIzqm6eYHt9eCDb1KBINDpiFxOQiuyWQMdeKxgPp3qw==", - "dev": true - }, - "node_modules/@nomicfoundation/slang": { - "version": "0.18.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.18.3.tgz", - "integrity": "sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ==", - "dev": true, - "dependencies": { - "@bytecodealliance/preview2-shim": "0.17.0" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", - "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", - "dev": true, - "engines": { - "node": ">= 12" - }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", - "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", - "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", - "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", - "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", - "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", - "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", - "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.8.tgz", - "integrity": "sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ==", - "deprecated": "The @nomiclabs/hardhat-etherscan package is deprecated, please use @nomicfoundation/hardhat-verify instead", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "chalk": "^2.4.2", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "lodash": "^4.17.11", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" - }, - "peerDependencies": { - "hardhat": "^2.0.4" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@offchainlabs/upgrade-executor": { - "version": "1.1.0-beta.0", - "resolved": "https://registry.npmjs.org/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz", - "integrity": "sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw==", - "dev": true, - "dependencies": { - "@openzeppelin/contracts": "4.7.3", - "@openzeppelin/contracts-upgradeable": "4.7.3" - } - }, - "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==", - "dev": true - }, - "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts-upgradeable": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", - "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==", - "dev": true - }, - "node_modules/@openzeppelin/contracts": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.1.0.tgz", - "integrity": "sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==", - "dev": true - }, - "node_modules/@openzeppelin/contracts-upgradeable": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.1.0.tgz", - "integrity": "sha512-AIElwP5Ck+cslNE+Hkemf5SxjJoF4wBvvjxc27Rp+9jaPs/CLIaUBMYe1FNzhdiN0cYuwGRmYaRHmmntuiju4Q==", - "dev": true, - "peerDependencies": { - "@openzeppelin/contracts": "5.1.0" - } - }, - "node_modules/@openzeppelin/defender-sdk-base-client": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.15.2.tgz", - "integrity": "sha512-N3ZTeH8TXyklL7yNPMLUv0dxQwT78DTkOEDhzMS2/QE2FxbXrclSseoeeXxl6UYI61RBtZKn+okbSsbwiB5QWQ==", - "dev": true, - "dependencies": { - "amazon-cognito-identity-js": "^6.3.6", - "async-retry": "^1.3.3" - } - }, - "node_modules/@openzeppelin/defender-sdk-deploy-client": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.15.2.tgz", - "integrity": "sha512-zspzMqh+OC8arXAkgBqTUDVO+NfCkt54UrsmQHbA3UAjr5TiDXKycBKU5ORb01hE+2gAmoPwEpDW9uS2VLg33A==", - "dev": true, - "dependencies": { - "@openzeppelin/defender-sdk-base-client": "^1.15.2", - "axios": "^1.7.2", - "lodash": "^4.17.21" - } - }, - "node_modules/@openzeppelin/defender-sdk-network-client": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-1.15.2.tgz", - "integrity": "sha512-9r9pegc1aR7xzP9fmj1zvkk0OXMRJE10JabxxiJzAQQgmNXDeTGI6W5bFgrNJfxzcImNGqddJ3K4weKdLyL21A==", - "dev": true, - "dependencies": { - "@openzeppelin/defender-sdk-base-client": "^1.15.2", - "axios": "^1.7.2", - "lodash": "^4.17.21" - } - }, - "node_modules/@openzeppelin/hardhat-upgrades": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.6.0.tgz", - "integrity": "sha512-RuVuCciCfFOqCyKSJ2D4Zffp3hxhvXTn16JzTlD9cx3A7V/2d3JA75tpRHD7RVPic+dcSFIf+BZRWOHuhc2ayg==", - "dev": true, - "dependencies": { - "@openzeppelin/defender-sdk-base-client": "^1.14.4", - "@openzeppelin/defender-sdk-deploy-client": "^1.14.4", - "@openzeppelin/defender-sdk-network-client": "^1.14.4", - "@openzeppelin/upgrades-core": "^1.41.0", - "chalk": "^4.1.0", - "debug": "^4.1.1", - "ethereumjs-util": "^7.1.5", - "proper-lockfile": "^4.1.1", - "undici": "^6.11.1" - }, - "bin": { - "migrate-oz-cli-project": "dist/scripts/migrate-oz-cli-project.js" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "ethers": "^6.6.0", - "hardhat": "^2.0.2" - }, - "peerDependenciesMeta": { - "@nomicfoundation/hardhat-verify": { - "optional": true - } - } - }, - "node_modules/@openzeppelin/hardhat-upgrades/node_modules/undici": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.0.tgz", - "integrity": "sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==", - "dev": true, - "engines": { - "node": ">=18.17" - } - }, - "node_modules/@openzeppelin/upgrades-core": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.41.0.tgz", - "integrity": "sha512-+oryinqZnxkiZvg7bWqWX4Ki/CNwVUZEqC6Elpi5PQoahpL3/6Sq9xjIozD5AiI2O61h8JHQ+A//5NtczyavJw==", - "dev": true, - "dependencies": { - "@nomicfoundation/slang": "^0.18.3", - "cbor": "^9.0.0", - "chalk": "^4.1.0", - "compare-versions": "^6.0.0", - "debug": "^4.1.1", - "ethereumjs-util": "^7.0.3", - "minimatch": "^9.0.5", - "minimist": "^1.2.7", - "proper-lockfile": "^4.1.1", - "solidity-ast": "^0.4.51" - }, - "bin": { - "openzeppelin-upgrades-core": "dist/cli/cli.js" - } - }, - "node_modules/@openzeppelin/upgrades-core/node_modules/cbor": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", - "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", - "dev": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "dev": true, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dev": true, - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "dev": true, - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@resolver-engine/core": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.2.1.tgz", - "integrity": "sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "request": "^2.85.0" - } - }, - "node_modules/@resolver-engine/core/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/fs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.2.1.tgz", - "integrity": "sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg==", - "dev": true, - "dependencies": { - "@resolver-engine/core": "^0.2.1", - "debug": "^3.1.0" - } - }, - "node_modules/@resolver-engine/fs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/imports": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.2.2.tgz", - "integrity": "sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg==", - "dev": true, - "dependencies": { - "@resolver-engine/core": "^0.2.1", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0" - } - }, - "node_modules/@resolver-engine/imports-fs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.2.2.tgz", - "integrity": "sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ==", - "dev": true, - "dependencies": { - "@resolver-engine/fs": "^0.2.1", - "@resolver-engine/imports": "^0.2.2", - "debug": "^3.1.0" - } - }, - "node_modules/@resolver-engine/imports-fs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/imports/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true - }, - "node_modules/@safe-global/api-kit": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@safe-global/api-kit/-/api-kit-1.3.1.tgz", - "integrity": "sha512-JKvCNs8p+42+N8pV2MIqoXlBLckTe5CKboVT7t9mTluuA66i5W8+Kr+B5j9D//EIU5vO7iSOOIYnJuA2ck4XRQ==", - "dev": true, - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@safe-global/safe-core-sdk-types": "^2.3.0", - "node-fetch": "^2.6.6" - } - }, - "node_modules/@safe-global/protocol-kit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@safe-global/protocol-kit/-/protocol-kit-1.3.0.tgz", - "integrity": "sha512-zBhwHpaUggywmnR1Xm5RV22DpyjmVWYP3pnOl4rcf9LAc1k7IVmw6WIt2YVhHRaWGxVYMd4RitJX8Dx2+8eLZQ==", - "dev": true, - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/solidity": "^5.7.0", - "@safe-global/safe-deployments": "^1.26.0", - "ethereumjs-util": "^7.1.5", - "semver": "^7.5.4", - "web3": "^1.8.1", - "web3-core": "^1.8.1", - "web3-utils": "^1.8.1", - "zksync-web3": "^0.14.3" - } - }, - "node_modules/@safe-global/protocol-kit/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@safe-global/safe-core-sdk-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@safe-global/safe-core-sdk-types/-/safe-core-sdk-types-2.3.0.tgz", - "integrity": "sha512-dU0KkDV1KJNf11ajbUjWiSi4ygdyWfhk1M50lTJWUdCn1/2Bsb/hICM8LoEk6DCoFumxaoCet02SmYakXsW2CA==", - "deprecated": "WARNING: This project has been renamed to @safe-global/types-kit. Please, migrate from @safe-global/safe-core-sdk-types@5.1.0 to @safe-global/types-kit@1.0.0.", - "dev": true, - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@safe-global/safe-deployments": "^1.26.0", - "web3-core": "^1.8.1", - "web3-utils": "^1.8.1" - } - }, - "node_modules/@safe-global/safe-deployments": { - "version": "1.37.18", - "resolved": "https://registry.npmjs.org/@safe-global/safe-deployments/-/safe-deployments-1.37.18.tgz", - "integrity": "sha512-flX/TtgsbKp5qLJSSy/v7bcdtTsml6F9Vyf/JnG1Zfeto5aDeNYlvzljHAd8atnbOiggrZ8z5jyvdlh6njsXfw==", - "dev": true, - "dependencies": { - "semver": "^7.6.2" - } - }, - "node_modules/@safe-global/safe-deployments/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", - "dev": true, - "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", - "dev": true, - "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@smithy/types": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.1.tgz", - "integrity": "sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/types/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", - "dev": true, - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@truffle/hdwallet-provider": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-1.7.0.tgz", - "integrity": "sha512-nT7BPJJ2jPCLJc5uZdVtRnRMny5he5d3kO9Hi80ZSqe5xlnK905grBptM/+CwOfbeqHKQirI1btwm6r3wIBM8A==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "@ethereumjs/common": "^2.4.0", - "@ethereumjs/tx": "^3.3.0", - "@trufflesuite/web3-provider-engine": "15.0.14", - "eth-sig-util": "^3.0.1", - "ethereum-cryptography": "^0.1.3", - "ethereum-protocol": "^1.0.1", - "ethereumjs-util": "^6.1.0", - "ethereumjs-wallet": "^1.0.1" - } - }, - "node_modules/@truffle/hdwallet-provider/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@truffle/hdwallet-provider/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/@truffle/hdwallet-provider/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/@trufflesuite/eth-json-rpc-filters": { - "version": "4.1.2-1", - "resolved": "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.2-1.tgz", - "integrity": "sha512-/MChvC5dw2ck9NU1cZmdovCz2VKbOeIyR4tcxDvA5sT+NaL0rA2/R5U0yI7zsbo1zD+pgqav77rQHTzpUdDNJQ==", - "dev": true, - "dependencies": { - "@trufflesuite/eth-json-rpc-middleware": "^4.4.2-0", - "await-semaphore": "^0.1.3", - "eth-query": "^2.1.2", - "json-rpc-engine": "^5.1.3", - "lodash.flatmap": "^4.5.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/@trufflesuite/eth-json-rpc-infura": { - "version": "4.0.3-0", - "resolved": "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-infura/-/eth-json-rpc-infura-4.0.3-0.tgz", - "integrity": "sha512-xaUanOmo0YLqRsL0SfXpFienhdw5bpQ1WEXxMTRi57az4lwpZBv4tFUDvcerdwJrxX9wQqNmgUgd1BrR01dumw==", - "dev": true, - "dependencies": { - "@trufflesuite/eth-json-rpc-middleware": "^4.4.2-1", - "cross-fetch": "^2.1.1", - "eth-json-rpc-errors": "^1.0.1", - "json-rpc-engine": "^5.1.3" - } - }, - "node_modules/@trufflesuite/eth-json-rpc-infura/node_modules/eth-json-rpc-errors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz", - "integrity": "sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg==", - "deprecated": "Package renamed: https://www.npmjs.com/package/eth-rpc-errors", - "dev": true, - "dependencies": { - "fast-safe-stringify": "^2.0.6" - } - }, - "node_modules/@trufflesuite/eth-json-rpc-middleware": { - "version": "4.4.2-1", - "resolved": "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.2-1.tgz", - "integrity": "sha512-iEy9H8ja7/8aYES5HfrepGBKU9n/Y4OabBJEklVd/zIBlhCCBAWBqkIZgXt11nBXO/rYAeKwYuE3puH3ByYnLA==", - "dev": true, - "dependencies": { - "@trufflesuite/eth-sig-util": "^1.4.2", - "btoa": "^1.2.1", - "clone": "^2.1.1", - "eth-json-rpc-errors": "^1.0.1", - "eth-query": "^2.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.7", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.6.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^5.1.3", - "json-stable-stringify": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/@trufflesuite/eth-json-rpc-middleware/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/@trufflesuite/eth-json-rpc-middleware/node_modules/eth-json-rpc-errors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz", - "integrity": "sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg==", - "deprecated": "Package renamed: https://www.npmjs.com/package/eth-rpc-errors", - "dev": true, - "dependencies": { - "fast-safe-stringify": "^2.0.6" - } - }, - "node_modules/@trufflesuite/eth-json-rpc-middleware/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/@trufflesuite/eth-sig-util": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@trufflesuite/eth-sig-util/-/eth-sig-util-1.4.2.tgz", - "integrity": "sha512-+GyfN6b0LNW77hbQlH3ufZ/1eCON7mMrGym6tdYf7xiNw9Vv3jBO72bmmos1EId2NgBvPMhmYYm6DSLQFTmzrA==", - "dev": true, - "dependencies": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^5.1.1" - } - }, - "node_modules/@trufflesuite/eth-sig-util/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/@trufflesuite/eth-sig-util/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/@trufflesuite/web3-provider-engine": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@trufflesuite/web3-provider-engine/-/web3-provider-engine-15.0.14.tgz", - "integrity": "sha512-6/LoWvNMxYf0oaYzJldK2a9AdnkAdIeJhHW4nuUBAeO29eK9xezEaEYQ0ph1QRTaICxGxvn+1Azp4u8bQ8NEZw==", - "dev": true, - "dependencies": { - "@ethereumjs/tx": "^3.3.0", - "@trufflesuite/eth-json-rpc-filters": "^4.1.2-1", - "@trufflesuite/eth-json-rpc-infura": "^4.0.3-0", - "@trufflesuite/eth-json-rpc-middleware": "^4.4.2-1", - "@trufflesuite/eth-sig-util": "^1.4.2", - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^4.4.2", - "eth-json-rpc-errors": "^2.0.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - } - }, - "node_modules/@trufflesuite/web3-provider-engine/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/@trufflesuite/web3-provider-engine/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/@trufflesuite/web3-provider-engine/node_modules/ws": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.4.tgz", - "integrity": "sha512-fFCejsuC8f9kOSu9FYaOw8CdO68O3h5v0lg4p74o8JqWpwTf9tniOD+nOB78aWoVSS6WptVUmDrp/KPsMVBWFQ==", - "dev": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@typechain/ethers-v6": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", - "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "ethers": "6.x", - "typechain": "^8.3.2", - "typescript": ">=4.7.0" - } - }, - "node_modules/@typechain/hardhat": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", - "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", - "dev": true, - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@typechain/ethers-v6": "^0.5.1", - "ethers": "^6.1.0", - "hardhat": "^2.9.9", - "typechain": "^8.3.2" - } - }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@types/bn.js": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", - "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/chai": { - "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", - "dev": true - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", - "dev": true, - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "10.0.10", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", - "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", - "dev": true - }, - "node_modules/@types/node": { - "version": "22.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", - "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", - "dev": true, - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.17", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", - "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", - "dev": true - }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/secp256k1": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", - "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/tinycolor2": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", - "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", - "dev": true - }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "dev": true - }, - "node_modules/@types/yoga-layout": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz", - "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true - }, - "node_modules/abortcontroller-polyfill": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.6.tgz", - "integrity": "sha512-Zypm+LjYdWAzvuypZvDN0smUJrhOurcuBWhhMRBExqVLRvdjp3Z9mASxKyq19K+meZMshwjjy5S0lkm388zE4Q==", - "dev": true - }, - "node_modules/abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "dev": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true, - "engines": { - "node": ">=0.3.0" - } - }, - "node_modules/aes-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", - "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==", - "dev": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/amazon-cognito-identity-js": { - "version": "6.3.12", - "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz", - "integrity": "sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-js": "1.2.2", - "buffer": "4.9.2", - "fast-base64-decode": "^1.0.0", - "isomorphic-unfetch": "^3.0.0", - "js-cookie": "^2.2.1" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/antlr4": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", - "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/ast-metadata-inferer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz", - "integrity": "sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==", - "dev": true, - "dependencies": { - "@mdn/browser-compat-data": "^5.2.34" - } - }, - "node_modules/ast-parents": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", - "integrity": "sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==", - "dev": true - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "dependencies": { - "async": "^2.4.0" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "dev": true, - "dependencies": { - "retry": "0.13.1" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/auto-bind": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", - "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/await-semaphore": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/await-semaphore/-/await-semaphore-0.1.3.tgz", - "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==", - "dev": true - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", - "dev": true - }, - "node_modules/axios": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", - "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==", - "dev": true, - "dependencies": { - "precond": "0.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true - }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "dev": true, - "dependencies": { - "base-x": "^4.0.0" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/bs58check/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bs58check/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", - "dev": true, - "bin": { - "btoa": "bin/btoa.js" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/bufferutil": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", - "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "dev": true, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "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.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001684", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", - "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-as-promised": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", - "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", - "dev": true, - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/checkpoint-store": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", - "integrity": "sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==", - "dev": true, - "dependencies": { - "functional-red-black-tree": "^1.0.1" - } - }, - "node_modules/chokidar": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", - "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", - "dev": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" - } - }, - "node_modules/cids/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", - "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", - "dev": true - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/code-excerpt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-3.0.0.tgz", - "integrity": "sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==", - "dev": true, - "dependencies": { - "convert-to-spaces": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dev": true, - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/compare-versions": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", - "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/console-table-printer": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/console-table-printer/-/console-table-printer-2.12.1.tgz", - "integrity": "sha512-wKGOQRRvdnd89pCeH96e2Fn4wkbenSP6LMHfjfyNLMbGuHEFbMqQNuxXqd0oXG9caIOQ1FTvc5Uijp9/4jujnQ==", - "dev": true, - "dependencies": { - "simple-wcswidth": "^1.0.1" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", - "dev": true, - "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-to-spaces": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz", - "integrity": "sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/core-js-compat": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", - "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", - "dev": true, - "dependencies": { - "browserslist": "^4.24.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", - "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.7", - "whatwg-fetch": "^2.0.4" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "dev": true, - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-indent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", - "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==", - "dev": true, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/detect-newline": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", - "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/difflib": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", - "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", - "dev": true, - "dependencies": { - "heap": ">= 0.2.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/ds-test": { - "version": "1.0.0", - "resolved": "git+ssh://git@github.com/dapphub/ds-test.git#e282159d5170298eb2455a6c05280ab5a73a4ef0" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.5.67", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz", - "integrity": "sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "dev": true - }, - "node_modules/encode-utf8": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", - "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", - "dev": true - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.23.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", - "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", - "dev": true, - "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", - "dev": true, - "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", - "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", - "dev": true, - "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.5", - "enhanced-resolve": "^5.15.0", - "eslint-module-utils": "^2.8.1", - "fast-glob": "^3.3.2", - "get-tsconfig": "^4.7.5", - "is-bun-module": "^1.0.2", - "is-glob": "^4.0.3" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-autofix": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-autofix/-/eslint-plugin-autofix-2.2.0.tgz", - "integrity": "sha512-lu8+0r+utyTroROqXIL+a8sUpICi6za22hIzlpb0+x0tQGRnOjhOKU7v8mC/NS/faDoVsw6xW3vUpc+Mcz5NWA==", - "dev": true, - "dependencies": { - "eslint-rule-composer": "^0.3.0", - "espree": "^9.0.0", - "esutils": "^2.0.2", - "string-similarity": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "eslint": ">=8" - } - }, - "node_modules/eslint-plugin-compat": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz", - "integrity": "sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==", - "dev": true, - "dependencies": { - "@mdn/browser-compat-data": "^5.3.13", - "ast-metadata-inferer": "^0.8.0", - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001524", - "find-up": "^5.0.0", - "lodash.memoize": "^4.1.2", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=14.x" - }, - "peerDependencies": { - "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-compat/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", - "dev": true, - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-unused-imports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.2.0.tgz", - "integrity": "sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==", - "dev": true, - "dependencies": { - "eslint-rule-composer": "^0.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "6 - 7", - "eslint": "8" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } - } - }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eth-block-tracker": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", - "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", - "dev": true, - "dependencies": { - "@babel/plugin-transform-runtime": "^7.5.5", - "@babel/runtime": "^7.5.5", - "eth-query": "^2.1.0", - "json-rpc-random-id": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "dev": true, - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "node_modules/eth-ens-namehash/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - }, - "node_modules/eth-gas-reporter": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", - "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", - "dev": true, - "dependencies": { - "@solidity-parser/parser": "^0.14.0", - "axios": "^1.5.1", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^5.7.2", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^10.2.0", - "req-cwd": "^2.0.0", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" - }, - "peerDependencies": { - "@codechecks/client": "^0.1.0" - }, - "peerDependenciesMeta": { - "@codechecks/client": { - "optional": true - } - } - }, - "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-gas-reporter/node_modules/cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "colors": "^1.1.2" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@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/contracts": "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/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-gas-reporter/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-gas-reporter/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-json-rpc-errors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz", - "integrity": "sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA==", - "deprecated": "Package renamed: https://www.npmjs.com/package/eth-rpc-errors", - "dev": true, - "dependencies": { - "fast-safe-stringify": "^2.0.6" - } - }, - "node_modules/eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/eth-lib/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/eth-lib/node_modules/ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "node_modules/eth-query": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", - "dev": true, - "dependencies": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "node_modules/eth-rpc-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz", - "integrity": "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==", - "dev": true, - "dependencies": { - "fast-safe-stringify": "^2.0.6" - } - }, - "node_modules/eth-sig-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-3.0.1.tgz", - "integrity": "sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ==", - "deprecated": "Deprecated in favor of '@metamask/eth-sig-util'", - "dev": true, - "dependencies": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.0" - } - }, - "node_modules/eth-sig-util/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/eth-sig-util/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", - "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", - "dev": true, - "dependencies": { - "@noble/hashes": "^1.4.0" - } - }, - "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", - "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", - "dev": true, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==", - "dev": true - }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/ethereum-protocol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz", - "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==", - "dev": true - }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "deprecated": "This library has been deprecated and usage is discouraged.", - "dev": true, - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethereumjs-account": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", - "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", - "dev": true, - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-account/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/ethereumjs-account/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "deprecated": "New package name format for new versions: @ethereumjs/block. Please update.", - "dev": true, - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ethereumjs-block/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", - "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", - "deprecated": "New package name format for new versions: @ethereumjs/common. Please update.", - "dev": true - }, - "node_modules/ethereumjs-tx": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", - "deprecated": "New package name format for new versions: @ethereumjs/tx. Please update.", - "dev": true, - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "node_modules/ethereumjs-tx/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/ethereumjs-tx/node_modules/ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==", - "dev": true - }, - "node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ethereumjs-vm": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", - "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", - "deprecated": "New package name format for new versions: @ethereumjs/vm. Please update.", - "dev": true, - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-vm/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ethereumjs-vm/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", - "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", - "deprecated": "New package name format for new versions: @ethereumjs/block. Please update.", - "dev": true, - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "deprecated": "New package name format for new versions: @ethereumjs/tx. Please update.", - "dev": true, - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethereumjs-wallet": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz", - "integrity": "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==", - "deprecated": "New package name format for new versions: @ethereumjs/wallet. Please update.", - "dev": true, - "dependencies": { - "aes-js": "^3.1.2", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^7.1.2", - "randombytes": "^2.1.0", - "scrypt-js": "^3.0.1", - "utf8": "^3.0.0", - "uuid": "^8.3.2" - } - }, - "node_modules/ethers": { - "version": "6.13.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.4.tgz", - "integrity": "sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/ethers/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "dev": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/ethers/node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true - }, - "node_modules/ethers/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true - }, - "node_modules/ethers/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true - }, - "node_modules/ethers/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "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 - } - } - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dev": true, - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fake-merkle-patricia-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", - "integrity": "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==", - "dev": true, - "dependencies": { - "checkpoint-store": "^1.1.0" - } - }, - "node_modules/fast-base64-decode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", - "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", - "dev": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, - "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fdir": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", - "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", - "dev": true, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "dev": true - }, - "node_modules/fetch-ponyfill": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz", - "integrity": "sha512-knK9sGskIg2T7OnYLdZ2hZXn0CtDrAIBxYQLpmEf0BqfdWnwmM1weccUl5+4EdA44tzNSFAuxITPbXtPehUB3g==", - "dev": true, - "dependencies": { - "node-fetch": "~1.7.1" - } - }, - "node_modules/fetch-ponyfill/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fetch-ponyfill/node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "dependencies": { - "micromatch": "^4.0.2" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "dev": true - }, - "node_modules/fmix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", - "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", - "dev": true, - "dependencies": { - "imul": "^1.0.0" - } - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/forge-std": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/forge-std/-/forge-std-1.1.2.tgz", - "integrity": "sha512-Wfb0iAS9PcfjMKtGpWQw9mXzJxrWD62kJCUqqLcyuI0+VRtJ3j20XembjF3kS20qELYdXft1vD/SPFVWVKMFOw==" - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "dev": true, - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fp-ts": { - "version": "2.16.9", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.9.tgz", - "integrity": "sha512-+I2+FnVB+tVaxcYyQkHUq7ZdKScaBlX53A41mxQtpIccsfyv8PzdzP7fzp2AY832T4aoK6UZ5WRX/ebGd8uZuQ==", - "dev": true - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", - "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/ghost-testrpc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", - "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "node-emoji": "^1.10.0" - }, - "bin": { - "testrpc-sc": "index.js" - } - }, - "node_modules/ghost-testrpc/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ghost-testrpc/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ghost-testrpc/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/git-hooks-list": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.1.0.tgz", - "integrity": "sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==", - "dev": true, - "funding": { - "url": "https://github.com/fisker/git-hooks-list?sponsor=1" - } - }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/gradient-string": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gradient-string/-/gradient-string-1.2.0.tgz", - "integrity": "sha512-Lxog7IDMMWNjwo4O0KbdBvSewk4vW6kQe5XaLuuPCyCE65AGQ1P8YqKJa5dq8TYf/Ge31F+KjWzPR5mAJvjlAg==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "tinygradient": "^0.4.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/gradient-string/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/gradient-string/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/gradient-string/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/gradient-string/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/gradient-string/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/gradient-string/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/gradient-string/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hardhat": { - "version": "2.22.16", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.16.tgz", - "integrity": "sha512-d52yQZ09u0roL6GlgJSvtknsBtIuj9JrJ/U8VMzr/wue+gO5v2tQayvOX6llerlR57Zw2EOTQjLAt6RpHvjwHA==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.6.4", - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-tx": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "boxen": "^5.1.2", - "chokidar": "^4.0.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "find-up": "^5.0.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "json-stream-stringify": "^3.1.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "picocolors": "^1.1.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.8.26", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tinyglobby": "^0.2.6", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "bin": { - "hardhat": "internal/cli/bootstrap.js" - }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/hardhat-contract-sizer": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz", - "integrity": "sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "cli-table3": "^0.6.0", - "strip-ansi": "^6.0.0" - }, - "peerDependencies": { - "hardhat": "^2.0.0" - } - }, - "node_modules/hardhat-deploy": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.12.4.tgz", - "integrity": "sha512-bYO8DIyeGxZWlhnMoCBon9HNZb6ji0jQn7ngP1t5UmGhC8rQYhji7B73qETMOFhzt5ECZPr+U52duj3nubsqdQ==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^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/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/solidity": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", - "@types/qs": "^6.9.7", - "axios": "^0.21.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "ethers": "^5.7.0", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "match-all": "^1.2.6", - "murmur-128": "^0.2.1", - "qs": "^6.9.4", - "zksync-ethers": "^5.0.0" - } - }, - "node_modules/hardhat-deploy/node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/hardhat-deploy/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/hardhat-deploy/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@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/contracts": "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/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/hardhat-deploy/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hardhat-deploy/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", - "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", - "dev": true, - "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.25", - "sha1": "^1.1.1" - }, - "peerDependencies": { - "hardhat": "^2.0.2" - } - }, - "node_modules/hardhat-storage-layout": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/hardhat-storage-layout/-/hardhat-storage-layout-0.1.7.tgz", - "integrity": "sha512-q723g2iQnJpRdMC6Y8fbh/stG6MLHKNxa5jq/ohjtD5znOlOzQ6ojYuInY8V4o4WcPyG3ty4hzHYunLf66/1+A==", - "dev": true, - "dependencies": { - "console-table-printer": "^2.9.0" - }, - "peerDependencies": { - "hardhat": "^2.0.3" - } - }, - "node_modules/hardhat-tracer": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/hardhat-tracer/-/hardhat-tracer-2.8.3.tgz", - "integrity": "sha512-bZrz8KtqQUbBcCAYcXnQh3bIkA7JCb2rC7tmq5XlTcDDFPW425HA58CtfHLHsoArrOQdogb0tPTLwh3ONmDj6w==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "debug": "^4.3.4", - "ethers": "^5.6.1" - }, - "peerDependencies": { - "chai": "4.x", - "hardhat": ">=2.16 <2.21.0" - } - }, - "node_modules/hardhat-tracer/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@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/contracts": "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/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/hardhat/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/hardhat/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/hardhat/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/hardhat/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "node_modules/hardhat/node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "node_modules/hardhat/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/hardhat/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/hardhat/node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hardhat/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/homedir": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/homedir/-/homedir-0.6.0.tgz", - "integrity": "sha512-KZFBHenkVuyyG4uaqRSXqWJr3HTxcaPguM7rU1BlH/mtbDlzaXNSXTa9AhV+fXEjrNemHu9vtLRIaM8/8OW0xA==", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dev": true, - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==", - "dev": true - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dev": true, - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dev": true, - "dependencies": { - "punycode": "2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, - "node_modules/immer": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", - "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imul": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", - "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "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.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/ink": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ink/-/ink-3.2.0.tgz", - "integrity": "sha512-firNp1q3xxTzoItj/eOOSZQnYSlyrWks5llCTVX37nJ59K3eXbQ8PtzCguqo8YI19EELo5QxaKnJd4VxzhU8tg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "auto-bind": "4.0.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.0", - "cli-cursor": "^3.1.0", - "cli-truncate": "^2.1.0", - "code-excerpt": "^3.0.0", - "indent-string": "^4.0.0", - "is-ci": "^2.0.0", - "lodash": "^4.17.20", - "patch-console": "^1.0.0", - "react-devtools-core": "^4.19.1", - "react-reconciler": "^0.26.2", - "scheduler": "^0.20.2", - "signal-exit": "^3.0.2", - "slice-ansi": "^3.0.0", - "stack-utils": "^2.0.2", - "string-width": "^4.2.2", - "type-fest": "^0.12.0", - "widest-line": "^3.1.0", - "wrap-ansi": "^6.2.0", - "ws": "^7.5.5", - "yoga-layout-prebuilt": "^1.9.6" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": ">=16.8.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/ink-gradient": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ink-gradient/-/ink-gradient-2.0.0.tgz", - "integrity": "sha512-d2BK/EzzBRoDL54NWkS3JGE4J8xtzwRVWxDAIkQ/eQ60XIzrFMtT5JlUqgV05Qlt32Jvk50qW51YqxGJggTuqA==", - "dev": true, - "dependencies": { - "gradient-string": "^1.2.0", - "prop-types": "^15.7.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - }, - "peerDependencies": { - "ink": ">=3.0.0", - "react": ">=16.8.0" - } - }, - "node_modules/ink-table": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ink-table/-/ink-table-3.1.0.tgz", - "integrity": "sha512-qxVb4DIaEaJryvF9uZGydnmP9Hkmas3DCKVpEcBYC0E4eJd3qNgNe+PZKuzgCERFe9LfAS1TNWxCr9+AU4v3YA==", - "dev": true, - "dependencies": { - "object-hash": "^2.0.3" - }, - "peerDependencies": { - "ink": ">=3.0.0", - "react": ">=16.8.0" - } - }, - "node_modules/ink/node_modules/type-fest": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", - "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ink/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ink/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true, - "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 - } - } - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "node_modules/io-ts/node_modules/fp-ts": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz", - "integrity": "sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bun-module": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", - "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", - "dev": true, - "dependencies": { - "semver": "^7.6.3" - } - }, - "node_modules/is-bun-module/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dev": true, - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", - "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", - "integrity": "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "dev": true, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", - "dev": true - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-rpc-engine": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", - "dev": true, - "dependencies": { - "eth-rpc-errors": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", - "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "isarray": "^2.0.5", - "jsonify": "^0.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stable-stringify/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/json-stream-stringify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", - "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", - "dev": true, - "engines": { - "node": ">=7.10.1" - } - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonschema": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", - "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/keccak/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true - }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "dev": true, - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==", - "dev": true - }, - "node_modules/level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "dev": true, - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/level-iterator-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/level-iterator-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "node_modules/level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", - "dev": true, - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/level-ws/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/level-ws/node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", - "dev": true - }, - "node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/level-ws/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", - "dev": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "dev": true, - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/levelup/node_modules/semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.flatmap": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", - "integrity": "sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg==", - "dev": true - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/logform": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", - "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "dev": true, - "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/logform/node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", - "dev": true - }, - "node_modules/match-all": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", - "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", - "dev": true - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", - "deprecated": "Superseded by memory-level (https://github.com/Level/community#faq)", - "dev": true, - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "dev": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/memdown/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", - "dev": true, - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true - }, - "node_modules/merkle-patricia-tree/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micro-ftch": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", - "dev": true - }, - "node_modules/micro-memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.2.tgz", - "integrity": "sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dev": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", - "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", - "dev": true, - "dependencies": { - "mkdirp": "*" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "dependencies": { - "obliterator": "^2.0.0" - } - }, - "node_modules/mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/mocha/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", - "dev": true - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/multibase/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/multibase/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "dependencies": { - "varint": "^5.0.0" - } - }, - "node_modules/multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } - }, - "node_modules/multihashes/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/multihashes/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/murmur-128": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", - "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", - "dev": true, - "dependencies": { - "encode-utf8": "^1.0.2", - "fmix": "^0.1.0", - "imul": "^1.0.0" - } - }, - "node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/ndjson": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", - "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", - "dev": true, - "dependencies": { - "json-stringify-safe": "^5.0.1", - "minimist": "^1.2.5", - "readable-stream": "^3.6.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "ndjson": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ndjson/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true - }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dev": true, - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "node_modules/oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "dev": true, - "dependencies": { - "http-https": "^1.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dev": true, - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-memoize": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-4.0.4.tgz", - "integrity": "sha512-ijdh0DP4Mk6J4FXlOM6vPPoCjPytcEseW8p/k5SDTSSfGV3E9bpt9Yzfifvzp6iohIieoLTkXRb32OWV0fB2Lw==", - "dev": true, - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.0.0", - "p-settle": "^4.1.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/p-memoize?sponsor=1" - } - }, - "node_modules/p-reflect": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz", - "integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-settle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-4.1.1.tgz", - "integrity": "sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.2", - "p-reflect": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-settle/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "dev": true, - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", - "dev": true - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", - "dev": true - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/patch-console": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-1.0.0.tgz", - "integrity": "sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/patch-package": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", - "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", - "dev": true, - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33", - "yaml": "^1.10.2" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "node": ">=10", - "npm": ">5" - } - }, - "node_modules/patch-package/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/patch-package/node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/patch-package/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/patch-package/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/patch-package/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/patch-package/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/patch-package/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/patch-package/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/patch-package/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/patch-package/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/prettier-plugin-packagejson": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.6.tgz", - "integrity": "sha512-TY7KiLtyt6Tlf53BEbXUWkN0+TRdHKgIMmtXtDCyHH6yWnZ50Lwq6Vb6lyjapZrhDTXooC4EtlY5iLe1sCgi5w==", - "dev": true, - "dependencies": { - "sort-package-json": "2.12.0", - "synckit": "0.9.2" - }, - "peerDependencies": { - "prettier": ">= 1.16.0" - }, - "peerDependenciesMeta": { - "prettier": { - "optional": true - } - } - }, - "node_modules/prettier-plugin-solidity": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.1.tgz", - "integrity": "sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg==", - "dev": true, - "dependencies": { - "@solidity-parser/parser": "^0.18.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "prettier": ">=2.3.0" - } - }, - "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", - "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", - "dev": true - }, - "node_modules/prettier-plugin-solidity/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dev": true, - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/promise-to-callback": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", - "integrity": "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==", - "dev": true, - "dependencies": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/proper-lockfile/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "node_modules/psl": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.14.0.tgz", - "integrity": "sha512-Syk1bnf6fRZ9wQs03AtKJHcM12cKbOLo9L8JtCCdYj5/DTsHmTyXM4BK5ouWeG2P6kZ4nmFvuNTdtaqfobCOCg==", - "dev": true, - "dependencies": { - "punycode": "^2.3.1" - } - }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-devtools-core": { - "version": "4.28.5", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz", - "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==", - "dev": true, - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/react-reconciler": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.26.2.tgz", - "integrity": "sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "react": "^17.0.2" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/readdirp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", - "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", - "dev": true, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/recursive-readdir/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", - "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "which-builtin-type": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", - "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/registry-auth-token": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.3.tgz", - "integrity": "sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==", - "dev": true, - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "dev": true, - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/req-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", - "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", - "dev": true, - "dependencies": { - "req-from": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/req-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", - "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", - "dev": true, - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/req-from/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dev": true, - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-event-emitter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", - "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", - "deprecated": "Renamed to @metamask/safe-event-emitter", - "dev": true, - "dependencies": { - "events": "^3.0.0" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sc-istanbul": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", - "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", - "dev": true, - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "istanbul": "lib/cli.js" - } - }, - "node_modules/sc-istanbul/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/sc-istanbul/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true - }, - "node_modules/sc-istanbul/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/sc-istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sc-istanbul/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sc-istanbul/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sc-istanbul/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sc-istanbul/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - }, - "node_modules/sc-istanbul/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dev": true, - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/sc-istanbul/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "node_modules/secp256k1": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", - "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.7", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/secp256k1/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/secp256k1/node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/secp256k1/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "dev": true - }, - "node_modules/semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dev": true, - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dev": true, - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "dev": true, - "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shelljs/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/shelljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/shelljs/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dev": true, - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/simple-get/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "node_modules/simple-wcswidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz", - "integrity": "sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/solady": { - "version": "0.0.182", - "resolved": "https://registry.npmjs.org/solady/-/solady-0.0.182.tgz", - "integrity": "sha512-FW6xo1akJoYpkXMzu58/56FcNU3HYYNamEbnFO3iSibXk0nSHo0DV2Gu/zI3FPg3So5CCX6IYli1TT1IWATnvg==", - "dev": true - }, - "node_modules/solc": { - "version": "0.8.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", - "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", - "dev": true, - "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solc.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/solhint": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/solhint/-/solhint-4.5.4.tgz", - "integrity": "sha512-Cu1XiJXub2q1eCr9kkJ9VPv1sGcmj3V7Zb76B0CoezDOB9bu3DxKIFFH7ggCl9fWpEPD6xBmRLfZrYijkVmujQ==", - "dev": true, - "dependencies": { - "@solidity-parser/parser": "^0.18.0", - "ajv": "^6.12.6", - "antlr4": "^4.13.1-patch-1", - "ast-parents": "^0.0.1", - "chalk": "^4.1.2", - "commander": "^10.0.0", - "cosmiconfig": "^8.0.0", - "fast-diff": "^1.2.0", - "glob": "^8.0.3", - "ignore": "^5.2.4", - "js-yaml": "^4.1.0", - "latest-version": "^7.0.0", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "semver": "^7.5.2", - "strip-ansi": "^6.0.1", - "table": "^6.8.1", - "text-table": "^0.2.0" - }, - "bin": { - "solhint": "solhint.js" - }, - "optionalDependencies": { - "prettier": "^2.8.3" - } - }, - "node_modules/solhint/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", - "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", - "dev": true - }, - "node_modules/solhint/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/solhint/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "optional": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/solhint/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/solidity-ast": { - "version": "0.4.59", - "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.59.tgz", - "integrity": "sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g==", - "dev": true - }, - "node_modules/solidity-bytes-utils": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/solidity-bytes-utils/-/solidity-bytes-utils-0.8.2.tgz", - "integrity": "sha512-cqXPYAV2auhpdKSTPuqji0CwpSceZDu95CzqSM/9tDJ2MoMaMsdHTpOIWtVw31BIqqGPNmIChCswzbw0tHaMTw==", - "dependencies": { - "ds-test": "github:dapphub/ds-test", - "forge-std": "^1.1.2" - } - }, - "node_modules/solidity-coverage": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.14.tgz", - "integrity": "sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.0.9", - "@solidity-parser/parser": "^0.19.0", - "chalk": "^2.4.2", - "death": "^1.1.0", - "difflib": "^0.2.4", - "fs-extra": "^8.1.0", - "ghost-testrpc": "^0.0.2", - "global-modules": "^2.0.0", - "globby": "^10.0.1", - "jsonschema": "^1.2.4", - "lodash": "^4.17.21", - "mocha": "^10.2.0", - "node-emoji": "^1.10.0", - "pify": "^4.0.1", - "recursive-readdir": "^2.2.2", - "sc-istanbul": "^0.4.5", - "semver": "^7.3.4", - "shelljs": "^0.8.3", - "web3-utils": "^1.3.6" - }, - "bin": { - "solidity-coverage": "plugins/bin.js" - }, - "peerDependencies": { - "hardhat": "^2.11.0" - } - }, - "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.19.0.tgz", - "integrity": "sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA==", - "dev": true - }, - "node_modules/solidity-coverage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/solidity-coverage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/solidity-coverage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/solidity-coverage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/solidity-coverage/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/solidity-coverage/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/solidity-coverage/node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/solidity-coverage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/solidity-coverage/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/solidity-coverage/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/solidity-coverage/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/solidity-coverage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/sort-object-keys": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", - "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==", - "dev": true - }, - "node_modules/sort-package-json": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.12.0.tgz", - "integrity": "sha512-/HrPQAeeLaa+vbAH/znjuhwUluuiM/zL5XX9kop8UpDgjtyWKt43hGDk2vd/TBdDpzIyzIHVUgmYofzYrAQjew==", - "dev": true, - "dependencies": { - "detect-indent": "^7.0.1", - "detect-newline": "^4.0.0", - "get-stdin": "^9.0.0", - "git-hooks-list": "^3.0.0", - "is-plain-obj": "^4.1.0", - "semver": "^7.6.0", - "sort-object-keys": "^1.1.3", - "tinyglobby": "^0.2.9" - }, - "bin": { - "sort-package-json": "cli.js" - } - }, - "node_modules/sort-package-json/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", - "dev": true, - "optional": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/split2/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true - }, - "node_modules/string-similarity": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", - "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dev": true, - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swarm-js": { - "version": "0.1.42", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", - "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^11.8.5", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - } - }, - "node_modules/swarm-js/node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/swarm-js/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/swarm-js/node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/swarm-js/node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/swarm-js/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/swarm-js/node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/swarm-js/node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/swarm-js/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/swarm-js/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/swarm-js/node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/swarm-js/node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/swarm-js/node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/swarm-js/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dev": true, - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dev": true, - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", - "dev": true, - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/synckit/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, - "node_modules/table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dev": true, - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dev": true, - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", - "dev": true - }, - "node_modules/then-request/node_modules/form-data": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", - "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "dev": true - }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", - "dev": true - }, - "node_modules/tinyglobby": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", - "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", - "dev": true, - "dependencies": { - "fdir": "^6.4.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/tinygradient": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-0.4.3.tgz", - "integrity": "sha512-tBPYQSs6eWukzzAITBSmqcOwZCKACvRa/XjPPh1mj4mnx4G3Drm51HxyCTU/TKnY8kG4hmTe5QlOh9O82aNtJQ==", - "dev": true, - "dependencies": { - "@types/tinycolor2": "^1.4.0", - "tinycolor2": "^1.0.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "dev": true, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/truffle-flattener": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/truffle-flattener/-/truffle-flattener-1.6.0.tgz", - "integrity": "sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q==", - "dev": true, - "dependencies": { - "@resolver-engine/imports-fs": "^0.2.2", - "@solidity-parser/parser": "^0.14.1", - "find-up": "^2.1.0", - "mkdirp": "^1.0.4", - "tsort": "0.0.1" - }, - "bin": { - "truffle-flattener": "index.js" - } - }, - "node_modules/truffle-flattener/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-flattener/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-flattener/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/truffle-flattener/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-flattener/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-flattener/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/truffle-flattener/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", - "dev": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-command-line-args": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", - "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" - } - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "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 - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typechain": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", - "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", - "dev": true, - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.3.0" - } - }, - "node_modules/typechain/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typechain/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", - "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dev": true, - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true - }, - "node_modules/unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", - "dev": true - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/web3": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.4.tgz", - "integrity": "sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "web3-bzz": "1.10.4", - "web3-core": "1.10.4", - "web3-eth": "1.10.4", - "web3-eth-personal": "1.10.4", - "web3-net": "1.10.4", - "web3-shh": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.4.tgz", - "integrity": "sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz/node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - }, - "node_modules/web3-bzz/node_modules/cacheable-lookup": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", - "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==", - "dev": true, - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/web3-bzz/node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/web3-bzz/node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/web3-bzz/node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/web3-bzz/node_modules/form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", - "dev": true - }, - "node_modules/web3-bzz/node_modules/got": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", - "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/web3-bzz/node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/web3-bzz/node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/web3-bzz/node_modules/responselike/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/web3-core": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.4.tgz", - "integrity": "sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.1", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-core-requestmanager": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-helpers": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz", - "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==", - "dev": true, - "dependencies": { - "web3-eth-iban": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.4.tgz", - "integrity": "sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA==", - "dev": true, - "dependencies": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.10.4", - "web3-core-promievent": "1.10.4", - "web3-core-subscriptions": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz", - "integrity": "sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==", - "dev": true, - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-requestmanager": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.4.tgz", - "integrity": "sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg==", - "dev": true, - "dependencies": { - "util": "^0.12.5", - "web3-core-helpers": "1.10.4", - "web3-providers-http": "1.10.4", - "web3-providers-ipc": "1.10.4", - "web3-providers-ws": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.4.tgz", - "integrity": "sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw==", - "dev": true, - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - }, - "node_modules/web3-eth": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.4.tgz", - "integrity": "sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA==", - "dev": true, - "dependencies": { - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-core-subscriptions": "1.10.4", - "web3-eth-abi": "1.10.4", - "web3-eth-accounts": "1.10.4", - "web3-eth-contract": "1.10.4", - "web3-eth-ens": "1.10.4", - "web3-eth-iban": "1.10.4", - "web3-eth-personal": "1.10.4", - "web3-net": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-abi": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.4.tgz", - "integrity": "sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.4.tgz", - "integrity": "sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg==", - "dev": true, - "dependencies": { - "@ethereumjs/common": "2.6.5", - "@ethereumjs/tx": "3.5.2", - "@ethereumjs/util": "^8.1.0", - "eth-lib": "0.2.8", - "scrypt-js": "^3.0.1", - "uuid": "^9.0.0", - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/web3-eth-contract": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.4.tgz", - "integrity": "sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.1", - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-core-promievent": "1.10.4", - "web3-core-subscriptions": "1.10.4", - "web3-eth-abi": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.4.tgz", - "integrity": "sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg==", - "dev": true, - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-promievent": "1.10.4", - "web3-eth-abi": "1.10.4", - "web3-eth-contract": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-iban": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz", - "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.4.tgz", - "integrity": "sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w==", - "dev": true, - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-net": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - }, - "node_modules/web3-net": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.4.tgz", - "integrity": "sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow==", - "dev": true, - "dependencies": { - "web3-core": "1.10.4", - "web3-core-method": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-http": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.4.tgz", - "integrity": "sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ==", - "dev": true, - "dependencies": { - "abortcontroller-polyfill": "^1.7.5", - "cross-fetch": "^4.0.0", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-http/node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/web3-providers-ipc": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.4.tgz", - "integrity": "sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw==", - "dev": true, - "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.4.tgz", - "integrity": "sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA==", - "dev": true, - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.4", - "websocket": "^1.0.32" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-shh": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.4.tgz", - "integrity": "sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "web3-core": "1.10.4", - "web3-core-method": "1.10.4", - "web3-core-subscriptions": "1.10.4", - "web3-net": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", - "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", - "dev": true, - "dependencies": { - "@ethereumjs/util": "^8.1.0", - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereum-cryptography": "^2.1.2", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", - "dev": true, - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/websocket": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", - "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", - "dev": true, - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.63", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", - "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", - "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/winston": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", - "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", - "dev": true, - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.7.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.9.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", - "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "dev": true, - "dependencies": { - "logform": "^2.7.0", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/winston/node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/winston/node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true - }, - "node_modules/winston/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "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 - } - } - }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dev": true, - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dev": true, - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "dev": true, - "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "dev": true, - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yoga-layout-prebuilt": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.10.0.tgz", - "integrity": "sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==", - "dev": true, - "dependencies": { - "@types/yoga-layout": "1.9.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/zksync-ethers": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/zksync-ethers/-/zksync-ethers-5.10.0.tgz", - "integrity": "sha512-OAjTGAHF9wbdkRGkj7XZuF/a1Sk/FVbwH4pmLjAKlR7mJ7sQtQhBhrPU2dCc67xLaNvEESPfwil19ES5wooYFg==", - "dev": true, - "dependencies": { - "ethers": "~5.7.0" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "ethers": "~5.7.0" - } - }, - "node_modules/zksync-ethers/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@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/contracts": "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/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/zksync-web3": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.4.tgz", - "integrity": "sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==", - "deprecated": "This package has been deprecated in favor of zksync-ethers@5.0.0", - "dev": true, - "peerDependencies": { - "ethers": "^5.7.0" - } - }, - "node_modules/zod": { - "version": "3.23.8", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/projects/omnichain-deployer/.openzeppelin/holesky.json b/projects/omnichain-deployer/.openzeppelin/holesky.json new file mode 100644 index 00000000..9dac97e5 --- /dev/null +++ b/projects/omnichain-deployer/.openzeppelin/holesky.json @@ -0,0 +1,1042 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x6899D7893e2d859b82D331B9dF00504893b717f3", + "txHash": "0x5e2dbc80289ff70dc031a12eabea252e4211e630a2945adafeb2769912a01839", + "kind": "transparent" + }, + { + "address": "0xF2b002c28aBa30C33e51fCAd9d2a074379e70053", + "txHash": "0xbf8bdc542345b35aa7de0ce008642d8d67f5c6a6971a93c48fb794690517d4b3", + "kind": "transparent" + }, + { + "address": "0x2f982C5A814206d3BF52473403a834aCaE2C67e9", + "txHash": "0xd7137d47b3025aad0c747cbbf7602e431ea3e0ed1f8dd8e18ce89727d855c53b", + "kind": "transparent" + }, + { + "address": "0x09908F11bcAF39C81631Efde9C0bEa9A575FD438", + "txHash": "0x6ad1017bee19360dfad1b761d78ad65ff60071267d4d595865048a562a31e566", + "kind": "transparent" + }, + { + "address": "0x7382C8aCD984f64730b93db26301d8eeC8e5b441", + "txHash": "0xd74618b76a1ea2dc8331d2c0a00869a8d98167149c9edecfaa9e34c65f0ebba2", + "kind": "transparent" + }, + { + "address": "0xcE3751e6f6E91235A205a77999a82f556eEBcBf3", + "txHash": "0x81a8f24ae02e5b0c7db460f03bbd440eb3b9030a089f8a30c3b9b5a6d6ab1a51", + "kind": "transparent" + }, + { + "address": "0x0A8c0FdC2b0d757228A52dCE08B219851baa8943", + "txHash": "0xc5ed7e38d5fb1763d6c819a4328663748b5ca1360e4de656fa2827626c7f8d37", + "kind": "transparent" + }, + { + "address": "0xab54b3B54e9ccD2EEB5671B937676Df29099e826", + "txHash": "0xbf3e90b35865c9ec462faa04242df1b5604d44c66c5a0c861de080bb90370329", + "kind": "transparent" + }, + { + "address": "0xBfBef1d3607F9D0bcE098A83850C48469C2DA0c9", + "txHash": "0x2274fe9405ad1a21c3f5b305ad093c2cf76a8c27767da7d3ba91b273af710ea7", + "kind": "transparent" + }, + { + "address": "0xf0A0fcDd5965BCbEF475E683B53536aD84fb3146", + "txHash": "0x1252339c76e45797e9738180754310d7f75b4d833072e23f19ed2f130be46efb", + "kind": "transparent" + }, + { + "address": "0x1DBc7202adBbDc71d8806288cC9a5da863005228", + "txHash": "0x124b98f20fe7434a9691faddd86558ec8f32350478f4fcdc0f375a136834d3c8", + "kind": "transparent" + }, + { + "address": "0x7bdccE77C958796027a3D3b2253f723d75491CA7", + "txHash": "0x43b352b13c0833318883e2ce1b18dee9e95521ec99ce5dc37252b50f33274464", + "kind": "transparent" + }, + { + "address": "0x8b2366eC5775497aE3E1a616C2E81dFa7dE6D13d", + "txHash": "0xb63ab7606b136f8f88cabc6defd4811dc3441910ecd452056dc05e752901950c", + "kind": "transparent" + }, + { + "address": "0x8CE6Ba86Df61FEB96a47364fE89d1C7217B3aF1b", + "txHash": "0x075d6a56647a5b86d09b7918a760d89ceb633b9299815bddbbd6c3679cdd05aa", + "kind": "transparent" + }, + { + "address": "0x4b16D1D74a8c11eDb04D817972D9D9735e90c527", + "txHash": "0xac15305f983806ae25ee94e666cd0598ec505cf961d2bc64c606f5b06b4ada68", + "kind": "transparent" + } + ], + "impls": { + "a6dc2772c973a2290112525d2e08835b68e19befa52ad848b68a24fb520cd855": { + "address": "0xC593DCD051E489b48eb9eedB1EBb6F07C8487dF2", + "txHash": "0x3dd4fa434dfe5ea2c3a7f73321456f01fac155efa2a38fbaf937e5125cf56c0c", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_balances", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:42" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "103", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "_name", + "offset": 0, + "slot": "104", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:46" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "105", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:47" + }, + { + "label": "__gap", + "offset": 0, + "slot": "106", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:376" + }, + { + "label": "vault", + "offset": 0, + "slot": "151", + "type": "t_contract(IInceptionVault_EL)19031", + "contract": "InceptionToken", + "src": "contracts/vaults/tokens/InceptionToken.sol:19" + }, + { + "label": "_paused", + "offset": 20, + "slot": "151", + "type": "t_bool", + "contract": "InceptionToken", + "src": "contracts/vaults/tokens/InceptionToken.sol:21" + }, + { + "label": "rebalancer", + "offset": 0, + "slot": "152", + "type": "t_address", + "contract": "InceptionToken", + "src": "contracts/vaults/tokens/InceptionToken.sol:23" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IInceptionVault_EL)19031": { + "label": "contract IInceptionVault_EL", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "9e1d1cc5fdb27630525cae1e42981f6f9972292da42c6f6324ab33802efb1a2a": { + "address": "0x177c00dd6783B3DC437Fb43C3Eb549cA53c4cdAB", + "txHash": "0xb794d116c79b0d2251613f65708307f1e26ebfdc725c593a897a0d4b47c68972", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "_asset", + "offset": 0, + "slot": "0", + "type": "t_contract(IERC20)1004", + "contract": "InceptionAssetsHandler", + "src": "contracts/mocks/MockVault_flattened.sol:2095" + }, + { + "label": "__reserver", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)49_storage", + "contract": "InceptionAssetsHandler", + "src": "contracts/mocks/MockVault_flattened.sol:2097" + }, + { + "label": "strategy", + "offset": 0, + "slot": "50", + "type": "t_address", + "contract": "EigenLayerHandlerMock", + "src": "contracts/mocks/MockVault_flattened.sol:2498" + }, + { + "label": "epoch", + "offset": 0, + "slot": "51", + "type": "t_uint256", + "contract": "EigenLayerHandlerMock", + "src": "contracts/mocks/MockVault_flattened.sol:2500" + }, + { + "label": "_operator", + "offset": 0, + "slot": "52", + "type": "t_address", + "contract": "EigenLayerHandlerMock", + "src": "contracts/mocks/MockVault_flattened.sol:2503" + }, + { + "label": "totalAmountToWithdraw", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "EigenLayerHandlerMock", + "src": "contracts/mocks/MockVault_flattened.sol:2507" + }, + { + "label": "_pendingWithdrawalAmount", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "EigenLayerHandlerMock", + "src": "contracts/mocks/MockVault_flattened.sol:2511" + }, + { + "label": "claimerWithdrawalsQueue", + "offset": 0, + "slot": "55", + "type": "t_array(t_struct(Withdrawal)3355_storage)dyn_storage", + "contract": "EigenLayerHandlerMock", + "src": "contracts/mocks/MockVault_flattened.sol:2513" + }, + { + "label": "redeemReservedAmount", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "EigenLayerHandlerMock", + "src": "contracts/mocks/MockVault_flattened.sol:2519" + }, + { + "label": "depositBonusAmount", + "offset": 0, + "slot": "57", + "type": "t_uint256", + "contract": "EigenLayerHandlerMock", + "src": "contracts/mocks/MockVault_flattened.sol:2525" + }, + { + "label": "targetCapacity", + "offset": 0, + "slot": "58", + "type": "t_uint256", + "contract": "EigenLayerHandlerMock", + "src": "contracts/mocks/MockVault_flattened.sol:2528" + }, + { + "label": "__reserver", + "offset": 0, + "slot": "59", + "type": "t_array(t_uint256)37_storage", + "contract": "EigenLayerHandlerMock", + "src": "contracts/mocks/MockVault_flattened.sol:2533" + }, + { + "label": "inceptionToken", + "offset": 0, + "slot": "96", + "type": "t_contract(IInceptionToken)3858", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2899" + }, + { + "label": "minAmount", + "offset": 0, + "slot": "97", + "type": "t_uint256", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2902" + }, + { + "label": "_claimerWithdrawals", + "offset": 0, + "slot": "98", + "type": "t_mapping(t_address,t_struct(Withdrawal)3355_storage)", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2904" + }, + { + "label": "name", + "offset": 0, + "slot": "99", + "type": "t_string_storage", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2907" + }, + { + "label": "_stakerImplementation", + "offset": 0, + "slot": "100", + "type": "t_address", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2910" + }, + { + "label": "ratioFeed", + "offset": 0, + "slot": "101", + "type": "t_contract(IInceptionRatioFeed)4097", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2919" + }, + { + "label": "treasury", + "offset": 0, + "slot": "102", + "type": "t_address", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2920" + }, + { + "label": "protocolFee", + "offset": 20, + "slot": "102", + "type": "t_uint64", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2921" + }, + { + "label": "maxBonusRate", + "offset": 0, + "slot": "103", + "type": "t_uint64", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2924" + }, + { + "label": "optimalBonusRate", + "offset": 8, + "slot": "103", + "type": "t_uint64", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2925" + }, + { + "label": "depositUtilizationKink", + "offset": 16, + "slot": "103", + "type": "t_uint64", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2926" + }, + { + "label": "maxFlashFeeRate", + "offset": 24, + "slot": "103", + "type": "t_uint64", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2929" + }, + { + "label": "optimalWithdrawalRate", + "offset": 0, + "slot": "104", + "type": "t_uint64", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2930" + }, + { + "label": "withdrawUtilizationKink", + "offset": 8, + "slot": "104", + "type": "t_uint64", + "contract": "InceptionVaultMock", + "src": "contracts/mocks/MockVault_flattened.sol:2931" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)7_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Ownable2StepStorage)143_storage": { + "label": "struct Ownable2StepUpgradeable.Ownable2StepStorage", + "members": [ + { + "label": "_pendingOwner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)82_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)193_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReentrancyGuardStorage)254_storage": { + "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", + "members": [ + { + "label": "_status", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_array(t_struct(Withdrawal)3355_storage)dyn_storage": { + "label": "struct IEigenLayerHandler.Withdrawal[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)37_storage": { + "label": "uint256[37]", + "numberOfBytes": "1184" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_contract(IERC20)1004": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IInceptionRatioFeed)4097": { + "label": "contract IInceptionRatioFeed", + "numberOfBytes": "20" + }, + "t_contract(IInceptionToken)3858": { + "label": "contract IInceptionToken", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_struct(Withdrawal)3355_storage)": { + "label": "mapping(address => struct IEigenLayerHandler.Withdrawal)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Withdrawal)3355_storage": { + "label": "struct IEigenLayerHandler.Withdrawal", + "members": [ + { + "label": "epoch", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "receiver", + "type": "t_address", + "offset": 0, + "slot": "1" + }, + { + "label": "amount", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable2Step": [ + { + "contract": "Ownable2StepUpgradeable", + "label": "_pendingOwner", + "type": "t_address", + "src": "contracts/mocks/MockVault_flattened.sol:423", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "contracts/mocks/MockVault_flattened.sol:297", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ReentrancyGuard": [ + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "contracts/mocks/MockVault_flattened.sol:670", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "contracts/mocks/MockVault_flattened.sol:505", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "contracts/mocks/MockVault_flattened.sol:75", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "contracts/mocks/MockVault_flattened.sol:79", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "9d221b99718de6ba1c1e4ceb5d533584bdf227297ed2501cd4dc4e29493a89f6": { + "address": "0x83541dA4d223e9A92872ACc6b4f6FcE1384cb1Fb", + "txHash": "0xc71a2cc8998e713e18337202ef1cb6c0bd64dd3da50ba1c54025712a455c2e60", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:70" + }, + { + "label": "underlyingAsset", + "offset": 0, + "slot": "151", + "type": "t_contract(IERC20)995", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:24" + }, + { + "label": "inceptionToken", + "offset": 0, + "slot": "152", + "type": "t_contract(IInceptionToken)2166", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:25" + }, + { + "label": "lockBox", + "offset": 0, + "slot": "153", + "type": "t_address", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:26" + }, + { + "label": "inceptionVault", + "offset": 0, + "slot": "154", + "type": "t_contract(IInceptionVault)1911", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:27" + }, + { + "label": "operator", + "offset": 0, + "slot": "155", + "type": "t_address", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:29" + }, + { + "label": "lastTx", + "offset": 0, + "slot": "156", + "type": "t_struct(Transaction)1920_storage", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:31" + }, + { + "label": "defaultAdapter", + "offset": 0, + "slot": "159", + "type": "t_address_payable", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:33" + }, + { + "label": "defaultChainId", + "offset": 0, + "slot": "160", + "type": "t_uint256", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:34" + }, + { + "label": "assetInfoTxMaxDelay", + "offset": 0, + "slot": "161", + "type": "t_uint256", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:35" + }, + { + "label": "__gap", + "offset": 0, + "slot": "162", + "type": "t_array(t_uint256)41_storage", + "contract": "ERC20RebalancerStorage", + "src": "contracts/vaults/rebalancer/ERC20RebalancerStorage.sol:37" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_uint256)41_storage": { + "label": "uint256[41]", + "numberOfBytes": "1312" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IERC20)995": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IInceptionToken)2166": { + "label": "contract IInceptionToken", + "numberOfBytes": "20" + }, + "t_contract(IInceptionVault)1911": { + "label": "contract IInceptionVault", + "numberOfBytes": "20" + }, + "t_struct(Transaction)1920_storage": { + "label": "struct IRebalancer.Transaction", + "members": [ + { + "label": "timestamp", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "underlyingBalance", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "inceptionTokenSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "282e0124b49f383e0311a1370ee13b2c4aaba3a36e709eba7be4b029e36dda6e": { + "address": "0xdA612e42B5f5079D9F294A95150b531DCE9c1f88", + "txHash": "0x954b3c2db065e67b0cd647e66d66dabf760805f6b18e9d387af8241348fb3440", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "endpoint", + "offset": 0, + "slot": "0", + "type": "t_contract(ILayerZeroEndpointV2)2638", + "contract": "OAppCoreUpgradeable", + "src": "contracts/bridge-lz/LayerZero/OAppCoreUpgradeable.sol:14" + }, + { + "label": "peers", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_uint32,t_bytes32)", + "contract": "OAppCoreUpgradeable", + "src": "contracts/bridge-lz/LayerZero/OAppCoreUpgradeable.sol:17" + }, + { + "label": "eidToChainId", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint32,t_uint256)", + "contract": "AbstractLZCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractLZCrossChainAdapter.sol:28" + }, + { + "label": "chainIdToEid", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_uint256,t_uint32)", + "contract": "AbstractLZCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractLZCrossChainAdapter.sol:29" + }, + { + "label": "targetReceiver", + "offset": 0, + "slot": "4", + "type": "t_address", + "contract": "AbstractCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractCrossChainAdapter.sol:21" + }, + { + "label": "_initialized", + "offset": 20, + "slot": "4", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 21, + "slot": "4", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "5", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "55", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_pendingOwner", + "offset": 0, + "slot": "105", + "type": "t_address", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "106", + "type": "t_array(t_uint256)49_storage", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:70" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(ILayerZeroEndpointV2)2638": { + "label": "contract ILayerZeroEndpointV2", + "numberOfBytes": "20" + }, + "t_mapping(t_uint256,t_uint32)": { + "label": "mapping(uint256 => uint32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_bytes32)": { + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_uint256)": { + "label": "mapping(uint32 => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + } + } +} diff --git a/projects/omnichain-deployer/.openzeppelin/unknown-2522.json b/projects/omnichain-deployer/.openzeppelin/unknown-2522.json new file mode 100644 index 00000000..10b90701 --- /dev/null +++ b/projects/omnichain-deployer/.openzeppelin/unknown-2522.json @@ -0,0 +1,696 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0xcdC9a3345fE445ac027F2a1bE9dac69d6dFbA3DC", + "txHash": "0x46ee7968b9e2dcb5c9f111adba73b410f96183433425ff5a46a6e1a59a9d7f5a", + "kind": "transparent" + }, + { + "address": "0x54AcdCAdcE6468c1A128aAf7532a89156eE93AEe", + "txHash": "0xcc796817dc4b60ec47644f7c409963be99c94cb828b22dff62e6bfcf86bee229", + "kind": "transparent" + }, + { + "address": "0x11e75a8671a6810170a4557cEe844F5B1F47CaB1", + "txHash": "0xd2aa0eca6464f09a2ea62d22aea7d49d5476842e384490efcc359ee32d77e25a", + "kind": "transparent" + }, + { + "address": "0x8663AB3894dd30B032C9312cD31a074234CbEfE3", + "txHash": "0x22f1251d098df46d2a20a51ca098d59edc9ec2aedcecd155b7e3d377f0994608", + "kind": "transparent" + }, + { + "address": "0x162443Cfabc9d2244974f3c144c974335030f58a", + "txHash": "0xecbadaedd0df90faa305c41bcdba16e3fa39f54e04c8d573ddb8b3d733bef512", + "kind": "transparent" + }, + { + "address": "0xCf3D5171661528F65E94B1214adB0D05781a84b6", + "txHash": "0x3bbbf52e1c92a7c5adfff735bb81b6fa0c0d9621264fadfb154890833f357815", + "kind": "transparent" + } + ], + "impls": { + "a6dc2772c973a2290112525d2e08835b68e19befa52ad848b68a24fb520cd855": { + "address": "0x33Cdce4345E5eF7fe5A6C5F144f1ea894b6b1F48", + "txHash": "0x2744242ace997d28d4d0c5d1cd98d31c7725bca7241a55564878838909d6b39f", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_balances", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:42" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "103", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "_name", + "offset": 0, + "slot": "104", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:46" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "105", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:47" + }, + { + "label": "__gap", + "offset": 0, + "slot": "106", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:376" + }, + { + "label": "vault", + "offset": 0, + "slot": "151", + "type": "t_contract(IInceptionVault_EL)19031", + "contract": "InceptionToken", + "src": "contracts/vaults/tokens/InceptionToken.sol:19" + }, + { + "label": "_paused", + "offset": 20, + "slot": "151", + "type": "t_bool", + "contract": "InceptionToken", + "src": "contracts/vaults/tokens/InceptionToken.sol:21" + }, + { + "label": "rebalancer", + "offset": 0, + "slot": "152", + "type": "t_address", + "contract": "InceptionToken", + "src": "contracts/vaults/tokens/InceptionToken.sol:23" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IInceptionVault_EL)19031": { + "label": "contract IInceptionVault_EL", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "8816a9090bfb233ffb3ddd3d2b815b5c0d1f31502be8778c9d4c5a61dd85f40a": { + "address": "0x31d91472C3b1Fd60Cab3E5585CD36e9aF58245a8", + "txHash": "0x7df3d7a723bf461644fb363ff9f1b7e4429e81648945fe84b1d5e3732fb2b98d", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "endpoint", + "offset": 0, + "slot": "0", + "type": "t_contract(ILayerZeroEndpointV2)677", + "contract": "OAppCoreUpgradeable", + "src": "contracts/bridge-lz/LayerZero/OAppCoreUpgradeable.sol:14" + }, + { + "label": "peers", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_uint32,t_bytes32)", + "contract": "OAppCoreUpgradeable", + "src": "contracts/bridge-lz/LayerZero/OAppCoreUpgradeable.sol:17" + }, + { + "label": "eidToChainId", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint32,t_uint256)", + "contract": "AbstractLZCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractLZCrossChainAdapter.sol:28" + }, + { + "label": "chainIdToEid", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_uint256,t_uint32)", + "contract": "AbstractLZCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractLZCrossChainAdapter.sol:29" + }, + { + "label": "targetReceiver", + "offset": 0, + "slot": "4", + "type": "t_address", + "contract": "AbstractCrossChainAdapter", + "src": "contracts/bridge-lz/abstract/AbstractCrossChainAdapter.sol:21" + }, + { + "label": "ferry", + "offset": 0, + "slot": "5", + "type": "t_contract(IFraxFerry)8572", + "contract": "AbstractFraxFerryERC20Adapter", + "src": "contracts/bridge-lz/abstract/AbstractFraxFerryERC20Adapter.sol:20" + }, + { + "label": "token", + "offset": 0, + "slot": "6", + "type": "t_contract(IERC20)3714", + "contract": "AbstractFraxFerryERC20Adapter", + "src": "contracts/bridge-lz/abstract/AbstractFraxFerryERC20Adapter.sol:21" + }, + { + "label": "erc20DestinationChain", + "offset": 0, + "slot": "7", + "type": "t_address", + "contract": "AbstractFraxFerryERC20Adapter", + "src": "contracts/bridge-lz/abstract/AbstractFraxFerryERC20Adapter.sol:22" + }, + { + "label": "_initialized", + "offset": 20, + "slot": "7", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 21, + "slot": "7", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "8", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "58", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "59", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_pendingOwner", + "offset": 0, + "slot": "108", + "type": "t_address", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "109", + "type": "t_array(t_uint256)49_storage", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:70" + }, + { + "label": "_l1ChainId", + "offset": 0, + "slot": "158", + "type": "t_uint32", + "contract": "FraxFerryLZCrossChainAdapterL2", + "src": "contracts/bridge-lz/FerryAdapter/FraxFerryLZCrossChainAdapterL2.sol:30" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IERC20)3714": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IFraxFerry)8572": { + "label": "contract IFraxFerry", + "numberOfBytes": "20" + }, + "t_contract(ILayerZeroEndpointV2)677": { + "label": "contract ILayerZeroEndpointV2", + "numberOfBytes": "20" + }, + "t_mapping(t_uint256,t_uint32)": { + "label": "mapping(uint256 => uint32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_bytes32)": { + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_uint256)": { + "label": "mapping(uint32 => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "2a7695d9a2a8c6a958892fa6e2c0ed9ad126bc9eb23ad03e17d0705d3d486db0": { + "address": "0x8d8eE4053d3D540FF4129b338668cE81c849105F", + "txHash": "0x30070a050ce73e5f9486201da1ae7ef5e92908c76d43076b14a36c281e53384a", + "layout": { + "solcVersion": "0.8.27", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_paused", + "offset": 0, + "slot": "51", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "101", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_pendingOwner", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:70" + }, + { + "label": "_asset", + "offset": 0, + "slot": "251", + "type": "t_contract(IERC20)8697", + "contract": "InceptionERC20OmniAssetsHandler", + "src": "contracts/vaults/assets-handler/InceptionERC20OmniAssetsHandler.sol:24" + }, + { + "label": "__reserver", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)49_storage", + "contract": "InceptionERC20OmniAssetsHandler", + "src": "contracts/vaults/assets-handler/InceptionERC20OmniAssetsHandler.sol:26" + }, + { + "label": "inceptionToken", + "offset": 0, + "slot": "301", + "type": "t_contract(IInceptionToken)18524", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:24" + }, + { + "label": "minAmount", + "offset": 0, + "slot": "302", + "type": "t_uint256", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:27" + }, + { + "label": "name", + "offset": 0, + "slot": "303", + "type": "t_string_storage", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:30" + }, + { + "label": "operator", + "offset": 0, + "slot": "304", + "type": "t_address", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:32" + }, + { + "label": "ratioFeed", + "offset": 0, + "slot": "305", + "type": "t_contract(IInceptionRatioFeed)18487", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:34" + }, + { + "label": "crossChainAdapterERC20", + "offset": 0, + "slot": "306", + "type": "t_contract(IERC20CrossChainBridge)17570", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:36" + }, + { + "label": "depositBonusAmount", + "offset": 0, + "slot": "307", + "type": "t_uint256", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:45" + }, + { + "label": "targetCapacity", + "offset": 0, + "slot": "308", + "type": "t_uint256", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:46" + }, + { + "label": "treasuryAddress", + "offset": 0, + "slot": "309", + "type": "t_address", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:48" + }, + { + "label": "protocolFee", + "offset": 20, + "slot": "309", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:49" + }, + { + "label": "maxBonusRate", + "offset": 0, + "slot": "310", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:52" + }, + { + "label": "optimalBonusRate", + "offset": 8, + "slot": "310", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:53" + }, + { + "label": "depositUtilizationKink", + "offset": 16, + "slot": "310", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:54" + }, + { + "label": "maxFlashFeeRate", + "offset": 24, + "slot": "310", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:57" + }, + { + "label": "optimalWithdrawalRate", + "offset": 0, + "slot": "311", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:58" + }, + { + "label": "withdrawUtilizationKink", + "offset": 8, + "slot": "311", + "type": "t_uint64", + "contract": "InceptionERC20OmniVault", + "src": "contracts/vaults/vaults/InceptionERC20OmniVault.sol:59" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IERC20)8697": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IERC20CrossChainBridge)17570": { + "label": "contract IERC20CrossChainBridge", + "numberOfBytes": "20" + }, + "t_contract(IInceptionRatioFeed)18487": { + "label": "contract IInceptionRatioFeed", + "numberOfBytes": "20" + }, + "t_contract(IInceptionToken)18524": { + "label": "contract IInceptionToken", + "numberOfBytes": "20" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + } + } +} diff --git a/projects/omnichain-deployer/safe-batch/Repair LZ config_mainnet.json b/projects/omnichain-deployer/safe-batch/Repair LZ config_mainnet.json new file mode 100644 index 00000000..6da279cc --- /dev/null +++ b/projects/omnichain-deployer/safe-batch/Repair LZ config_mainnet.json @@ -0,0 +1 @@ +{"version":"1.0","chainId":"1","createdAt":1740479057283,"meta":{"name":"Repair LZ config_mainnet","description":"Repair LZ config that was erased by setting receive lib","txBuilderVersion":"1.11.1","createdFromSafeAddress":"","createdFromOwnerAddress":"","checksum":""},"transactions":[{"to":{"target":"0x53207e057e8cc72312f6981a889fc286fafa59dc","interface":{"fragments":[{"type":"error","inputs":[],"name":"ArraysLengthsMismatch"},{"type":"error","inputs":[{"name":"chainId","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"ChainIdNotFound"},{"type":"error","inputs":[],"name":"InvalidDelegate"},{"type":"error","inputs":[],"name":"InvalidEndpointCall"},{"type":"error","inputs":[{"name":"optionType","type":"uint16","baseType":"uint16","components":null,"arrayLength":null,"arrayChildren":null}],"name":"InvalidOptionType"},{"type":"error","inputs":[],"name":"LzTokenUnavailable"},{"type":"error","inputs":[{"name":"chainId","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"NoDestEidFoundForChainId"},{"type":"error","inputs":[{"name":"eid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"NoPeer"},{"type":"error","inputs":[],"name":"NotAllowedInThisAdapterType"},{"type":"error","inputs":[{"name":"msgValue","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"NotEnoughNative"},{"type":"error","inputs":[{"name":"caller","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"name":"NotTargetReceiver"},{"type":"error","inputs":[{"name":"addr","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"name":"OnlyEndpoint"},{"type":"error","inputs":[{"name":"eid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"sender","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"OnlyPeer"},{"type":"error","inputs":[],"name":"OptionsTooShort"},{"type":"error","inputs":[],"name":"SettingZeroAddress"},{"type":"error","inputs":[],"name":"TargetReceiverNotSet"},{"type":"error","inputs":[],"name":"TransferToTargetReceiverFailed"},{"type":"event","inputs":[{"name":"_chainId","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"ChainIdAdded","anonymous":false},{"type":"event","inputs":[{"name":"chainId","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"amount","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"CrossChainEthDeposit","anonymous":false},{"type":"event","inputs":[{"name":"chainId","type":"uint256","baseType":"uint256","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"timestamp","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"balance","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"totalSupply","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"CrossChainInfoReceived","anonymous":false},{"type":"event","inputs":[{"name":"chainId","type":"uint256","baseType":"uint256","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"value","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"data","type":"bytes","baseType":"bytes","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"CrossChainMessageReceived","anonymous":false},{"type":"event","inputs":[{"name":"chainId","type":"uint256","baseType":"uint256","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"value","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"data","type":"bytes","baseType":"bytes","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"fee","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"CrossChainMessageSent","anonymous":false},{"type":"event","inputs":[{"name":"version","type":"uint8","baseType":"uint8","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"Initialized","anonymous":false},{"type":"event","inputs":[{"name":"previousOwner","type":"address","baseType":"address","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"newOwner","type":"address","baseType":"address","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"OwnershipTransferStarted","anonymous":false},{"type":"event","inputs":[{"name":"previousOwner","type":"address","baseType":"address","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"newOwner","type":"address","baseType":"address","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"OwnershipTransferred","anonymous":false},{"type":"event","inputs":[{"name":"eid","type":"uint32","baseType":"uint32","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"peer","type":"bytes32","baseType":"bytes32","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"PeerSet","anonymous":false},{"type":"event","inputs":[{"name":"caller","type":"address","baseType":"address","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"amount","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"ReceiveTriggered","anonymous":false},{"type":"event","inputs":[{"name":"amount","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"RecoverFundsInitiated","anonymous":false},{"type":"event","inputs":[{"name":"prevTargetReceiver","type":"address","baseType":"address","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"newTargetReceiver","type":"address","baseType":"address","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"TargetReceiverChanged","anonymous":false},{"type":"function","inputs":[],"name":"acceptOwnership","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[{"name":"origin","type":"tuple","baseType":"tuple","components":[{"name":"srcEid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"sender","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"nonce","type":"uint64","baseType":"uint64","components":null,"arrayLength":null,"arrayChildren":null}],"arrayLength":null,"arrayChildren":null}],"name":"allowInitializePath","constant":true,"outputs":[{"name":"","type":"bool","baseType":"bool","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"chainIdToEid","constant":true,"outputs":[{"name":"","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_gas","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_value","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"createLzReceiveOption","constant":true,"outputs":[{"name":"","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"pure","payable":false,"gas":null},{"type":"function","inputs":[{"name":"","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"eidToChainId","constant":true,"outputs":[{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[],"name":"endpoint","constant":true,"outputs":[{"name":"","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_eid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"getChainIdFromEid","constant":true,"outputs":[{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_chainId","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"getEidFromChainId","constant":true,"outputs":[{"name":"","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_options","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null}],"name":"getValueFromOpts","constant":true,"outputs":[{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"pure","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_endpoint","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_delegate","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_eIds","type":"uint32[]","baseType":"array","components":null,"arrayLength":-1,"arrayChildren":{"name":"","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}},{"name":"_chainIds","type":"uint256[]","baseType":"array","components":null,"arrayLength":-1,"arrayChildren":{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}}],"name":"initialize","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[{"name":"","type":"tuple","baseType":"tuple","components":[{"name":"srcEid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"sender","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"nonce","type":"uint64","baseType":"uint64","components":null,"arrayLength":null,"arrayChildren":null}],"arrayLength":null,"arrayChildren":null},{"name":"","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_sender","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"name":"isComposeMsgSender","constant":true,"outputs":[{"name":"","type":"bool","baseType":"bool","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_origin","type":"tuple","baseType":"tuple","components":[{"name":"srcEid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"sender","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"nonce","type":"uint64","baseType":"uint64","components":null,"arrayLength":null,"arrayChildren":null}],"arrayLength":null,"arrayChildren":null},{"name":"_guid","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_message","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_executor","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_extraData","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null}],"name":"lzReceive","constant":false,"outputs":[],"stateMutability":"payable","payable":true,"gas":null},{"type":"function","inputs":[{"name":"","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"nextNonce","constant":true,"outputs":[{"name":"nonce","type":"uint64","baseType":"uint64","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[],"name":"oAppVersion","constant":true,"outputs":[{"name":"senderVersion","type":"uint64","baseType":"uint64","components":null,"arrayLength":null,"arrayChildren":null},{"name":"receiverVersion","type":"uint64","baseType":"uint64","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"pure","payable":false,"gas":null},{"type":"function","inputs":[],"name":"owner","constant":true,"outputs":[{"name":"","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"eid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"peers","constant":true,"outputs":[{"name":"peer","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[],"name":"pendingOwner","constant":true,"outputs":[{"name":"","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_chainId","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_options","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null}],"name":"quoteSendEth","constant":true,"outputs":[{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[],"name":"recoverFunds","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[],"name":"renounceOwnership","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_chainId","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_options","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null}],"name":"sendEthCrossChain","constant":false,"outputs":[{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"payable","payable":true,"gas":null},{"type":"function","inputs":[{"name":"_eid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_chainId","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"setChainIdFromEid","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_eid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_peer","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"setPeer","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_newTargetReceiver","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"name":"setTargetReceiver","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[],"name":"targetReceiver","constant":true,"outputs":[{"name":"","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"newOwner","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"name":"transferOwnership","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"fallback","inputs":[],"payable":true}],"deploy":{"type":"constructor","inputs":[],"payable":false,"gas":null},"fallback":null,"receive":true},"runner":"","filters":{}},"value":"0","data":null,"contractMethod":{"type":"function","name":"setChainIdFromEid","constant":false,"payable":false,"inputs":[{"type":"uint32","name":"_eid"},{"type":"uint256","name":"_chainId"}],"outputs":[]},"contractInputsValues":{"_eid":"30255","_chainId":"252"}},{"to":{"target":"0x53207e057e8cc72312f6981a889fc286fafa59dc","interface":{"fragments":[{"type":"error","inputs":[],"name":"ArraysLengthsMismatch"},{"type":"error","inputs":[{"name":"chainId","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"ChainIdNotFound"},{"type":"error","inputs":[],"name":"InvalidDelegate"},{"type":"error","inputs":[],"name":"InvalidEndpointCall"},{"type":"error","inputs":[{"name":"optionType","type":"uint16","baseType":"uint16","components":null,"arrayLength":null,"arrayChildren":null}],"name":"InvalidOptionType"},{"type":"error","inputs":[],"name":"LzTokenUnavailable"},{"type":"error","inputs":[{"name":"chainId","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"NoDestEidFoundForChainId"},{"type":"error","inputs":[{"name":"eid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"NoPeer"},{"type":"error","inputs":[],"name":"NotAllowedInThisAdapterType"},{"type":"error","inputs":[{"name":"msgValue","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"NotEnoughNative"},{"type":"error","inputs":[{"name":"caller","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"name":"NotTargetReceiver"},{"type":"error","inputs":[{"name":"addr","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"name":"OnlyEndpoint"},{"type":"error","inputs":[{"name":"eid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"sender","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"OnlyPeer"},{"type":"error","inputs":[],"name":"OptionsTooShort"},{"type":"error","inputs":[],"name":"SettingZeroAddress"},{"type":"error","inputs":[],"name":"TargetReceiverNotSet"},{"type":"error","inputs":[],"name":"TransferToTargetReceiverFailed"},{"type":"event","inputs":[{"name":"_chainId","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"ChainIdAdded","anonymous":false},{"type":"event","inputs":[{"name":"chainId","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"amount","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"CrossChainEthDeposit","anonymous":false},{"type":"event","inputs":[{"name":"chainId","type":"uint256","baseType":"uint256","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"timestamp","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"balance","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"totalSupply","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"CrossChainInfoReceived","anonymous":false},{"type":"event","inputs":[{"name":"chainId","type":"uint256","baseType":"uint256","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"value","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"data","type":"bytes","baseType":"bytes","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"CrossChainMessageReceived","anonymous":false},{"type":"event","inputs":[{"name":"chainId","type":"uint256","baseType":"uint256","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"value","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"data","type":"bytes","baseType":"bytes","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"fee","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"CrossChainMessageSent","anonymous":false},{"type":"event","inputs":[{"name":"version","type":"uint8","baseType":"uint8","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"Initialized","anonymous":false},{"type":"event","inputs":[{"name":"previousOwner","type":"address","baseType":"address","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"newOwner","type":"address","baseType":"address","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"OwnershipTransferStarted","anonymous":false},{"type":"event","inputs":[{"name":"previousOwner","type":"address","baseType":"address","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"newOwner","type":"address","baseType":"address","indexed":true,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"OwnershipTransferred","anonymous":false},{"type":"event","inputs":[{"name":"eid","type":"uint32","baseType":"uint32","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"peer","type":"bytes32","baseType":"bytes32","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"PeerSet","anonymous":false},{"type":"event","inputs":[{"name":"caller","type":"address","baseType":"address","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"amount","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"ReceiveTriggered","anonymous":false},{"type":"event","inputs":[{"name":"amount","type":"uint256","baseType":"uint256","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"RecoverFundsInitiated","anonymous":false},{"type":"event","inputs":[{"name":"prevTargetReceiver","type":"address","baseType":"address","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null},{"name":"newTargetReceiver","type":"address","baseType":"address","indexed":false,"components":null,"arrayLength":null,"arrayChildren":null}],"name":"TargetReceiverChanged","anonymous":false},{"type":"function","inputs":[],"name":"acceptOwnership","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[{"name":"origin","type":"tuple","baseType":"tuple","components":[{"name":"srcEid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"sender","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"nonce","type":"uint64","baseType":"uint64","components":null,"arrayLength":null,"arrayChildren":null}],"arrayLength":null,"arrayChildren":null}],"name":"allowInitializePath","constant":true,"outputs":[{"name":"","type":"bool","baseType":"bool","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"chainIdToEid","constant":true,"outputs":[{"name":"","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_gas","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_value","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"createLzReceiveOption","constant":true,"outputs":[{"name":"","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"pure","payable":false,"gas":null},{"type":"function","inputs":[{"name":"","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"eidToChainId","constant":true,"outputs":[{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[],"name":"endpoint","constant":true,"outputs":[{"name":"","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_eid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"getChainIdFromEid","constant":true,"outputs":[{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_chainId","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"getEidFromChainId","constant":true,"outputs":[{"name":"","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_options","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null}],"name":"getValueFromOpts","constant":true,"outputs":[{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"pure","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_endpoint","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_delegate","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_eIds","type":"uint32[]","baseType":"array","components":null,"arrayLength":-1,"arrayChildren":{"name":"","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}},{"name":"_chainIds","type":"uint256[]","baseType":"array","components":null,"arrayLength":-1,"arrayChildren":{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}}],"name":"initialize","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[{"name":"","type":"tuple","baseType":"tuple","components":[{"name":"srcEid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"sender","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"nonce","type":"uint64","baseType":"uint64","components":null,"arrayLength":null,"arrayChildren":null}],"arrayLength":null,"arrayChildren":null},{"name":"","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_sender","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"name":"isComposeMsgSender","constant":true,"outputs":[{"name":"","type":"bool","baseType":"bool","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_origin","type":"tuple","baseType":"tuple","components":[{"name":"srcEid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"sender","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"nonce","type":"uint64","baseType":"uint64","components":null,"arrayLength":null,"arrayChildren":null}],"arrayLength":null,"arrayChildren":null},{"name":"_guid","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_message","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_executor","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_extraData","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null}],"name":"lzReceive","constant":false,"outputs":[],"stateMutability":"payable","payable":true,"gas":null},{"type":"function","inputs":[{"name":"","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"nextNonce","constant":true,"outputs":[{"name":"nonce","type":"uint64","baseType":"uint64","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[],"name":"oAppVersion","constant":true,"outputs":[{"name":"senderVersion","type":"uint64","baseType":"uint64","components":null,"arrayLength":null,"arrayChildren":null},{"name":"receiverVersion","type":"uint64","baseType":"uint64","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"pure","payable":false,"gas":null},{"type":"function","inputs":[],"name":"owner","constant":true,"outputs":[{"name":"","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"eid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"peers","constant":true,"outputs":[{"name":"peer","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[],"name":"pendingOwner","constant":true,"outputs":[{"name":"","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_chainId","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_options","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null}],"name":"quoteSendEth","constant":true,"outputs":[{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[],"name":"recoverFunds","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[],"name":"renounceOwnership","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_chainId","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_options","type":"bytes","baseType":"bytes","components":null,"arrayLength":null,"arrayChildren":null}],"name":"sendEthCrossChain","constant":false,"outputs":[{"name":"","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"payable","payable":true,"gas":null},{"type":"function","inputs":[{"name":"_eid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_chainId","type":"uint256","baseType":"uint256","components":null,"arrayLength":null,"arrayChildren":null}],"name":"setChainIdFromEid","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_eid","type":"uint32","baseType":"uint32","components":null,"arrayLength":null,"arrayChildren":null},{"name":"_peer","type":"bytes32","baseType":"bytes32","components":null,"arrayLength":null,"arrayChildren":null}],"name":"setPeer","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[{"name":"_newTargetReceiver","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"name":"setTargetReceiver","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"function","inputs":[],"name":"targetReceiver","constant":true,"outputs":[{"name":"","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"stateMutability":"view","payable":false,"gas":null},{"type":"function","inputs":[{"name":"newOwner","type":"address","baseType":"address","components":null,"arrayLength":null,"arrayChildren":null}],"name":"transferOwnership","constant":false,"outputs":[],"stateMutability":"nonpayable","payable":false,"gas":null},{"type":"fallback","inputs":[],"payable":true}],"deploy":{"type":"constructor","inputs":[],"payable":false,"gas":null},"fallback":null,"receive":true},"runner":"","filters":{}},"value":"0","data":null,"contractMethod":{"type":"function","name":"setPeer","constant":false,"payable":false,"inputs":[{"type":"uint32","name":"_eid"},{"type":"bytes32","name":"_peer"}],"outputs":[]},"contractInputsValues":{"_eid":"30255","_peer":"0x0000000000000000000000007EEd6897D9F032AbccffD2f6AAFCfb59b24BD58E"}}]} \ No newline at end of file diff --git a/projects/omnichain-deployer/scripts/fix_lz_config_l1.js b/projects/omnichain-deployer/scripts/fix_lz_config_l1.js deleted file mode 100644 index 393ce376..00000000 --- a/projects/omnichain-deployer/scripts/fix_lz_config_l1.js +++ /dev/null @@ -1,84 +0,0 @@ -const { ethers } = require('hardhat'); - - -// Send the transaction -async function sendTransaction() { - try { - // Addresses - const oappAddress = '0x53207e057E8cc72312F6981a889FC286fAFa59Dc'; // Replace with your OApp address - const recvLibAddress = '0xc02Ab410f0734EFa3F14628780e6e695156024C2'; // Replace with your send message library address - - // Configuration - const remoteEid = 30255; // Example EID, replace with the actual value - const ulnConfig = { - confirmations: 20, // Example value, replace with actual - requiredDVNCount: 2, // Example value, replace with actual - optionalDVNCount: 0, // Example value, replace with actual - optionalDVNThreshold: 0, // Example value, replace with actual - requiredDVNs: ['0x589dedbd617e0cbcb916a9223f4d1300c294236b', '0xa59ba433ac34d2927232918ef5b2eaafcf130ba5'], // Replace with actual addresses, must be in alphabetical order - optionalDVNs: [], // Replace with actual addresses, must be in alphabetical order - }; - /* - const executorConfig = { - maxMessageSize: 10000, // Example value, replace with actual - executorAddress: '0xExecutorAddress', // Replace with the actual executor address - }; - */ - // Provider and Signer - //const provider = new ethers.providers.JsonRpcProvider(YOUR_RPC_URL); - const [signer] = await ethers.getSigners(); - - // ABI and Contract - const endpointAbi = [ - 'function setConfig(address oappAddress, address sendLibAddress, tuple(uint32 eid, uint32 configType, bytes config)[] setConfigParams) external', - ]; - const endpointContract = new ethers.Contract("0x1a44076050125825900e736c501f859c50fE728c", endpointAbi, signer); - - // Encode UlnConfig using defaultAbiCoder - const configTypeUlnStruct = - 'tuple(uint64 confirmations, uint8 requiredDVNCount, uint8 optionalDVNCount, uint8 optionalDVNThreshold, address[] requiredDVNs, address[] optionalDVNs)'; - const encodedUlnConfig = ethers.AbiCoder.defaultAbiCoder().encode([configTypeUlnStruct], [ulnConfig]); - - // Encode ExecutorConfig using defaultAbiCoder - /* - const configTypeExecutorStruct = 'tuple(uint32 maxMessageSize, address executorAddress)'; - const encodedExecutorConfig = ethers.utils.defaultAbiCoder.encode( - [configTypeExecutorStruct], - [executorConfig], - ); - */ - // Define the SetConfigParam structs - const setConfigParamUln = { - eid: remoteEid, - configType: 2, // ULN_CONFIG_TYPE - config: encodedUlnConfig, - }; - /* - const setConfigParamExecutor = { - eid: remoteEid, - configType: 1, // EXECUTOR_CONFIG_TYPE - config: encodedExecutorConfig, - }; - */ - - - - - - - - const tx = await endpointContract.setConfig( - oappAddress, - recvLibAddress, - [setConfigParamUln] //, setConfigParamExecutor], // Array of SetConfigParam structs - ); - - console.log('Transaction sent:', tx.hash); - const receipt = await tx.wait(); - console.log('Transaction confirmed:', receipt.status); - } catch (error) { - console.error('Transaction failed:', error); - } -} - -sendTransaction(); \ No newline at end of file diff --git a/projects/omnichain-deployer/scripts/fix_lz_config_l2.js b/projects/omnichain-deployer/scripts/fix_lz_config_l2.js deleted file mode 100644 index 58633d38..00000000 --- a/projects/omnichain-deployer/scripts/fix_lz_config_l2.js +++ /dev/null @@ -1,84 +0,0 @@ -const { ethers } = require('hardhat'); - - -// Send the transaction -async function sendTransaction() { - try { - // Addresses - const oappAddress = '0x7EEd6897D9F032AbccffD2f6AAFCfb59b24BD58E'; // Replace with your OApp address - const sendLibAddress = '0x377530cdA84DFb2673bF4d145DCF0C4D7fdcB5b6'; // Replace with your send message library address - - // Configuration - const remoteEid = 30101; // Example EID, replace with the actual value - const ulnConfig = { - confirmations: 20, // Example value, replace with actual - requiredDVNCount: 2, // Example value, replace with actual - optionalDVNCount: 0, // Example value, replace with actual - optionalDVNThreshold: 0, // Example value, replace with actual - requiredDVNs: ['0xa7b5189bca84cd304d8553977c7c614329750d99', '0xcce466a522984415bc91338c232d98869193d46e'], // Replace with actual addresses, must be in alphabetical order - optionalDVNs: [], // Replace with actual addresses, must be in alphabetical order - }; - /* - const executorConfig = { - maxMessageSize: 10000, // Example value, replace with actual - executorAddress: '0xExecutorAddress', // Replace with the actual executor address - }; - */ - // Provider and Signer - //const provider = new ethers.providers.JsonRpcProvider(YOUR_RPC_URL); - const [signer] = await ethers.getSigners(); - - // ABI and Contract - const endpointAbi = [ - 'function setConfig(address oappAddress, address sendLibAddress, tuple(uint32 eid, uint32 configType, bytes config)[] setConfigParams) external', - ]; - const endpointContract = new ethers.Contract("0x1a44076050125825900e736c501f859c50fE728c", endpointAbi, signer); - - // Encode UlnConfig using defaultAbiCoder - const configTypeUlnStruct = - 'tuple(uint64 confirmations, uint8 requiredDVNCount, uint8 optionalDVNCount, uint8 optionalDVNThreshold, address[] requiredDVNs, address[] optionalDVNs)'; - const encodedUlnConfig = ethers.AbiCoder.defaultAbiCoder().encode([configTypeUlnStruct], [ulnConfig]); - - // Encode ExecutorConfig using defaultAbiCoder - /* - const configTypeExecutorStruct = 'tuple(uint32 maxMessageSize, address executorAddress)'; - const encodedExecutorConfig = ethers.utils.defaultAbiCoder.encode( - [configTypeExecutorStruct], - [executorConfig], - ); - */ - // Define the SetConfigParam structs - const setConfigParamUln = { - eid: remoteEid, - configType: 2, // ULN_CONFIG_TYPE - config: encodedUlnConfig, - }; - /* - const setConfigParamExecutor = { - eid: remoteEid, - configType: 1, // EXECUTOR_CONFIG_TYPE - config: encodedExecutorConfig, - }; - */ - - - - - - - - const tx = await endpointContract.setConfig( - oappAddress, - sendLibAddress, - [setConfigParamUln] //, setConfigParamExecutor], // Array of SetConfigParam structs - ); - - console.log('Transaction sent:', tx.hash); - const receipt = await tx.wait(); - console.log('Transaction confirmed:', receipt.status); - } catch (error) { - console.error('Transaction failed:', error); - } -} - -sendTransaction(); \ No newline at end of file diff --git a/projects/omnichain-deployer/scripts/set_l1_peer_data.js b/projects/omnichain-deployer/scripts/set_l1_peer_data.js deleted file mode 100644 index 78f36e42..00000000 --- a/projects/omnichain-deployer/scripts/set_l1_peer_data.js +++ /dev/null @@ -1,43 +0,0 @@ -const { ethers, upgrades } = require("hardhat"); -const { BatchBuilder } = require("./gnosis-safe/gnosis-safe") - -const adapterAddr = "0x53207e057e8cc72312f6981a889fc286fafa59dc" // L1 adapter -const adapterL2 = "0x7EEd6897D9F032AbccffD2f6AAFCfb59b24BD58E" -const peerValue = "0x000000000000000000000000" + adapterL2.substring(2) - -async function main() { - // @openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable - const [deployer] = await ethers.getSigners(); - const provider = await deployer.provider.getNetwork(); - - const bb = new BatchBuilder("", `Repair LZ config`, "Repair LZ config that was erased by setting receive lib", provider) - - - let contract = await ethers.getContractAt("LZCrossChainAdapterL1", adapterAddr); - bb.add( - { - to: contract, - value: 0, - method: "setChainIdFromEid", - args: { _eid:"30255", _chainId:"252"} - }, - JSON.parse(await contract.interface.formatJson()) - ).add( - { - to: contract, - value: 0, - method: "setPeer", - args: {_eid:"30255", _peer:peerValue} - }, - JSON.parse(await contract.interface.formatJson()) - ).save(); - - //bb.save(); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/projects/omnichain-deployer/state.json.old b/projects/omnichain-deployer/state.json.old deleted file mode 100644 index 9811965b..00000000 --- a/projects/omnichain-deployer/state.json.old +++ /dev/null @@ -1 +0,0 @@ -{"chainIdL1":"17000","chainIdL2":"2522","eidL1":"40217","eidL2":"40255","tokenName":"Inception sfrxETH","tokenSymbol":"insfrxETH","vaultNameL2":"Inception_sfrxETH_Omnivault","ferryL2":"0x54102317E9AeAcbb1Eac32214d099D60d260E9a3","lzEndpointL2":"0x6EDCE65403992e310A62460808c4b910D972f10f","ratioFeedAddressL2":"0xD4D49e67710d3d466417b566b6c0a3Dd4e94e87a","inceptionLibAddress":"0x3022ad4552b5fb285F36C71Bdd1545c33a4937ca","strategyAddress":"0x865Ff05496eA73b0fA49fbBB97F2812776362c87","ratioFeedAddressL1":"0x90D5a4860e087462F8eE15B52D9b1914BdC977B5","underlyingAssetL1":"0x72DE502C4F68DCE383b075dA455ed45e15122a46","underlyingAssetL2":"0x72DE502C4F68DCE383b075dA455ed45e15122a46","iTokenAddressL1":"0x09908F11bcAF39C81631Efde9C0bEa9A575FD438","iVaultAddressL1":"0x7382C8aCD984f64730b93db26301d8eeC8e5b441","lockbox":"0x865Ff05496eA73b0fA49fbBB97F2812776362c87","crossChainL1":"0xA2c902810eAE3C24208580e043cA0de36Ae66c3E","rebalancer":"0x0A8c0FdC2b0d757228A52dCE08B219851baa8943","iTokenAddressL2":"0xcdC9a3345fE445ac027F2a1bE9dac69d6dFbA3DC","iVaultAddressL2":"0x11e75a8671a6810170a4557cEe844F5B1F47CaB1","crossChainL2":"0x54AcdCAdcE6468c1A128aAf7532a89156eE93AEe"} \ No newline at end of file

~gkA2f_ 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 z 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%0DYp-_HfpDV3 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%0D=&`rG^;d} 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