diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..21717d2
Binary files /dev/null and b/.DS_Store differ
diff --git a/endpoint/.env.example b/endpoint/.env.example
new file mode 100644
index 0000000..197ba1d
--- /dev/null
+++ b/endpoint/.env.example
@@ -0,0 +1,15 @@
+# .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-
+# / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \
+# `-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-'
+#
+# Example environment configuration
+#
+# .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-
+# / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \
+# `-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-'
+
+# By default, the examples support both mnemonic-based and private key-based authentication
+#
+# You don't need to set both of these values, just pick the one that you prefer and set that one
+MNEMONIC=
+PRIVATE_KEY=
\ No newline at end of file
diff --git a/endpoint/.eslintignore b/endpoint/.eslintignore
new file mode 100644
index 0000000..ee9f768
--- /dev/null
+++ b/endpoint/.eslintignore
@@ -0,0 +1,10 @@
+artifacts
+cache
+dist
+node_modules
+out
+*.log
+*.sol
+*.yaml
+*.lock
+package-lock.json
\ No newline at end of file
diff --git a/endpoint/.eslintrc.js b/endpoint/.eslintrc.js
new file mode 100644
index 0000000..f0ea891
--- /dev/null
+++ b/endpoint/.eslintrc.js
@@ -0,0 +1,10 @@
+require('@rushstack/eslint-patch/modern-module-resolution');
+
+module.exports = {
+ extends: ['@layerzerolabs/eslint-config-next/recommended'],
+ rules: {
+ // @layerzerolabs/eslint-config-next defines rules for turborepo-based projects
+ // that are not relevant for this particular project
+ 'turbo/no-undeclared-env-vars': 'off',
+ },
+};
diff --git a/endpoint/.gitignore b/endpoint/.gitignore
new file mode 100644
index 0000000..09d70f7
--- /dev/null
+++ b/endpoint/.gitignore
@@ -0,0 +1,23 @@
+node_modules
+.env
+coverage
+coverage.json
+typechain
+typechain-types
+
+# Hardhat files
+cache
+artifacts
+
+# LayerZero specific files
+.layerzero
+
+# foundry test compilation files
+out
+
+# pnpm
+pnpm-error.log
+
+# Editor and OS files
+.DS_Store
+.idea
diff --git a/endpoint/.nvmrc b/endpoint/.nvmrc
new file mode 100644
index 0000000..b714151
--- /dev/null
+++ b/endpoint/.nvmrc
@@ -0,0 +1 @@
+v18.18.0
\ No newline at end of file
diff --git a/endpoint/.prettierignore b/endpoint/.prettierignore
new file mode 100644
index 0000000..6e8232f
--- /dev/null
+++ b/endpoint/.prettierignore
@@ -0,0 +1,10 @@
+artifacts/
+cache/
+dist/
+node_modules/
+out/
+*.log
+*ignore
+*.yaml
+*.lock
+package-lock.json
\ No newline at end of file
diff --git a/endpoint/.prettierrc.js b/endpoint/.prettierrc.js
new file mode 100644
index 0000000..6f55b40
--- /dev/null
+++ b/endpoint/.prettierrc.js
@@ -0,0 +1,3 @@
+module.exports = {
+ ...require('@layerzerolabs/prettier-config-next'),
+};
diff --git a/endpoint/README.md b/endpoint/README.md
new file mode 100644
index 0000000..b4c2fc5
--- /dev/null
+++ b/endpoint/README.md
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+ 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/endpoint/contracts/LayerZeroV1/DefaultProxyAdmin.sol b/endpoint/contracts/LayerZeroV1/DefaultProxyAdmin.sol
new file mode 100644
index 0000000..161ed5a
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV1/DefaultProxyAdmin.sol
@@ -0,0 +1,84 @@
+// SPDX-License-Identifier: BUSL-1.1
+
+pragma solidity ^0.7.0;
+
+import "@openzeppelin/contracts/access/Ownable.sol";
+import "./TransparentUpgradeableProxy.sol";
+
+/**
+ * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an
+ * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.
+ */
+contract DefaultProxyAdmin is Ownable {
+ constructor(address initialOwner) {
+ transferOwnership(initialOwner);
+ }
+
+ /**
+ * @dev Returns the current implementation of `proxy`.
+ *
+ * Requirements:
+ *
+ * - This contract must be the admin of `proxy`.
+ */
+ function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {
+ // We need to manually run the static call since the getter cannot be flagged as view
+ // bytes4(keccak256("implementation()")) == 0x5c60da1b
+ (bool success, bytes memory returndata) = address(proxy).staticcall(hex"5c60da1b");
+ require(success);
+ return abi.decode(returndata, (address));
+ }
+
+ /**
+ * @dev Returns the current admin of `proxy`.
+ *
+ * Requirements:
+ *
+ * - This contract must be the admin of `proxy`.
+ */
+ function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {
+ // We need to manually run the static call since the getter cannot be flagged as view
+ // bytes4(keccak256("admin()")) == 0xf851a440
+ (bool success, bytes memory returndata) = address(proxy).staticcall(hex"f851a440");
+ require(success);
+ return abi.decode(returndata, (address));
+ }
+
+ /**
+ * @dev Changes the admin of `proxy` to `newAdmin`.
+ *
+ * Requirements:
+ *
+ * - This contract must be the current admin of `proxy`.
+ */
+ function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {
+ proxy.changeAdmin(newAdmin);
+ }
+
+ /**
+ * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.
+ *
+ * Requirements:
+ *
+ * - This contract must be the admin of `proxy`.
+ */
+ function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {
+ proxy.upgradeTo(implementation);
+ }
+
+ /**
+ * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See
+ * {TransparentUpgradeableProxy-upgradeToAndCall}.
+ *
+ * Requirements:
+ *
+ * - This contract must be the admin of `proxy`.
+ */
+ function upgradeAndCall(
+ TransparentUpgradeableProxy proxy,
+ address implementation,
+ bytes memory data
+ ) public payable virtual onlyOwner {
+ proxy.upgradeToAndCall{value: msg.value}(implementation, data);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV1/Endpoint.sol b/endpoint/contracts/LayerZeroV1/Endpoint.sol
new file mode 100644
index 0000000..2e824a8
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV1/Endpoint.sol
@@ -0,0 +1,382 @@
+// SPDX-License-Identifier: BUSL-1.1
+
+pragma solidity 0.7.6;
+
+import "./interfaces/ILayerZeroReceiver.sol";
+import "./interfaces/ILayerZeroEndpoint.sol";
+import "./interfaces/ILayerZeroMessagingLibrary.sol";
+
+import "@openzeppelin/contracts/access/Ownable.sol";
+
+contract Endpoint is Ownable, ILayerZeroEndpoint {
+ uint16 public immutable chainId;
+
+ // installed libraries and reserved versions
+ uint16 public constant BLOCK_VERSION = 65535;
+ uint16 public constant DEFAULT_VERSION = 0;
+ uint16 public latestVersion;
+ mapping(uint16 => ILayerZeroMessagingLibrary) public libraryLookup; // version -> ILayerZeroEndpointLibrary
+
+ // default send/receive libraries
+ uint16 public defaultSendVersion;
+ uint16 public defaultReceiveVersion;
+ ILayerZeroMessagingLibrary public defaultSendLibrary;
+ address public defaultReceiveLibraryAddress;
+
+ struct LibraryConfig {
+ uint16 sendVersion;
+ uint16 receiveVersion;
+ address receiveLibraryAddress;
+ ILayerZeroMessagingLibrary sendLibrary;
+ }
+
+ struct StoredPayload {
+ uint64 payloadLength;
+ address dstAddress;
+ bytes32 payloadHash;
+ }
+
+ // user app config = [uaAddress]
+ mapping(address => LibraryConfig) public uaConfigLookup;
+ // inboundNonce = [srcChainId][srcAddress].
+ mapping(uint16 => mapping(bytes => uint64)) public inboundNonce;
+ // outboundNonce = [dstChainId][srcAddress].
+ mapping(uint16 => mapping(address => uint64)) public outboundNonce;
+ // storedPayload = [srcChainId][srcAddress]
+ mapping(uint16 => mapping(bytes => StoredPayload)) public storedPayload;
+
+ // library versioning events
+ event NewLibraryVersionAdded(uint16 version);
+ event DefaultSendVersionSet(uint16 version);
+ event DefaultReceiveVersionSet(uint16 version);
+ event UaSendVersionSet(address ua, uint16 version);
+ event UaReceiveVersionSet(address ua, uint16 version);
+ event UaForceResumeReceive(uint16 chainId, bytes srcAddress);
+ // payload events
+ event PayloadCleared(uint16 srcChainId, bytes srcAddress, uint64 nonce, address dstAddress);
+ event PayloadStored(
+ uint16 srcChainId,
+ bytes srcAddress,
+ address dstAddress,
+ uint64 nonce,
+ bytes payload,
+ bytes reason
+ );
+
+ constructor(uint16 _chainId) {
+ chainId = _chainId;
+ }
+
+ //---------------------------------------------------------------------------
+ // send and receive nonreentrant lock
+ uint8 internal constant _NOT_ENTERED = 1;
+ uint8 internal constant _ENTERED = 2;
+ uint8 internal _send_entered_state = 1;
+ uint8 internal _receive_entered_state = 1;
+
+ modifier sendNonReentrant() {
+ require(_send_entered_state == _NOT_ENTERED, "LayerZero: no send reentrancy");
+ _send_entered_state = _ENTERED;
+ _;
+ _send_entered_state = _NOT_ENTERED;
+ }
+ modifier receiveNonReentrant() {
+ require(_receive_entered_state == _NOT_ENTERED, "LayerZero: no receive reentrancy");
+ _receive_entered_state = _ENTERED;
+ _;
+ _receive_entered_state = _NOT_ENTERED;
+ }
+
+ // BLOCK_VERSION is also a valid version
+ modifier validVersion(uint16 _version) {
+ require(_version <= latestVersion || _version == BLOCK_VERSION, "LayerZero: invalid messaging library version");
+ _;
+ }
+
+ //---------------------------------------------------------------------------
+ // User Application Calls - Endpoint Interface
+
+ function send(
+ uint16 _dstChainId,
+ bytes calldata _destination,
+ bytes calldata _payload,
+ address payable _refundAddress,
+ address _zroPaymentAddress,
+ bytes calldata _adapterParams
+ ) external payable override sendNonReentrant {
+ LibraryConfig storage uaConfig = uaConfigLookup[msg.sender];
+ uint64 nonce = ++outboundNonce[_dstChainId][msg.sender];
+ _getSendLibrary(uaConfig).send{value: msg.value}(
+ msg.sender,
+ nonce,
+ _dstChainId,
+ _destination,
+ _payload,
+ _refundAddress,
+ _zroPaymentAddress,
+ _adapterParams
+ );
+ }
+
+ //---------------------------------------------------------------------------
+ // authenticated Library (msg.sender) Calls to pass through Endpoint to UA (dstAddress)
+ function receivePayload(
+ uint16 _srcChainId,
+ bytes calldata _srcAddress,
+ address _dstAddress,
+ uint64 _nonce,
+ uint _gasLimit,
+ bytes calldata _payload
+ ) external override receiveNonReentrant {
+ // assert and increment the nonce. no message shuffling
+ require(_nonce == ++inboundNonce[_srcChainId][_srcAddress], "LayerZero: wrong nonce");
+
+ LibraryConfig storage uaConfig = uaConfigLookup[_dstAddress];
+
+ // authentication to prevent cross-version message validation
+ // protects against a malicious library from passing arbitrary data
+ if (uaConfig.receiveVersion == DEFAULT_VERSION) {
+ require(defaultReceiveLibraryAddress == msg.sender, "LayerZero: invalid default library");
+ } else {
+ require(uaConfig.receiveLibraryAddress == msg.sender, "LayerZero: invalid library");
+ }
+
+ // block if any message blocking
+ StoredPayload storage sp = storedPayload[_srcChainId][_srcAddress];
+ require(sp.payloadHash == bytes32(0), "LayerZero: in message blocking");
+
+ try ILayerZeroReceiver(_dstAddress).lzReceive{gas: _gasLimit}(_srcChainId, _srcAddress, _nonce, _payload) {
+ // success, do nothing, end of the message delivery
+ } catch (bytes memory reason) {
+ // revert nonce if any uncaught errors/exceptions if the ua chooses the blocking mode
+ storedPayload[_srcChainId][_srcAddress] = StoredPayload(
+ uint64(_payload.length),
+ _dstAddress,
+ keccak256(_payload)
+ );
+ emit PayloadStored(_srcChainId, _srcAddress, _dstAddress, _nonce, _payload, reason);
+ }
+ }
+
+ function retryPayload(
+ uint16 _srcChainId,
+ bytes calldata _srcAddress,
+ bytes calldata _payload
+ ) external override receiveNonReentrant {
+ StoredPayload storage sp = storedPayload[_srcChainId][_srcAddress];
+ require(sp.payloadHash != bytes32(0), "LayerZero: no stored payload");
+ require(
+ _payload.length == sp.payloadLength && keccak256(_payload) == sp.payloadHash,
+ "LayerZero: invalid payload"
+ );
+
+ address dstAddress = sp.dstAddress;
+ // empty the storedPayload
+ sp.payloadLength = 0;
+ sp.dstAddress = address(0);
+ sp.payloadHash = bytes32(0);
+
+ uint64 nonce = inboundNonce[_srcChainId][_srcAddress];
+
+ ILayerZeroReceiver(dstAddress).lzReceive(_srcChainId, _srcAddress, nonce, _payload);
+ emit PayloadCleared(_srcChainId, _srcAddress, nonce, dstAddress);
+ }
+
+ //---------------------------------------------------------------------------
+ // Owner Calls, only new library version upgrade (3 steps)
+
+ // note libraryLookup[0] = 0x0, no library implementation
+ // LIBRARY UPGRADE step 1: set _newLayerZeroLibraryAddress be the new version
+ function newVersion(address _newLayerZeroLibraryAddress) external onlyOwner {
+ require(_newLayerZeroLibraryAddress != address(0x0), "LayerZero: new version cannot be zero address");
+ require(latestVersion < 65535, "LayerZero: can not add new messaging library");
+ latestVersion++;
+ libraryLookup[latestVersion] = ILayerZeroMessagingLibrary(_newLayerZeroLibraryAddress);
+ emit NewLibraryVersionAdded(latestVersion);
+ }
+
+ // LIBRARY UPGRADE step 2: stop sending messages from the old version
+ function setDefaultSendVersion(
+ uint16 _newDefaultSendVersion
+ ) external onlyOwner validVersion(_newDefaultSendVersion) {
+ require(_newDefaultSendVersion != DEFAULT_VERSION, "LayerZero: default send version must > 0");
+ defaultSendVersion = _newDefaultSendVersion;
+ defaultSendLibrary = libraryLookup[defaultSendVersion];
+ emit DefaultSendVersionSet(_newDefaultSendVersion);
+ }
+
+ // LIBRARY UPGRADE step 3: stop receiving messages from the old version
+ function setDefaultReceiveVersion(
+ uint16 _newDefaultReceiveVersion
+ ) external onlyOwner validVersion(_newDefaultReceiveVersion) {
+ require(_newDefaultReceiveVersion != DEFAULT_VERSION, "LayerZero: default receive version must > 0");
+ defaultReceiveVersion = _newDefaultReceiveVersion;
+ defaultReceiveLibraryAddress = address(libraryLookup[defaultReceiveVersion]);
+ emit DefaultReceiveVersionSet(_newDefaultReceiveVersion);
+ }
+
+ //---------------------------------------------------------------------------
+ // User Application Calls - UA set/get Interface
+
+ function setConfig(
+ uint16 _version,
+ uint16 _chainId,
+ uint _configType,
+ bytes calldata _config
+ ) external override validVersion(_version) {
+ if (_version == DEFAULT_VERSION) {
+ require(
+ defaultSendVersion == defaultReceiveVersion,
+ "LayerZero: can not set Config during DEFAULT migration"
+ );
+ _version = defaultSendVersion;
+ }
+ require(_version != BLOCK_VERSION, "LayerZero: can not set config for BLOCK_VERSION");
+ libraryLookup[_version].setConfig(_chainId, msg.sender, _configType, _config);
+ }
+
+ // Migration step 1: set the send version
+ // Define what library the UA points too
+ function setSendVersion(uint16 _newVersion) external override validVersion(_newVersion) {
+ // write into config
+ LibraryConfig storage uaConfig = uaConfigLookup[msg.sender];
+ uaConfig.sendVersion = _newVersion;
+ // the libraryLookup[BLOCK_VERSION || DEFAULT_VERSION] = 0x0
+ uaConfig.sendLibrary = libraryLookup[_newVersion];
+ emit UaSendVersionSet(msg.sender, _newVersion);
+ }
+
+ // Migration step 2: set the receive version
+ // after all messages sent from the old version are received
+ // the UA can now safely switch to the new receive version
+ // it is the UA's responsibility make sure all messages from the old version are processed
+ function setReceiveVersion(uint16 _newVersion) external override validVersion(_newVersion) {
+ // write into config
+ LibraryConfig storage uaConfig = uaConfigLookup[msg.sender];
+ uaConfig.receiveVersion = _newVersion;
+ // the libraryLookup[BLOCK_VERSION || DEFAULT_VERSION] = 0x0
+ uaConfig.receiveLibraryAddress = address(libraryLookup[_newVersion]);
+ emit UaReceiveVersionSet(msg.sender, _newVersion);
+ }
+
+ function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external override {
+ StoredPayload storage sp = storedPayload[_srcChainId][_srcAddress];
+ // revert if no messages are cached. safeguard malicious UA behaviour
+ require(sp.payloadHash != bytes32(0), "LayerZero: no stored payload");
+ require(sp.dstAddress == msg.sender, "LayerZero: invalid caller");
+
+ // empty the storedPayload
+ sp.payloadLength = 0;
+ sp.dstAddress = address(0);
+ sp.payloadHash = bytes32(0);
+
+ // emit the event with the new nonce
+ emit UaForceResumeReceive(_srcChainId, _srcAddress);
+ }
+
+ //---------------------------------------------------------------------------
+ // view helper function
+
+ function estimateFees(
+ uint16 _dstChainId,
+ address _userApplication,
+ bytes calldata _payload,
+ bool _payInZRO,
+ bytes calldata _adapterParams
+ ) external view override returns (uint nativeFee, uint zroFee) {
+ LibraryConfig storage uaConfig = uaConfigLookup[_userApplication];
+ ILayerZeroMessagingLibrary lib = uaConfig.sendVersion == DEFAULT_VERSION
+ ? defaultSendLibrary
+ : uaConfig.sendLibrary;
+ return lib.estimateFees(_dstChainId, _userApplication, _payload, _payInZRO, _adapterParams);
+ }
+
+ function _getSendLibrary(LibraryConfig storage uaConfig) internal view returns (ILayerZeroMessagingLibrary) {
+ if (uaConfig.sendVersion == DEFAULT_VERSION) {
+ // check if the in send-blocking upgrade
+ require(defaultSendVersion != BLOCK_VERSION, "LayerZero: default in BLOCK_VERSION");
+ return defaultSendLibrary;
+ } else {
+ // check if the in send-blocking upgrade
+ require(uaConfig.sendVersion != BLOCK_VERSION, "LayerZero: in BLOCK_VERSION");
+ return uaConfig.sendLibrary;
+ }
+ }
+
+ function getSendLibraryAddress(
+ address _userApplication
+ ) external view override returns (address sendLibraryAddress) {
+ LibraryConfig storage uaConfig = uaConfigLookup[_userApplication];
+ uint16 sendVersion = uaConfig.sendVersion;
+ require(sendVersion != BLOCK_VERSION, "LayerZero: send version is BLOCK_VERSION");
+ if (sendVersion == DEFAULT_VERSION) {
+ require(defaultSendVersion != BLOCK_VERSION, "LayerZero: send version (default) is BLOCK_VERSION");
+ sendLibraryAddress = address(defaultSendLibrary);
+ } else {
+ sendLibraryAddress = address(uaConfig.sendLibrary);
+ }
+ }
+
+ function getReceiveLibraryAddress(
+ address _userApplication
+ ) external view override returns (address receiveLibraryAddress) {
+ LibraryConfig storage uaConfig = uaConfigLookup[_userApplication];
+ uint16 receiveVersion = uaConfig.receiveVersion;
+ require(receiveVersion != BLOCK_VERSION, "LayerZero: receive version is BLOCK_VERSION");
+ if (receiveVersion == DEFAULT_VERSION) {
+ require(defaultReceiveVersion != BLOCK_VERSION, "LayerZero: receive version (default) is BLOCK_VERSION");
+ receiveLibraryAddress = defaultReceiveLibraryAddress;
+ } else {
+ receiveLibraryAddress = uaConfig.receiveLibraryAddress;
+ }
+ }
+
+ function isSendingPayload() external view override returns (bool) {
+ return _send_entered_state == _ENTERED;
+ }
+
+ function isReceivingPayload() external view override returns (bool) {
+ return _receive_entered_state == _ENTERED;
+ }
+
+ function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view override returns (uint64) {
+ return inboundNonce[_srcChainId][_srcAddress];
+ }
+
+ function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view override returns (uint64) {
+ return outboundNonce[_dstChainId][_srcAddress];
+ }
+
+ function getChainId() external view override returns (uint16) {
+ return chainId;
+ }
+
+ function getSendVersion(address _userApplication) external view override returns (uint16) {
+ LibraryConfig storage uaConfig = uaConfigLookup[_userApplication];
+ return uaConfig.sendVersion == DEFAULT_VERSION ? defaultSendVersion : uaConfig.sendVersion;
+ }
+
+ function getReceiveVersion(address _userApplication) external view override returns (uint16) {
+ LibraryConfig storage uaConfig = uaConfigLookup[_userApplication];
+ return uaConfig.receiveVersion == DEFAULT_VERSION ? defaultReceiveVersion : uaConfig.receiveVersion;
+ }
+
+ function getConfig(
+ uint16 _version,
+ uint16 _chainId,
+ address _userApplication,
+ uint _configType
+ ) external view override validVersion(_version) returns (bytes memory) {
+ if (_version == DEFAULT_VERSION) {
+ require(defaultSendVersion == defaultReceiveVersion, "LayerZero: no DEFAULT config while migration");
+ _version = defaultSendVersion;
+ }
+ require(_version != BLOCK_VERSION, "LayerZero: can not get config for BLOCK_VERSION");
+ return libraryLookup[_version].getConfig(_chainId, _userApplication, _configType);
+ }
+
+ function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view override returns (bool) {
+ StoredPayload storage sp = storedPayload[_srcChainId][_srcAddress];
+ return sp.payloadHash != bytes32(0);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV1/FPValidator.sol b/endpoint/contracts/LayerZeroV1/FPValidator.sol
new file mode 100644
index 0000000..e05390e
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV1/FPValidator.sol
@@ -0,0 +1,177 @@
+// SPDX-License-Identifier: BUSL-1.1
+
+pragma solidity 0.7.6;
+pragma abicoder v2;
+
+import "./utility/LayerZeroPacket.sol";
+import "../interfaces/ILayerZeroValidationLibrary.sol";
+import "../interfaces/IValidationLibraryHelperV2.sol";
+
+interface IStargate {
+ // Stargate objects for abi encoding / decoding
+ struct SwapObj {
+ uint amount;
+ uint eqFee;
+ uint eqReward;
+ uint lpFee;
+ uint protocolFee;
+ uint lkbRemove;
+ }
+
+ struct CreditObj {
+ uint credits;
+ uint idealBalance;
+ }
+}
+
+contract FPValidator is ILayerZeroValidationLibrary, IValidationLibraryHelperV2 {
+ uint8 public proofType = 2;
+ uint8 public utilsVersion = 1;
+
+ address public immutable stargateBridgeAddress;
+ address public immutable stargateTokenAddress;
+
+ constructor(address _stargateBridgeAddress, address _stargateTokenAddress) {
+ stargateBridgeAddress = _stargateBridgeAddress;
+ stargateTokenAddress = _stargateTokenAddress;
+ }
+
+ function validateProof(
+ bytes32 _packetHash,
+ bytes calldata _transactionProof,
+ uint _remoteAddressSize
+ ) external view override returns (LayerZeroPacket.Packet memory packet) {
+ require(_remoteAddressSize > 0, "ProofLib: invalid address size");
+ // _transactionProof = srcUlnAddress (32 bytes) + lzPacket
+ require(
+ _transactionProof.length > 32 && keccak256(_transactionProof) == _packetHash,
+ "ProofLib: invalid transaction proof"
+ );
+
+ bytes memory ulnAddressBytes = bytes(_transactionProof[0:32]);
+ bytes32 ulnAddress;
+ assembly {
+ ulnAddress := mload(add(ulnAddressBytes, 32))
+ }
+ packet = LayerZeroPacket.getPacketV3(_transactionProof[32:], _remoteAddressSize, ulnAddress);
+
+ if (packet.dstAddress == stargateBridgeAddress) packet.payload = _secureStgPayload(packet.payload);
+ if (packet.dstAddress == stargateTokenAddress) packet.payload = _secureStgTokenPayload(packet.payload);
+
+ return packet;
+ }
+
+ function _secureStgTokenPayload(bytes memory _payload) internal pure returns (bytes memory) {
+ (bytes memory toAddressBytes, uint qty) = abi.decode(_payload, (bytes, uint));
+
+ address toAddress = address(0);
+ if (toAddressBytes.length > 0) {
+ assembly {
+ toAddress := mload(add(toAddressBytes, 20))
+ }
+ }
+
+ if (toAddress == address(0)) {
+ address deadAddress = address(0x000000000000000000000000000000000000dEaD);
+ bytes memory newToAddressBytes = abi.encodePacked(deadAddress);
+ return abi.encode(newToAddressBytes, qty);
+ }
+
+ // default to return the original payload
+ return _payload;
+ }
+
+ function _secureStgPayload(bytes memory _payload) internal view returns (bytes memory) {
+ // functionType is uint8 even though the encoding will take up the side of uint256
+ uint8 functionType;
+ assembly {
+ functionType := mload(add(_payload, 32))
+ }
+
+ // TYPE_SWAP_REMOTE == 1 && only if the payload has a payload
+ // only swapRemote inside of stargate can call sgReceive on an user supplied to address
+ // thus we do not care about the other type functions even if the toAddress is overly long.
+ if (functionType == 1) {
+ // decode the _payload with its types
+ (
+ ,
+ uint srcPoolId,
+ uint dstPoolId,
+ uint dstGasForCall,
+ IStargate.CreditObj memory c,
+ IStargate.SwapObj memory s,
+ bytes memory toAddressBytes,
+ bytes memory contractCallPayload
+ ) = abi.decode(_payload, (uint8, uint, uint, uint, IStargate.CreditObj, IStargate.SwapObj, bytes, bytes));
+
+ // if contractCallPayload.length > 0 need to check if the to address is a contract or not
+ if (contractCallPayload.length > 0) {
+ // otherwise, need to check if the payload can be delivered to the toAddress
+ address toAddress = address(0);
+ if (toAddressBytes.length > 0) {
+ assembly {
+ toAddress := mload(add(toAddressBytes, 20))
+ }
+ }
+
+ // check if the toAddress is a contract. We are not concerned about addresses that pretend to be wallets. because worst case we just delete their payload if being malicious
+ // we can guarantee that if a size > 0, then the contract is definitely a contract address in this context
+ uint size;
+ assembly {
+ size := extcodesize(toAddress)
+ }
+
+ if (size == 0) {
+ // size == 0 indicates its not a contract, payload wont be delivered
+ // secure the _payload to make sure funds can be delivered to the toAddress
+ bytes memory newToAddressBytes = abi.encodePacked(toAddress);
+ bytes memory securePayload = abi.encode(
+ functionType,
+ srcPoolId,
+ dstPoolId,
+ dstGasForCall,
+ c,
+ s,
+ newToAddressBytes,
+ bytes("")
+ );
+ return securePayload;
+ }
+ }
+ }
+
+ // default to return the original payload
+ return _payload;
+ }
+
+ function secureStgTokenPayload(bytes memory _payload) external pure returns (bytes memory) {
+ return _secureStgTokenPayload(_payload);
+ }
+
+ function secureStgPayload(bytes memory _payload) external view returns (bytes memory) {
+ return _secureStgPayload(_payload);
+ }
+
+ function getUtilsVersion() external view override returns (uint8) {
+ return utilsVersion;
+ }
+
+ function getProofType() external view override returns (uint8) {
+ return proofType;
+ }
+
+ function getVerifyLog(
+ bytes32,
+ uint[] calldata,
+ uint,
+ bytes[] calldata proof
+ ) external pure override returns (ULNLog memory log) {}
+
+ function getPacket(
+ bytes memory data,
+ uint sizeOfSrcAddress,
+ bytes32 ulnAddress
+ ) external pure override returns (LayerZeroPacket.Packet memory) {
+ return LayerZeroPacket.getPacketV3(data, sizeOfSrcAddress, ulnAddress);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV1/MPTValidator.sol b/endpoint/contracts/LayerZeroV1/MPTValidator.sol
new file mode 100644
index 0000000..64f9acc
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV1/MPTValidator.sol
@@ -0,0 +1,136 @@
+// SPDX-License-Identifier: BUSL-1.1
+
+pragma solidity 0.7.6;
+pragma abicoder v2;
+
+import "./utility/LayerZeroPacket.sol";
+import "./utility/Buffer.sol";
+import "../interfaces/ILayerZeroValidationLibrary.sol";
+import "./utility/UltraLightNodeEVMDecoder.sol";
+
+contract MPTValidator is ILayerZeroValidationLibrary {
+ using RLPDecode for RLPDecode.RLPItem;
+ using RLPDecode for RLPDecode.Iterator;
+ using Buffer for Buffer.buffer;
+ using SafeMath for uint;
+
+ bytes32 public constant PACKET_SIGNATURE = 0xe8d23d927749ec8e512eb885679c2977d57068839d8cca1a85685dbbea0648f6;
+
+ struct ULNLog {
+ bytes32 contractAddress;
+ bytes32 topicZeroSig;
+ bytes data;
+ }
+
+ function validateProof(
+ bytes32 _receiptsRoot,
+ bytes calldata _transactionProof,
+ uint _remoteAddressSize
+ ) external pure override returns (LayerZeroPacket.Packet memory packet) {
+ (uint16 remoteChainId, bytes[] memory proof, uint[] memory pointers, uint receiptIndex, uint logIndex) = abi
+ .decode(_transactionProof, (uint16, bytes[], uint[], uint, uint));
+
+ ULNLog memory log = _getVerifiedLog(_receiptsRoot, receiptIndex, logIndex, proof, pointers);
+ require(log.topicZeroSig == PACKET_SIGNATURE, "LayerZero: packet not recognized"); //data
+
+ return getPacket(log.data, remoteChainId, _remoteAddressSize, log.contractAddress);
+ }
+
+ function _getVerifiedLog(
+ bytes32 hashRoot,
+ uint receiptSlotIndex,
+ uint logIndex,
+ bytes[] memory proof,
+ uint[] memory pointers
+ ) internal pure returns (ULNLog memory) {
+ // walk and assert the hash links of MPT
+ uint pointer;
+ bytes memory proofBytes;
+ for (uint i = 0; i < proof.length; i++) {
+ proofBytes = proof[i];
+ require(hashRoot == keccak256(proofBytes), "LayerZero: invalid hashlink");
+ if (i < pointers.length) {
+ pointer = pointers[i];
+ assembly {
+ hashRoot := mload(add(add(proofBytes, pointer), 32))
+ }
+ }
+ }
+
+ // build the iterator for the proofBytes
+ RLPDecode.Iterator memory it = RLPDecode.toRlpItem(proofBytes).iterator();
+
+ // get the receipt item from either branch or leaf node
+ RLPDecode.RLPItem memory receiptItem = it.item.getItemByIndex(receiptSlotIndex);
+ // it = targetReceiptIter
+ it = receiptItem.typeOffset().iterator();
+ it.next(); // status
+ it.next(); // gasUsed
+ it.next(); // logBloom
+
+ // it = targetLogIter
+ it = it.next().getItemByIndex(logIndex).iterator();
+ ULNLog memory log;
+ log.contractAddress = bytes32(it.next().toUint());
+ log.topicZeroSig = bytes32(it.next().getItemByIndex(0).toUint());
+ log.data = it.next().toBytes();
+
+ return log;
+ }
+
+ // profiling and test
+ function getVerifyLog(
+ bytes32 hashRoot,
+ uint receiptSlotIndex,
+ uint logIndex,
+ bytes[] memory proof,
+ uint[] memory pointers
+ ) external pure returns (ULNLog memory) {
+ return _getVerifiedLog(hashRoot, receiptSlotIndex, logIndex, proof, pointers);
+ }
+
+ function getPacket(
+ bytes memory data,
+ uint16 srcChain,
+ uint sizeOfSrcAddress,
+ bytes32 ulnAddress
+ ) internal pure returns (LayerZeroPacket.Packet memory) {
+ uint16 dstChainId;
+ address dstAddress;
+ uint size;
+ uint64 nonce;
+
+ // The log consists of the destination chain id and then a bytes payload
+ // 0--------------------------------------------31
+ // 0 | destination chain id
+ // 32 | defines bytes array
+ // 64 |
+ // 96 | bytes array size
+ // 128 | payload
+ assembly {
+ dstChainId := mload(add(data, 32))
+ size := mload(add(data, 96)) /// size of the byte array
+ nonce := mload(add(data, 104)) // offset to convert to uint64 128 is index -24
+ dstAddress := mload(add(data, sub(add(128, sizeOfSrcAddress), 4))) // offset to convert to address 12 -8
+ }
+
+ Buffer.buffer memory srcAddressBuffer;
+ srcAddressBuffer.init(sizeOfSrcAddress);
+ srcAddressBuffer.writeRawBytes(0, data, 136, sizeOfSrcAddress); // 128 + 8
+
+ uint payloadSize = size.sub(20).sub(sizeOfSrcAddress);
+ Buffer.buffer memory payloadBuffer;
+ payloadBuffer.init(payloadSize);
+ payloadBuffer.writeRawBytes(0, data, sizeOfSrcAddress.add(156), payloadSize); // 148 + 8
+ return
+ LayerZeroPacket.Packet(
+ srcChain,
+ dstChainId,
+ nonce,
+ address(dstAddress),
+ srcAddressBuffer.buf,
+ ulnAddress,
+ payloadBuffer.buf
+ );
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV1/NonceContract.sol b/endpoint/contracts/LayerZeroV1/NonceContract.sol
new file mode 100644
index 0000000..73442fb
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV1/NonceContract.sol
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: BUSL-1.1
+
+pragma solidity 0.7.6;
+
+import "./interfaces/ILayerZeroEndpoint.sol";
+
+contract NonceContract {
+ ILayerZeroEndpoint public immutable endpoint;
+ // outboundNonce = [dstChainId][remoteAddress + localAddress]
+ mapping(uint16 => mapping(bytes => uint64)) public outboundNonce;
+
+ constructor(address _endpoint) {
+ endpoint = ILayerZeroEndpoint(_endpoint);
+ }
+
+ function increment(uint16 _chainId, address _ua, bytes calldata _path) external returns (uint64) {
+ require(
+ endpoint.getSendLibraryAddress(_ua) == msg.sender,
+ "NonceContract: msg.sender is not valid sendlibrary"
+ );
+ return ++outboundNonce[_chainId][_path];
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV1/PriceFeed.sol b/endpoint/contracts/LayerZeroV1/PriceFeed.sol
new file mode 100644
index 0000000..a94eabe
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV1/PriceFeed.sol
@@ -0,0 +1,193 @@
+// SPDX-License-Identifier: BUSL-1.1
+
+pragma solidity 0.7.6;
+pragma abicoder v2;
+
+import "@openzeppelin/contracts/math/SafeMath.sol";
+import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
+import "hardhat-deploy/solc_0.7/proxy/Proxied.sol";
+import "./interfaces/ILayerZeroPriceFeed.sol";
+
+contract PriceFeed is ILayerZeroPriceFeed, OwnableUpgradeable, Proxied {
+ using SafeMath for uint;
+
+ uint128 public PRICE_RATIO_DENOMINATOR;
+
+ // sets pricing
+ mapping(address => bool) public priceUpdater;
+
+ // [_chainId]
+ mapping(uint16 => Price) public defaultModelPrice;
+ ArbitrumPriceExt public arbitrumPriceExt;
+
+ uint128 public override nativeTokenPriceUSD; // uses PRICE_RATIO_DENOMINATOR
+
+ // upgrade: arbitrum compression - percentage of callDataSize after brotli compression
+ uint128 public ARBITRUM_COMPRESSION_PERCENT;
+
+ // ============================ Constructor ===================================
+
+ function initialize(address _priceUpdater) public proxied initializer {
+ __Ownable_init();
+ priceUpdater[_priceUpdater] = true;
+ PRICE_RATIO_DENOMINATOR = 1e10; // gas optimization: if you change this, you also need to change the RelayerV2
+ ARBITRUM_COMPRESSION_PERCENT = 47;
+ }
+
+ function onUpgrade() public proxied {
+ PRICE_RATIO_DENOMINATOR = 1e10; // gas optimization: if you change this, you also need to change the RelayerV2
+ ARBITRUM_COMPRESSION_PERCENT = 47;
+ }
+
+ // ============================ Modifier ======================================
+
+ // owner is always approved
+ modifier onlyPriceUpdater() {
+ if (owner() != msg.sender) {
+ require(priceUpdater[msg.sender], "PriceFeed: not price updater");
+ }
+ _;
+ }
+
+ // ============================ OnlyOwner =====================================
+
+ function setPriceUpdater(address _addr, bool _active) external onlyOwner {
+ priceUpdater[_addr] = _active;
+ }
+
+ function setPriceRatioDenominator(uint128 _denominator) external onlyOwner {
+ PRICE_RATIO_DENOMINATOR = _denominator;
+ }
+
+ function setArbitrumCompressionPercent(uint128 _compressionPercent) external onlyOwner {
+ ARBITRUM_COMPRESSION_PERCENT = _compressionPercent;
+ }
+
+ // ============================ OnlyPriceUpdater =====================================
+
+ function setPrice(UpdatePrice[] calldata _price) external onlyPriceUpdater {
+ for (uint i = 0; i < _price.length; i++) {
+ UpdatePrice calldata _update = _price[i];
+ _setPrice(_update.chainId, _update.price);
+ }
+ }
+
+ function setPriceForArbitrum(UpdatePriceExt[] calldata _price) external onlyPriceUpdater {
+ for (uint i = 0; i < _price.length; i++) {
+ UpdatePriceExt calldata _update = _price[i];
+
+ _setPrice(_update.chainId, _update.price);
+
+ uint64 gasPerL2Tx = _update.extend.gasPerL2Tx;
+ uint32 gasPerL1CalldataByte = _update.extend.gasPerL1CallDataByte;
+
+ arbitrumPriceExt.gasPerL2Tx = gasPerL2Tx;
+ arbitrumPriceExt.gasPerL1CallDataByte = gasPerL1CalldataByte;
+ }
+ }
+
+ function setNativeTokenPriceUSD(uint128 _nativeTokenPriceUSD) external onlyPriceUpdater {
+ nativeTokenPriceUSD = _nativeTokenPriceUSD;
+ }
+
+ // ============================ Internal ==========================================
+ function _setPrice(uint16 chainId, Price memory _price) internal {
+ uint128 priceRatio = _price.priceRatio;
+ uint64 gasPriceInUnit = _price.gasPriceInUnit;
+ uint32 gasPerByte = _price.gasPerByte;
+ defaultModelPrice[chainId] = Price(priceRatio, gasPriceInUnit, gasPerByte);
+ }
+
+ // For optimism l1 gas price lookup
+ function _getL1LookupId(uint16 _l2ChainId) internal pure returns (uint16) {
+ if (_l2ChainId == 111) {
+ return 101;
+ } else if (_l2ChainId == 10132) {
+ return 10121; // ethereum-goerli
+ } else if (_l2ChainId == 20132) {
+ return 20121; // ethereum-goerli
+ } else {
+ revert("PriceFeed: unknown l2 chain id");
+ }
+ }
+
+ // ============================ View ==========================================
+
+ function getPrice(uint16 _dstChainId) external view override returns (Price memory price) {
+ price = defaultModelPrice[_dstChainId];
+ }
+
+ function getPriceRatioDenominator() external view override returns (uint128) {
+ return PRICE_RATIO_DENOMINATOR;
+ }
+
+ function estimateFeeByChain(
+ uint16 _dstChainId,
+ uint _callDataSize,
+ uint _gas
+ ) external view override returns (uint fee, uint128 priceRatio) {
+ if (_dstChainId == 110 || _dstChainId == 10143 || _dstChainId == 20143) {
+ return estimateFeeWithArbitrumModel(_dstChainId, _callDataSize, _gas);
+ } else if (_dstChainId == 111 || _dstChainId == 10132 || _dstChainId == 20132) {
+ return estimateFeeWithOptimismModel(_dstChainId, _callDataSize, _gas);
+ } else {
+ return estimateFeeWithDefaultModel(_dstChainId, _callDataSize, _gas);
+ }
+ }
+
+ function estimateFeeWithDefaultModel(
+ uint16 _dstChainId,
+ uint _callDataSize,
+ uint _gas
+ ) public view returns (uint fee, uint128 priceRatio) {
+ Price storage remotePrice = defaultModelPrice[_dstChainId];
+
+ // assuming the _gas includes (1) the 21,000 overhead and (2) not the calldata gas
+ uint gasForCallData = _callDataSize.mul(remotePrice.gasPerByte);
+ uint remoteFee = (gasForCallData.add(_gas)).mul(remotePrice.gasPriceInUnit);
+ return ((remoteFee.mul(remotePrice.priceRatio)).div(PRICE_RATIO_DENOMINATOR), remotePrice.priceRatio);
+ }
+
+ function estimateFeeWithOptimismModel(
+ uint16 _dstChainId,
+ uint _callDataSize,
+ uint _gas
+ ) public view returns (uint fee, uint128 priceRatio) {
+ uint16 ethereumId = _getL1LookupId(_dstChainId);
+
+ // L1 fee
+ Price storage ethereumPrice = defaultModelPrice[ethereumId];
+ uint gasForL1CallData = _callDataSize.mul(ethereumPrice.gasPerByte).add(3188); // 2100 + 68 * 16
+ uint l1Fee = gasForL1CallData.mul(ethereumPrice.gasPriceInUnit);
+
+ // L2 fee
+ Price storage optimismPrice = defaultModelPrice[_dstChainId];
+ uint gasForL2CallData = _callDataSize.mul(optimismPrice.gasPerByte);
+ uint l2Fee = (gasForL2CallData.add(_gas)).mul(optimismPrice.gasPriceInUnit);
+
+ uint l1FeeInSrcPrice = l1Fee.mul(ethereumPrice.priceRatio).div(PRICE_RATIO_DENOMINATOR);
+ uint l2FeeInSrcPrice = l2Fee.mul(optimismPrice.priceRatio).div(PRICE_RATIO_DENOMINATOR);
+ uint gasFee = l1FeeInSrcPrice.add(l2FeeInSrcPrice);
+ return (gasFee, optimismPrice.priceRatio);
+ }
+
+ function estimateFeeWithArbitrumModel(
+ uint16 _dstChainId,
+ uint _callDataSize,
+ uint _gas
+ ) public view returns (uint fee, uint128 priceRatio) {
+ Price storage arbitrumPrice = defaultModelPrice[_dstChainId];
+
+ // L1 fee
+ uint gasForL1CallData = _callDataSize.mul(ARBITRUM_COMPRESSION_PERCENT).div(100).mul(
+ arbitrumPriceExt.gasPerL1CallDataByte
+ );
+ // L2 Fee
+ uint gasForL2CallData = _callDataSize.mul(arbitrumPrice.gasPerByte);
+ uint gasFee = (_gas.add(arbitrumPriceExt.gasPerL2Tx).add(gasForL1CallData).add(gasForL2CallData)).mul(
+ arbitrumPrice.gasPriceInUnit
+ );
+
+ return ((gasFee.mul(arbitrumPrice.priceRatio)).div(PRICE_RATIO_DENOMINATOR), arbitrumPrice.priceRatio);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV1/RelayerV2.sol b/endpoint/contracts/LayerZeroV1/RelayerV2.sol
new file mode 100644
index 0000000..461927f
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV1/RelayerV2.sol
@@ -0,0 +1,397 @@
+// SPDX-License-Identifier: BUSL-1.1
+
+pragma solidity ^0.7.6;
+pragma abicoder v2;
+
+import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
+import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
+import "@openzeppelin/contracts/math/SafeMath.sol";
+import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
+import "hardhat-deploy/solc_0.7/proxy/Proxied.sol";
+
+import "./interfaces/ILayerZeroRelayerV2.sol";
+import "./interfaces/ILayerZeroUltraLightNodeV2.sol";
+import "./interfaces/ILayerZeroPriceFeedV2.sol";
+import "./libs/RateLimiter.sol";
+
+interface IStargateComposer {
+ function isSending() external view returns (bool);
+}
+
+contract RelayerV2 is ReentrancyGuard, OwnableUpgradeable, Proxied, ILayerZeroRelayerV2 {
+ using SafeERC20 for IERC20;
+ using SafeMath for uint;
+ using SafeMath for uint128;
+ using SafeMath for uint64;
+ using RateLimiter for RateLimiter.Info;
+
+ ILayerZeroUltraLightNodeV2 public uln;
+ address public stargateBridgeAddress;
+ uint public constant AIRDROP_GAS_LIMIT = 10000;
+
+ struct DstPrice {
+ uint128 dstPriceRatio; // 10^10
+ uint128 dstGasPriceInWei;
+ }
+
+ struct DstConfig {
+ uint128 dstNativeAmtCap;
+ uint64 baseGas;
+ uint64 gasPerByte;
+ }
+
+ struct DstMultiplier {
+ uint16 chainId;
+ uint128 multiplier;
+ }
+
+ struct DstFloorMargin {
+ uint16 chainId;
+ uint128 floorMargin;
+ }
+
+ // [_chainId] => DstPriceData. change often
+ mapping(uint16 => DstPrice) public dstPriceLookupOld;
+ // [_chainId][_outboundProofType] => DstConfig. change much less often
+ mapping(uint16 => mapping(uint16 => DstConfig)) public dstConfigLookup;
+ mapping(address => bool) public approvedAddresses;
+
+ event Withdraw(address to, uint amount);
+ event ApproveAddress(address addr, bool approved);
+ event SetPriceConfigUpdater(address priceConfigUpdater, bool allow);
+ event AssignJob(uint totalFee);
+ event ValueTransferFailed(address indexed to, uint indexed quantity);
+ event SetDstPrice(uint16 chainId, uint128 dstPriceRatio, uint128 dstGasPriceInWei);
+ event SetDstConfig(
+ uint16 chainId,
+ uint16 outboundProofType,
+ uint128 dstNativeAmtCap,
+ uint64 baseGas,
+ uint64 gasPerByte
+ );
+
+ // new pauseable relayer
+ bool public paused;
+
+ // Update for Price Feed
+ ILayerZeroPriceFeedV2 public priceFeed;
+ // multipler for airdrop
+ uint128 public multiplierBps;
+
+ // PriceFeedContract Upgrade
+ // all encoded param bytes except for proof for validateTransactionProofV1
+ uint16 public validateProofBytes;
+ uint16 public fpBytes;
+ uint16 public mptOverhead;
+
+ // [chainId] => [multiplier]
+ mapping(uint16 => uint128) public dstMultipliers;
+ // [chainId] => [floor margin in USD]
+ mapping(uint16 => uint128) public dstFloorMarginsUSD;
+ mapping(address => bool) public priceConfigUpdaters;
+
+ // stargate guard
+ IStargateComposer public stargateComposer;
+ address public stargateBridgeAddr;
+
+ uint256 public nativeDecimalsRate;
+
+ RateLimiter.Info public limiter; // deprecated
+
+ event RateLimiterSet(uint64 capacity, uint64 rate); // deprecated
+
+ mapping(address => bool) public limiterWhitelist; // if true, sender bypasses rate limits
+ mapping(uint16 => RateLimiter.Info) public limiters;
+ event DstRateLimiterSet(uint16 dstChain, uint64 capacity, uint64 rate);
+
+ // owner is always approved
+ modifier onlyApproved() {
+ if (owner() != msg.sender) {
+ require(isApproved(msg.sender), "Relayer: not approved");
+ }
+ _;
+ }
+
+ modifier onlyPriceConfigUpdater() {
+ if (owner() != msg.sender && !approvedAddresses[msg.sender]) {
+ require(priceConfigUpdaters[msg.sender], "Relayer: not updater");
+ }
+ _;
+ }
+
+ function initialize(
+ address _uln,
+ address _priceFeed,
+ address _stargateBridgeAddr,
+ address _stargateComposer,
+ uint256 _nativeDecimalsRate
+ ) public proxied initializer {
+ __Ownable_init();
+ uln = ILayerZeroUltraLightNodeV2(_uln);
+ setApprovedAddress(address(this), true);
+ multiplierBps = 12000;
+ priceFeed = ILayerZeroPriceFeedV2(_priceFeed);
+ validateProofBytes = 164;
+ fpBytes = 160;
+ mptOverhead = 500;
+ stargateBridgeAddr = _stargateBridgeAddr;
+ stargateComposer = IStargateComposer(_stargateComposer);
+ nativeDecimalsRate = _nativeDecimalsRate;
+ }
+
+ function onUpgrade(
+ address _stargateBridgeAddr,
+ address _stargateComposer,
+ uint256 _nativeDecimalsRate
+ ) public proxied {
+ stargateBridgeAddr = _stargateBridgeAddr;
+ stargateComposer = IStargateComposer(_stargateComposer);
+ nativeDecimalsRate = _nativeDecimalsRate;
+ }
+
+ //----------------------------------------------------------------------------------
+ // onlyApproved
+ function setLimiterWhitelist(address _addr, bool _skipRateLimits) external onlyApproved {
+ limiterWhitelist[_addr] = _skipRateLimits;
+ }
+
+ function setDstPrice(uint16 _chainId, uint128 _dstPriceRatio, uint128 _dstGasPriceInWei) external onlyApproved {
+ // No longer used: Write prices in PriceFeed.
+ }
+
+ function setPriceFeed(address _priceFeed) external onlyApproved {
+ priceFeed = ILayerZeroPriceFeedV2(_priceFeed);
+ }
+
+ function setPriceMultiplierBps(uint128 _multiplierBps) external onlyApproved {
+ multiplierBps = _multiplierBps;
+ }
+
+ function setDstPriceMultipliers(DstMultiplier[] calldata _multipliers) external onlyPriceConfigUpdater {
+ for (uint i = 0; i < _multipliers.length; i++) {
+ DstMultiplier calldata _data = _multipliers[i];
+ dstMultipliers[_data.chainId] = _data.multiplier;
+ }
+ }
+
+ function setDstFloorMarginsUSD(DstFloorMargin[] calldata _margins) external onlyPriceConfigUpdater {
+ for (uint i = 0; i < _margins.length; i++) {
+ DstFloorMargin calldata _data = _margins[i];
+ dstFloorMarginsUSD[_data.chainId] = _data.floorMargin;
+ }
+ }
+
+ function setDstConfig(
+ uint16 _chainId,
+ uint16 _outboundProofType,
+ uint128 _dstNativeAmtCap,
+ uint64 _baseGas,
+ uint64 _gasPerByte
+ ) external onlyApproved {
+ dstConfigLookup[_chainId][_outboundProofType] = DstConfig(_dstNativeAmtCap, _baseGas, _gasPerByte);
+ emit SetDstConfig(_chainId, _outboundProofType, _dstNativeAmtCap, _baseGas, _gasPerByte);
+ }
+
+ function setStargateAddress(address _stargateAddress) external onlyApproved {
+ stargateBridgeAddress = _stargateAddress;
+ }
+
+ //----------------------------------------------------------------------------------
+ // onlyOwner
+ function configRateLimiter(uint16 _dstChainId, uint64 _capacity, uint64 _rate) external onlyOwner {
+ RateLimiter.Info storage dstLimiter = limiters[_dstChainId];
+ dstLimiter.setCapacity(_capacity);
+ dstLimiter.setRate(_rate);
+ emit DstRateLimiterSet(_dstChainId, _capacity, _rate);
+ }
+
+ function setApprovedAddress(address _relayerAddress, bool _approve) public onlyOwner {
+ approvedAddresses[_relayerAddress] = _approve;
+ emit ApproveAddress(_relayerAddress, _approve);
+ }
+
+ function setPriceConfigUpdater(address _priceConfigUpdater, bool _allow) public onlyOwner {
+ priceConfigUpdaters[_priceConfigUpdater] = _allow;
+ emit SetPriceConfigUpdater(_priceConfigUpdater, _allow);
+ }
+
+ function setPause(bool _paused) public onlyOwner {
+ paused = _paused;
+ }
+
+ // txType 1
+ // bytes [2 32 ]
+ // fields [txType extraGas]
+ // txType 2
+ // bytes [2 32 32 bytes[] ]
+ // fields [txType extraGas dstNativeAmt dstNativeAddress]
+ // User App Address is not used in this version
+ function _getPrices(
+ uint16 _dstChainId,
+ uint16 _outboundProofType,
+ address,
+ uint _payloadSize,
+ bytes memory _adapterParameters
+ ) internal view returns (uint) {
+ require(!paused, "Admin: paused");
+ // decoding the _adapterParameters - reverts if type 2 and there is no dstNativeAddress
+ require(
+ _adapterParameters.length == 34 || _adapterParameters.length > 66,
+ "Relayer: wrong _adapterParameters size"
+ );
+ uint16 txType;
+ uint extraGas;
+ assembly {
+ txType := mload(add(_adapterParameters, 2))
+ extraGas := mload(add(_adapterParameters, 34))
+ }
+ require(extraGas > 0, "Relayer: gas too low");
+ require(txType == 1 || txType == 2, "Relayer: unsupported txType");
+
+ DstConfig storage dstConfig = dstConfigLookup[_dstChainId][_outboundProofType];
+
+ // validateTransactionProof bytes = fixedBytes + proofBytes
+ // V2 has an extra 32 bytes for payable address
+ uint totalFixedBytes = txType == 2 ? uint(validateProofBytes).add(32) : validateProofBytes;
+ uint proofBytes = _outboundProofType == 2 ? _payloadSize.add(fpBytes) : _payloadSize.add(mptOverhead);
+
+ uint16 dstChainId = _dstChainId; // stack too deep
+ (uint fee, uint128 priceRatio, uint128 priceRatioDenominator, uint128 nativePriceUSD) = priceFeed
+ .estimateFeeByEid(dstChainId, totalFixedBytes.add(proofBytes), dstConfig.baseGas.add(extraGas));
+
+ uint dstNativeAmt = 0;
+ if (txType == 2) {
+ assembly {
+ dstNativeAmt := mload(add(_adapterParameters, 66))
+ }
+ require(dstConfig.dstNativeAmtCap >= dstNativeAmt, "Relayer: dstNativeAmt too large");
+ }
+ uint airdropAmount = 0;
+ if (dstNativeAmt > 0) {
+ // gas saver if no airdrop
+ airdropAmount = dstNativeAmt.mul(priceRatio).div(priceRatioDenominator).mul(multiplierBps).div(10000); // cheaper than priceFeed.getPriceRatioDenominator()
+ }
+ return _getDstTxCost(dstChainId, fee, nativePriceUSD).add(airdropAmount);
+ }
+
+ function _getDstTxCost(uint16 _dstChainId, uint _fee, uint128 nativeTokenPriceUSD) private view returns (uint) {
+ uint128 _dstMultiplier = dstMultipliers[_dstChainId];
+ if (_dstMultiplier == 0) {
+ _dstMultiplier = multiplierBps;
+ }
+ uint dstTxCostWithMultiplier = _fee.mul(_dstMultiplier).div(10000);
+
+ if (nativeTokenPriceUSD == 0) {
+ return dstTxCostWithMultiplier;
+ }
+
+ uint dstTxCostWithMargin = _fee.add(
+ dstFloorMarginsUSD[_dstChainId].mul(nativeDecimalsRate).div(nativeTokenPriceUSD)
+ );
+
+ return dstTxCostWithMargin > dstTxCostWithMultiplier ? dstTxCostWithMargin : dstTxCostWithMultiplier;
+ }
+
+ function getFee(
+ uint16 _dstChainId,
+ uint16 _outboundProofType,
+ address _userApplication,
+ uint _payloadSize,
+ bytes calldata _adapterParams
+ ) external view override returns (uint) {
+ require(_payloadSize <= 10000, "Relayer: _payloadSize tooooo big");
+ return _getPrices(_dstChainId, _outboundProofType, _userApplication, _payloadSize, _adapterParams);
+ }
+
+ // view function to convert pricefeed price to current price (for backwards compatibility)
+ function dstPriceLookup(uint16 _dstChainId) public view returns (DstPrice memory) {
+ ILayerZeroPriceFeedV2.Price memory price = priceFeed.getPrice(_dstChainId);
+ return DstPrice(price.priceRatio, price.gasPriceInUnit);
+ }
+
+ function isApproved(address _relayerAddress) public view returns (bool) {
+ return approvedAddresses[_relayerAddress];
+ }
+
+ function assignJob(
+ uint16 _dstChainId,
+ uint16 _outboundProofType,
+ address _userApplication,
+ uint _payloadSize,
+ bytes calldata _adapterParams
+ ) external override returns (uint fee) {
+ if (_dstChainId >= 10000) {
+ RateLimiter.Info storage dstLimiter = limiters[_dstChainId];
+ // sandbox or testnet
+ if (!limiterWhitelist[_userApplication] && dstLimiter.capacity > 0) {
+ dstLimiter.tryConsume(10000);
+ }
+ }
+
+ require(msg.sender == address(uln), "Relayer: invalid uln");
+ require(_payloadSize <= 10000, "Relayer: _payloadSize > 10000");
+
+ if (_userApplication == stargateBridgeAddr) {
+ // following way also prevents user from inputting to address greater than 32 bytes
+ bool validPayload = (_payloadSize == 544 || // swap with no payload
+ _payloadSize == 320 || // redeem local callback
+ _payloadSize == 288 || // redeem local
+ _payloadSize == 160); // send credits
+
+ if (!validPayload) {
+ require(stargateComposer.isSending(), "Relayer: stargate composer is not sending");
+ }
+ }
+
+ fee = _getPrices(_dstChainId, _outboundProofType, _userApplication, _payloadSize, _adapterParams);
+ emit AssignJob(fee);
+ }
+
+ function withdrawFee(address payable _to, uint _amount) external override onlyApproved {
+ uint totalFee = uln.accruedNativeFee(address(this));
+ require(_amount <= totalFee, "Relayer: not enough fee for withdrawal");
+ uln.withdrawNative(_to, _amount);
+ }
+
+ function withdrawToken(address _token, address _to, uint _amount) external onlyApproved {
+ if (_token == address(0)) {
+ uint total = address(this).balance;
+ require(_amount <= total, "Relayer: not enough native fee for withdrawal");
+ (bool sent, ) = payable(_to).call{ value: _amount }("");
+ require(sent, "Relayer: failed to send ether");
+ } else {
+ uint total = IERC20(_token).balanceOf(address(this));
+ require(_amount <= total, "Relayer: not enough fee for withdrawal");
+ IERC20(_token).safeTransfer(_to, _amount);
+ }
+ }
+
+ function validateTransactionProofV2(
+ uint16 _srcChainId,
+ address _dstAddress,
+ uint _gasLimit,
+ bytes32 _blockHash,
+ bytes32 _data,
+ bytes calldata _transactionProof,
+ address payable _to
+ ) external payable onlyApproved nonReentrant {
+ (bool sent, ) = _to.call{ gas: AIRDROP_GAS_LIMIT, value: msg.value }("");
+ //require(sent, "Relayer: failed to send ether");
+ if (!sent) {
+ emit ValueTransferFailed(_to, msg.value);
+ }
+ uln.validateTransactionProof(_srcChainId, _dstAddress, _gasLimit, _blockHash, _data, _transactionProof);
+ }
+
+ function validateTransactionProofV1(
+ uint16 _srcChainId,
+ address _dstAddress,
+ uint _gasLimit,
+ bytes32 _blockHash,
+ bytes32 _data,
+ bytes calldata _transactionProof
+ ) external onlyApproved nonReentrant {
+ uln.validateTransactionProof(_srcChainId, _dstAddress, _gasLimit, _blockHash, _data, _transactionProof);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV1/TreasuryV2.sol b/endpoint/contracts/LayerZeroV1/TreasuryV2.sol
new file mode 100644
index 0000000..3c0dbf1
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV1/TreasuryV2.sol
@@ -0,0 +1,76 @@
+// SPDX-License-Identifier: BUSL-1.1
+
+pragma solidity 0.7.6;
+
+import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
+import "@openzeppelin/contracts/access/Ownable.sol";
+import "@openzeppelin/contracts/math/SafeMath.sol";
+
+import "./interfaces/ILayerZeroTreasury.sol";
+import "./interfaces/ILayerZeroUltraLightNodeV2.sol";
+
+contract TreasuryV2 is ILayerZeroTreasury, Ownable {
+ using SafeERC20 for IERC20;
+ using SafeMath for uint;
+
+ uint public nativeBP;
+ uint public zroFee;
+ bool public feeEnabled;
+ bool public zroEnabled;
+
+ ILayerZeroUltraLightNodeV2 public uln;
+
+ event NativeBP(uint bp);
+ event ZroFee(uint zroFee);
+ event FeeEnabled(bool feeEnabled);
+ event ZroEnabled(bool zroEnabled);
+
+ constructor(address _ulnv2) {
+ uln = ILayerZeroUltraLightNodeV2(_ulnv2);
+ }
+
+ function getFees(bool payInZro, uint relayerFee, uint oracleFee) external view override returns (uint) {
+ if (feeEnabled) {
+ if (payInZro) {
+ require(zroEnabled, "LayerZero: ZRO is not enabled");
+ return zroFee;
+ } else {
+ return relayerFee.add(oracleFee).mul(nativeBP).div(10000);
+ }
+ }
+ return 0;
+ }
+
+ function setFeeEnabled(bool _feeEnabled) external onlyOwner {
+ feeEnabled = _feeEnabled;
+ emit FeeEnabled(_feeEnabled);
+ }
+
+ function setZroEnabled(bool _zroEnabled) external onlyOwner {
+ zroEnabled = _zroEnabled;
+ emit ZroEnabled(_zroEnabled);
+ }
+
+ function setNativeBP(uint _nativeBP) external onlyOwner {
+ nativeBP = _nativeBP;
+ emit NativeBP(_nativeBP);
+ }
+
+ function setZroFee(uint _zroFee) external onlyOwner {
+ zroFee = _zroFee;
+ emit ZroFee(_zroFee);
+ }
+
+ function withdrawZROFromULN(address _to, uint _amount) external onlyOwner {
+ uln.withdrawZRO(_to, _amount);
+ }
+
+ function withdrawNativeFromULN(address payable _to, uint _amount) external onlyOwner {
+ uln.withdrawNative(_to, _amount);
+ }
+
+ function withdrawToken(address _token, address _to, uint _amount) external onlyOwner {
+ IERC20(_token).safeTransfer(_to, _amount);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV1/UltraLightNodeV2.sol b/endpoint/contracts/LayerZeroV1/UltraLightNodeV2.sol
new file mode 100644
index 0000000..8b8edc1
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV1/UltraLightNodeV2.sol
@@ -0,0 +1,588 @@
+// SPDX-License-Identifier: BUSL-1.1
+
+pragma solidity 0.7.6;
+pragma abicoder v2;
+
+import "@openzeppelin/contracts/access/Ownable.sol";
+import "@openzeppelin/contracts/math/SafeMath.sol";
+import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
+import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
+
+import "./interfaces/ILayerZeroValidationLibrary.sol";
+import "./interfaces/ILayerZeroReceiver.sol";
+import "./interfaces/ILayerZeroTreasury.sol";
+import "./interfaces/ILayerZeroEndpoint.sol";
+// v2
+import "./interfaces/ILayerZeroMessagingLibraryV2.sol";
+import "./interfaces/ILayerZeroOracleV2.sol";
+import "./interfaces/ILayerZeroUltraLightNodeV2.sol";
+import "./interfaces/ILayerZeroRelayerV2.sol";
+import "./NonceContract.sol";
+
+contract UltraLightNodeV2 is ILayerZeroMessagingLibraryV2, ILayerZeroUltraLightNodeV2, ReentrancyGuard, Ownable {
+ using SafeERC20 for IERC20;
+ using SafeMath for uint;
+
+ // Application config
+ uint public constant CONFIG_TYPE_INBOUND_PROOF_LIBRARY_VERSION = 1;
+ uint public constant CONFIG_TYPE_INBOUND_BLOCK_CONFIRMATIONS = 2;
+ uint public constant CONFIG_TYPE_RELAYER = 3;
+ uint public constant CONFIG_TYPE_OUTBOUND_PROOF_TYPE = 4;
+ uint public constant CONFIG_TYPE_OUTBOUND_BLOCK_CONFIRMATIONS = 5;
+ uint public constant CONFIG_TYPE_ORACLE = 6;
+
+ // Token and Contracts
+ IERC20 public layerZeroToken;
+ ILayerZeroTreasury public treasuryContract;
+
+ mapping(address => uint) public nativeFees;
+ uint public treasuryZROFees;
+
+ // User Application
+ mapping(address => mapping(uint16 => ApplicationConfiguration)) public appConfig; // app address => chainId => config
+ mapping(uint16 => ApplicationConfiguration) public defaultAppConfig; // default UA settings if no version specified
+ mapping(uint16 => mapping(uint16 => bytes)) public defaultAdapterParams;
+
+ // Validation
+ mapping(uint16 => mapping(uint16 => address)) public inboundProofLibrary; // chainId => library Id => inboundProofLibrary contract
+ mapping(uint16 => uint16) public maxInboundProofLibrary; // chainId => inboundProofLibrary
+ mapping(uint16 => mapping(uint16 => bool)) public supportedOutboundProof; // chainId => outboundProofType => enabled
+ mapping(uint16 => uint) public chainAddressSizeMap;
+ mapping(address => mapping(uint16 => mapping(bytes32 => mapping(bytes32 => uint)))) public hashLookup; //[oracle][srcChainId][blockhash][datahash] -> confirmation
+ mapping(uint16 => bytes32) public ulnLookup; // remote ulns
+
+ ILayerZeroEndpoint public immutable endpoint;
+ uint16 public immutable localChainId;
+ NonceContract public immutable nonceContract;
+
+ constructor(address _endpoint, address _nonceContract, uint16 _localChainId) {
+ require(_endpoint != address(0x0), "LayerZero: endpoint cannot be zero address");
+ require(_nonceContract != address(0x0), "LayerZero: nonceContract cannot be zero address");
+ ILayerZeroEndpoint lzEndpoint = ILayerZeroEndpoint(_endpoint);
+ localChainId = _localChainId;
+ endpoint = lzEndpoint;
+ nonceContract = NonceContract(_nonceContract);
+ }
+
+ // only the endpoint can call SEND() and setConfig()
+ modifier onlyEndpoint() {
+ require(address(endpoint) == msg.sender, "LayerZero: only endpoint");
+ _;
+ }
+
+ //----------------------------------------------------------------------------------
+ // PROTOCOL
+ function validateTransactionProof(
+ uint16 _srcChainId,
+ address _dstAddress,
+ uint _gasLimit,
+ bytes32 _lookupHash,
+ bytes32 _blockData,
+ bytes calldata _transactionProof
+ ) external override {
+ // retrieve UA's configuration using the _dstAddress from arguments.
+ ApplicationConfiguration memory uaConfig = _getAppConfig(_srcChainId, _dstAddress);
+
+ // assert that the caller == UA's relayer
+ require(uaConfig.relayer == msg.sender, "LayerZero: invalid relayer");
+
+ LayerZeroPacket.Packet memory _packet;
+ uint remoteAddressSize = chainAddressSizeMap[_srcChainId];
+ require(remoteAddressSize != 0, "LayerZero: incorrect remote address size");
+ {
+ // assert that the data submitted by UA's oracle have no fewer confirmations than UA's configuration
+ uint storedConfirmations = hashLookup[uaConfig.oracle][_srcChainId][_lookupHash][_blockData];
+ require(
+ storedConfirmations > 0 && storedConfirmations >= uaConfig.inboundBlockConfirmations,
+ "LayerZero: not enough block confirmations"
+ );
+
+ // decode
+ address inboundProofLib = inboundProofLibrary[_srcChainId][uaConfig.inboundProofLibraryVersion];
+ _packet = ILayerZeroValidationLibrary(inboundProofLib).validateProof(
+ _blockData,
+ _transactionProof,
+ remoteAddressSize
+ );
+ }
+
+ // packet content assertion
+ require(
+ ulnLookup[_srcChainId] == _packet.ulnAddress && _packet.ulnAddress != bytes32(0),
+ "LayerZero: invalid _packet.ulnAddress"
+ );
+ require(_packet.srcChainId == _srcChainId, "LayerZero: invalid srcChain Id");
+ // failsafe because the remoteAddress size being passed into validateProof trims the address this should not hit
+ require(_packet.srcAddress.length == remoteAddressSize, "LayerZero: invalid srcAddress size");
+ require(_packet.dstChainId == localChainId, "LayerZero: invalid dstChain Id");
+ require(_packet.dstAddress == _dstAddress, "LayerZero: invalid dstAddress");
+
+ // if the dst is not a contract, then emit and return early. This will break inbound nonces, but this particular
+ // path is already broken and wont ever be able to deliver anyways
+ if (!_isContract(_dstAddress)) {
+ emit InvalidDst(
+ _packet.srcChainId,
+ _packet.srcAddress,
+ _packet.dstAddress,
+ _packet.nonce,
+ keccak256(_packet.payload)
+ );
+ return;
+ }
+
+ bytes memory pathData = abi.encodePacked(_packet.srcAddress, _packet.dstAddress);
+ emit PacketReceived(
+ _packet.srcChainId,
+ _packet.srcAddress,
+ _packet.dstAddress,
+ _packet.nonce,
+ keccak256(_packet.payload)
+ );
+ endpoint.receivePayload(_srcChainId, pathData, _dstAddress, _packet.nonce, _gasLimit, _packet.payload);
+ }
+
+ function send(
+ address _ua,
+ uint64,
+ uint16 _dstChainId,
+ bytes calldata _path,
+ bytes calldata _payload,
+ address payable _refundAddress,
+ address _zroPaymentAddress,
+ bytes calldata _adapterParams
+ ) external payable override onlyEndpoint {
+ address ua = _ua;
+ uint16 dstChainId = _dstChainId;
+ require(ulnLookup[dstChainId] != bytes32(0), "LayerZero: dstChainId does not exist");
+
+ bytes memory dstAddress;
+ uint64 nonce;
+ // code block for solving 'Stack Too Deep'
+ {
+ uint chainAddressSize = chainAddressSizeMap[dstChainId];
+ // path = remoteAddress + localAddress
+ require(
+ chainAddressSize != 0 && _path.length == 20 + chainAddressSize,
+ "LayerZero: incorrect remote address size"
+ );
+ address srcInPath;
+ bytes memory path = _path; // copy to memory
+ assembly {
+ srcInPath := mload(add(add(path, 20), chainAddressSize)) // chainAddressSize + 20
+ }
+ require(ua == srcInPath, "LayerZero: wrong path data");
+ dstAddress = _path[0:chainAddressSize];
+ nonce = nonceContract.increment(dstChainId, ua, path);
+ }
+
+ bytes memory payload = _payload;
+ ApplicationConfiguration memory uaConfig = _getAppConfig(dstChainId, ua);
+
+ // compute all the fees
+ uint relayerFee = _handleRelayer(dstChainId, uaConfig, ua, payload.length, _adapterParams);
+ uint oracleFee = _handleOracle(dstChainId, uaConfig, ua);
+ uint nativeProtocolFee = _handleProtocolFee(relayerFee, oracleFee, ua, _zroPaymentAddress);
+
+ // total native fee, does not include ZRO protocol fee
+ uint totalNativeFee = relayerFee.add(oracleFee).add(nativeProtocolFee);
+
+ // assert the user has attached enough native token for this address
+ require(totalNativeFee <= msg.value, "LayerZero: not enough native for fees");
+ // refund if they send too much
+ uint amount = msg.value.sub(totalNativeFee);
+ if (amount > 0) {
+ (bool success, ) = _refundAddress.call{value: amount}("");
+ require(success, "LayerZero: failed to refund");
+ }
+
+ // emit the data packet
+ bytes memory encodedPayload = abi.encodePacked(nonce, localChainId, ua, dstChainId, dstAddress, payload);
+ emit Packet(encodedPayload);
+ }
+
+ function _handleRelayer(
+ uint16 _dstChainId,
+ ApplicationConfiguration memory _uaConfig,
+ address _ua,
+ uint _payloadSize,
+ bytes memory _adapterParams
+ ) internal returns (uint relayerFee) {
+ if (_adapterParams.length == 0) {
+ _adapterParams = defaultAdapterParams[_dstChainId][_uaConfig.outboundProofType];
+ }
+ address relayerAddress = _uaConfig.relayer;
+ ILayerZeroRelayerV2 relayer = ILayerZeroRelayerV2(relayerAddress);
+ relayerFee = relayer.assignJob(_dstChainId, _uaConfig.outboundProofType, _ua, _payloadSize, _adapterParams);
+
+ _creditNativeFee(relayerAddress, relayerFee);
+
+ // emit the param events
+ emit RelayerParams(_adapterParams, _uaConfig.outboundProofType);
+ }
+
+ function _handleOracle(
+ uint16 _dstChainId,
+ ApplicationConfiguration memory _uaConfig,
+ address _ua
+ ) internal returns (uint oracleFee) {
+ address oracleAddress = _uaConfig.oracle;
+ oracleFee = ILayerZeroOracleV2(oracleAddress).assignJob(
+ _dstChainId,
+ _uaConfig.outboundProofType,
+ _uaConfig.outboundBlockConfirmations,
+ _ua
+ );
+
+ _creditNativeFee(oracleAddress, oracleFee);
+ }
+
+ function _handleProtocolFee(
+ uint _relayerFee,
+ uint _oracleFee,
+ address _ua,
+ address _zroPaymentAddress
+ ) internal returns (uint protocolNativeFee) {
+ // if no ZRO token or not specifying a payment address, pay in native token
+ bool payInNative = _zroPaymentAddress == address(0x0) || address(layerZeroToken) == address(0x0);
+ uint protocolFee = treasuryContract.getFees(!payInNative, _relayerFee, _oracleFee);
+
+ if (protocolFee > 0) {
+ if (payInNative) {
+ address treasuryAddress = address(treasuryContract);
+ _creditNativeFee(treasuryAddress, protocolFee);
+ protocolNativeFee = protocolFee;
+ } else {
+ // zro payment address must equal the ua or the tx.origin otherwise the transaction reverts
+ require(
+ _zroPaymentAddress == _ua || _zroPaymentAddress == tx.origin,
+ "LayerZero: must be paid by sender or origin"
+ );
+
+ // transfer the LayerZero token to this contract from the payee
+ layerZeroToken.safeTransferFrom(_zroPaymentAddress, address(this), protocolFee);
+
+ treasuryZROFees = treasuryZROFees.add(protocolFee);
+ }
+ }
+ }
+
+ function _creditNativeFee(address _receiver, uint _amount) internal {
+ nativeFees[_receiver] = nativeFees[_receiver].add(_amount);
+ }
+
+ // Can be called by any address to update a block header
+ // can only upload new block data or the same block data with more confirmations
+ function updateHash(
+ uint16 _srcChainId,
+ bytes32 _lookupHash,
+ uint _confirmations,
+ bytes32 _blockData
+ ) external override {
+ uint storedConfirmations = hashLookup[msg.sender][_srcChainId][_lookupHash][_blockData];
+
+ // if it has a record, requires a larger confirmation.
+ require(
+ storedConfirmations < _confirmations,
+ "LayerZero: oracle data can only update if it has more confirmations"
+ );
+
+ // set the new information into storage
+ hashLookup[msg.sender][_srcChainId][_lookupHash][_blockData] = _confirmations;
+
+ emit HashReceived(_srcChainId, msg.sender, _lookupHash, _blockData, _confirmations);
+ }
+
+ //----------------------------------------------------------------------------------
+ // Other Library Interfaces
+
+ // default to DEFAULT setting if ZERO value
+ function getAppConfig(
+ uint16 _remoteChainId,
+ address _ua
+ ) external view override returns (ApplicationConfiguration memory) {
+ return _getAppConfig(_remoteChainId, _ua);
+ }
+
+ function _getAppConfig(uint16 _remoteChainId, address _ua) internal view returns (ApplicationConfiguration memory) {
+ ApplicationConfiguration memory config = appConfig[_ua][_remoteChainId];
+ ApplicationConfiguration storage defaultConfig = defaultAppConfig[_remoteChainId];
+
+ if (config.inboundProofLibraryVersion == 0) {
+ config.inboundProofLibraryVersion = defaultConfig.inboundProofLibraryVersion;
+ }
+
+ if (config.inboundBlockConfirmations == 0) {
+ config.inboundBlockConfirmations = defaultConfig.inboundBlockConfirmations;
+ }
+
+ if (config.relayer == address(0x0)) {
+ config.relayer = defaultConfig.relayer;
+ }
+
+ if (config.outboundProofType == 0) {
+ config.outboundProofType = defaultConfig.outboundProofType;
+ }
+
+ if (config.outboundBlockConfirmations == 0) {
+ config.outboundBlockConfirmations = defaultConfig.outboundBlockConfirmations;
+ }
+
+ if (config.oracle == address(0x0)) {
+ config.oracle = defaultConfig.oracle;
+ }
+
+ return config;
+ }
+
+ function setConfig(
+ uint16 _remoteChainId,
+ address _ua,
+ uint _configType,
+ bytes calldata _config
+ ) external override onlyEndpoint {
+ ApplicationConfiguration storage uaConfig = appConfig[_ua][_remoteChainId];
+ if (_configType == CONFIG_TYPE_INBOUND_PROOF_LIBRARY_VERSION) {
+ uint16 inboundProofLibraryVersion = abi.decode(_config, (uint16));
+ require(
+ inboundProofLibraryVersion <= maxInboundProofLibrary[_remoteChainId],
+ "LayerZero: invalid inbound proof library version"
+ );
+ uaConfig.inboundProofLibraryVersion = inboundProofLibraryVersion;
+ } else if (_configType == CONFIG_TYPE_INBOUND_BLOCK_CONFIRMATIONS) {
+ uint64 blockConfirmations = abi.decode(_config, (uint64));
+ uaConfig.inboundBlockConfirmations = blockConfirmations;
+ } else if (_configType == CONFIG_TYPE_RELAYER) {
+ address relayer = abi.decode(_config, (address));
+ uaConfig.relayer = relayer;
+ } else if (_configType == CONFIG_TYPE_OUTBOUND_PROOF_TYPE) {
+ uint16 outboundProofType = abi.decode(_config, (uint16));
+ require(
+ supportedOutboundProof[_remoteChainId][outboundProofType] || outboundProofType == 0,
+ "LayerZero: invalid outbound proof type"
+ );
+ uaConfig.outboundProofType = outboundProofType;
+ } else if (_configType == CONFIG_TYPE_OUTBOUND_BLOCK_CONFIRMATIONS) {
+ uint64 blockConfirmations = abi.decode(_config, (uint64));
+ uaConfig.outboundBlockConfirmations = blockConfirmations;
+ } else if (_configType == CONFIG_TYPE_ORACLE) {
+ address oracle = abi.decode(_config, (address));
+ uaConfig.oracle = oracle;
+ } else {
+ revert("LayerZero: Invalid config type");
+ }
+
+ emit AppConfigUpdated(_ua, _configType, _config);
+ }
+
+ function getConfig(
+ uint16 _remoteChainId,
+ address _ua,
+ uint _configType
+ ) external view override returns (bytes memory) {
+ ApplicationConfiguration storage uaConfig = appConfig[_ua][_remoteChainId];
+
+ if (_configType == CONFIG_TYPE_INBOUND_PROOF_LIBRARY_VERSION) {
+ if (uaConfig.inboundProofLibraryVersion == 0) {
+ return abi.encode(defaultAppConfig[_remoteChainId].inboundProofLibraryVersion);
+ }
+ return abi.encode(uaConfig.inboundProofLibraryVersion);
+ } else if (_configType == CONFIG_TYPE_INBOUND_BLOCK_CONFIRMATIONS) {
+ if (uaConfig.inboundBlockConfirmations == 0) {
+ return abi.encode(defaultAppConfig[_remoteChainId].inboundBlockConfirmations);
+ }
+ return abi.encode(uaConfig.inboundBlockConfirmations);
+ } else if (_configType == CONFIG_TYPE_RELAYER) {
+ if (uaConfig.relayer == address(0x0)) {
+ return abi.encode(defaultAppConfig[_remoteChainId].relayer);
+ }
+ return abi.encode(uaConfig.relayer);
+ } else if (_configType == CONFIG_TYPE_OUTBOUND_PROOF_TYPE) {
+ if (uaConfig.outboundProofType == 0) {
+ return abi.encode(defaultAppConfig[_remoteChainId].outboundProofType);
+ }
+ return abi.encode(uaConfig.outboundProofType);
+ } else if (_configType == CONFIG_TYPE_OUTBOUND_BLOCK_CONFIRMATIONS) {
+ if (uaConfig.outboundBlockConfirmations == 0) {
+ return abi.encode(defaultAppConfig[_remoteChainId].outboundBlockConfirmations);
+ }
+ return abi.encode(uaConfig.outboundBlockConfirmations);
+ } else if (_configType == CONFIG_TYPE_ORACLE) {
+ if (uaConfig.oracle == address(0x0)) {
+ return abi.encode(defaultAppConfig[_remoteChainId].oracle);
+ }
+ return abi.encode(uaConfig.oracle);
+ } else {
+ revert("LayerZero: Invalid config type");
+ }
+ }
+
+ // returns the native fee the UA pays to cover fees
+ function estimateFees(
+ uint16 _dstChainId,
+ address _ua,
+ bytes calldata _payload,
+ bool _payInZRO,
+ bytes calldata _adapterParams
+ ) external view override returns (uint nativeFee, uint zroFee) {
+ ApplicationConfiguration memory uaConfig = _getAppConfig(_dstChainId, _ua);
+
+ // Relayer Fee
+ bytes memory adapterParams;
+ if (_adapterParams.length > 0) {
+ adapterParams = _adapterParams;
+ } else {
+ adapterParams = defaultAdapterParams[_dstChainId][uaConfig.outboundProofType];
+ }
+ uint relayerFee = ILayerZeroRelayerV2(uaConfig.relayer).getFee(
+ _dstChainId,
+ uaConfig.outboundProofType,
+ _ua,
+ _payload.length,
+ adapterParams
+ );
+
+ // Oracle Fee
+ address ua = _ua; // stack too deep
+ uint oracleFee = ILayerZeroOracleV2(uaConfig.oracle).getFee(
+ _dstChainId,
+ uaConfig.outboundProofType,
+ uaConfig.outboundBlockConfirmations,
+ ua
+ );
+
+ // LayerZero Fee
+ uint protocolFee = treasuryContract.getFees(_payInZRO, relayerFee, oracleFee);
+ _payInZRO ? zroFee = protocolFee : nativeFee = protocolFee;
+
+ // return the sum of fees
+ nativeFee = nativeFee.add(relayerFee).add(oracleFee);
+ }
+
+ //---------------------------------------------------------------------------
+ // Claim Fees
+
+ // universal withdraw ZRO token function
+ function withdrawZRO(address _to, uint _amount) external override nonReentrant {
+ require(msg.sender == address(treasuryContract), "LayerZero: only treasury");
+ treasuryZROFees = treasuryZROFees.sub(_amount);
+ layerZeroToken.safeTransfer(_to, _amount);
+ emit WithdrawZRO(msg.sender, _to, _amount);
+ }
+
+ // universal withdraw native token function.
+ // the source contract should perform all the authentication control
+ function withdrawNative(address payable _to, uint _amount) external override nonReentrant {
+ require(_to != address(0x0), "LayerZero: _to cannot be zero address");
+ nativeFees[msg.sender] = nativeFees[msg.sender].sub(_amount);
+
+ (bool success, ) = _to.call{value: _amount}("");
+ require(success, "LayerZero: withdraw failed");
+ emit WithdrawNative(msg.sender, _to, _amount);
+ }
+
+ //---------------------------------------------------------------------------
+ // Owner calls, configuration only.
+ function setLayerZeroToken(address _layerZeroToken) external onlyOwner {
+ require(_layerZeroToken != address(0x0), "LayerZero: _layerZeroToken cannot be zero address");
+ layerZeroToken = IERC20(_layerZeroToken);
+ emit SetLayerZeroToken(_layerZeroToken);
+ }
+
+ function setTreasury(address _treasury) external onlyOwner {
+ require(_treasury != address(0x0), "LayerZero: treasury cannot be zero address");
+ treasuryContract = ILayerZeroTreasury(_treasury);
+ emit SetTreasury(_treasury);
+ }
+
+ function addInboundProofLibraryForChain(uint16 _chainId, address _library) external onlyOwner {
+ require(_library != address(0x0), "LayerZero: library cannot be zero address");
+ uint16 libId = maxInboundProofLibrary[_chainId];
+ require(libId < 65535, "LayerZero: can not add new library");
+ maxInboundProofLibrary[_chainId] = ++libId;
+ inboundProofLibrary[_chainId][libId] = _library;
+ emit AddInboundProofLibraryForChain(_chainId, _library);
+ }
+
+ function enableSupportedOutboundProof(uint16 _chainId, uint16 _proofType) external onlyOwner {
+ supportedOutboundProof[_chainId][_proofType] = true;
+ emit EnableSupportedOutboundProof(_chainId, _proofType);
+ }
+
+ function setDefaultConfigForChainId(
+ uint16 _chainId,
+ uint16 _inboundProofLibraryVersion,
+ uint64 _inboundBlockConfirmations,
+ address _relayer,
+ uint16 _outboundProofType,
+ uint64 _outboundBlockConfirmations,
+ address _oracle
+ ) external onlyOwner {
+ require(
+ _inboundProofLibraryVersion <= maxInboundProofLibrary[_chainId] && _inboundProofLibraryVersion > 0,
+ "LayerZero: invalid inbound proof library version"
+ );
+ require(_inboundBlockConfirmations > 0, "LayerZero: invalid inbound block confirmation");
+ require(_relayer != address(0x0), "LayerZero: invalid relayer address");
+ require(supportedOutboundProof[_chainId][_outboundProofType], "LayerZero: invalid outbound proof type");
+ require(_outboundBlockConfirmations > 0, "LayerZero: invalid outbound block confirmation");
+ require(_oracle != address(0x0), "LayerZero: invalid oracle address");
+ defaultAppConfig[_chainId] = ApplicationConfiguration(
+ _inboundProofLibraryVersion,
+ _inboundBlockConfirmations,
+ _relayer,
+ _outboundProofType,
+ _outboundBlockConfirmations,
+ _oracle
+ );
+ emit SetDefaultConfigForChainId(
+ _chainId,
+ _inboundProofLibraryVersion,
+ _inboundBlockConfirmations,
+ _relayer,
+ _outboundProofType,
+ _outboundBlockConfirmations,
+ _oracle
+ );
+ }
+
+ function setDefaultAdapterParamsForChainId(
+ uint16 _chainId,
+ uint16 _proofType,
+ bytes calldata _adapterParams
+ ) external onlyOwner {
+ defaultAdapterParams[_chainId][_proofType] = _adapterParams;
+ emit SetDefaultAdapterParamsForChainId(_chainId, _proofType, _adapterParams);
+ }
+
+ function setRemoteUln(uint16 _remoteChainId, bytes32 _remoteUln) external onlyOwner {
+ require(ulnLookup[_remoteChainId] == bytes32(0), "LayerZero: remote uln already set");
+ ulnLookup[_remoteChainId] = _remoteUln;
+ emit SetRemoteUln(_remoteChainId, _remoteUln);
+ }
+
+ function setChainAddressSize(uint16 _chainId, uint _size) external onlyOwner {
+ require(chainAddressSizeMap[_chainId] == 0, "LayerZero: remote chain address size already set");
+ chainAddressSizeMap[_chainId] = _size;
+ emit SetChainAddressSize(_chainId, _size);
+ }
+
+ //----------------------------------------------------------------------------------
+ // view functions
+
+ function accruedNativeFee(address _address) external view override returns (uint) {
+ return nativeFees[_address];
+ }
+
+ function getOutboundNonce(uint16 _chainId, bytes calldata _path) external view override returns (uint64) {
+ return nonceContract.outboundNonce(_chainId, _path);
+ }
+
+ function _isContract(address addr) internal view returns (bool) {
+ uint size;
+ assembly {
+ size := extcodesize(addr)
+ }
+ return size != 0;
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/DVN.sol b/endpoint/contracts/LayerZeroV2/DVN.sol
new file mode 100644
index 0000000..1160eaa
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/DVN.sol
@@ -0,0 +1,349 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { ILayerZeroUltraLightNodeV2 } from "@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol";
+
+import { Worker } from "../../Worker.sol";
+import { MultiSig } from "./MultiSig.sol";
+import { IDVN } from "../interfaces/IDVN.sol";
+import { IDVNFeeLib } from "../interfaces/IDVNFeeLib.sol";
+import { IReceiveUlnE2 } from "../interfaces/IReceiveUlnE2.sol";
+
+struct ExecuteParam {
+ uint32 vid;
+ address target;
+ bytes callData;
+ uint256 expiration;
+ bytes signatures;
+}
+
+contract DVN is Worker, MultiSig, IDVN {
+ // to uniquely identify this DVN instance
+ // set to endpoint v1 eid if available OR endpoint v2 eid % 30_000
+ uint32 public immutable vid;
+
+ mapping(uint32 dstEid => DstConfig) public dstConfig;
+ mapping(bytes32 executableHash => bool used) public usedHashes;
+
+ error DVN_OnlySelf();
+ error DVN_InvalidRole(bytes32 role);
+ error DVN_InstructionExpired();
+ error DVN_InvalidTarget(address target);
+ error DVN_InvalidVid(uint32 vid);
+ error DVN_InvalidSignatures();
+ error DVN_DuplicatedHash(bytes32 executableHash);
+
+ event VerifySignaturesFailed(uint256 idx);
+ event ExecuteFailed(uint256 _index, bytes _data);
+ event HashAlreadyUsed(ExecuteParam param, bytes32 _hash);
+ // same as DVNFeePaid, but for ULNv2
+ event VerifierFeePaid(uint256 fee);
+
+ // ========================= Constructor =========================
+
+ /// @dev DVN doesn't have a roleAdmin (address(0x0))
+ /// @dev Supports all of ULNv2, ULN301, ULN302 and more
+ /// @param _vid unique identifier for this DVN instance
+ /// @param _messageLibs array of message lib addresses that are granted the MESSAGE_LIB_ROLE
+ /// @param _priceFeed price feed address
+ /// @param _signers array of signer addresses for multisig
+ /// @param _quorum quorum for multisig
+ /// @param _admins array of admin addresses that are granted the ADMIN_ROLE
+ constructor(
+ uint32 _vid,
+ address[] memory _messageLibs,
+ address _priceFeed,
+ address[] memory _signers,
+ uint64 _quorum,
+ address[] memory _admins
+ ) Worker(_messageLibs, _priceFeed, 12000, address(0x0), _admins) MultiSig(_signers, _quorum) {
+ vid = _vid;
+ }
+
+ // ========================= Modifier =========================
+
+ /// @dev depending on role, restrict access to only self or admin
+ /// @dev ALLOWLIST, DENYLIST, MESSAGE_LIB_ROLE can only be granted/revoked by self
+ /// @dev ADMIN_ROLE can only be granted/revoked by admin
+ /// @dev reverts if not one of the above roles
+ /// @param _role role to check
+ modifier onlySelfOrAdmin(bytes32 _role) {
+ if (_role == ALLOWLIST || _role == DENYLIST || _role == MESSAGE_LIB_ROLE) {
+ // self required
+ if (address(this) != msg.sender) {
+ revert DVN_OnlySelf();
+ }
+ } else if (_role == ADMIN_ROLE) {
+ // admin required
+ _checkRole(ADMIN_ROLE);
+ } else {
+ revert DVN_InvalidRole(_role);
+ }
+ _;
+ }
+
+ modifier onlySelf() {
+ if (address(this) != msg.sender) {
+ revert DVN_OnlySelf();
+ }
+ _;
+ }
+
+ // ========================= OnlySelf =========================
+
+ /// @dev set signers for multisig
+ /// @dev function sig 0x31cb6105
+ /// @param _signer signer address
+ /// @param _active true to add, false to remove
+ function setSigner(address _signer, bool _active) external onlySelf {
+ _setSigner(_signer, _active);
+ }
+
+ /// @dev set quorum for multisig
+ /// @dev function sig 0x8585c945
+ /// @param _quorum to set
+ function setQuorum(uint64 _quorum) external onlySelf {
+ _setQuorum(_quorum);
+ }
+
+ // ========================= OnlySelf / OnlyAdmin =========================
+
+ /// @dev overrides AccessControl to allow self/admin to grant role'
+ /// @dev function sig 0x2f2ff15d
+ /// @param _role role to grant
+ /// @param _account account to grant role to
+ function grantRole(bytes32 _role, address _account) public override onlySelfOrAdmin(_role) {
+ _grantRole(_role, _account);
+ }
+
+ /// @dev overrides AccessControl to allow self/admin to revoke role
+ /// @dev function sig 0xd547741f
+ /// @param _role role to revoke
+ /// @param _account account to revoke role from
+ function revokeRole(bytes32 _role, address _account) public override onlySelfOrAdmin(_role) {
+ _revokeRole(_role, _account);
+ }
+
+ // ========================= OnlyQuorum =========================
+
+ /// @notice function for quorum to change admin without going through execute function
+ /// @dev calldata in the case is abi.encode new admin address
+ function quorumChangeAdmin(ExecuteParam calldata _param) external {
+ if (_param.expiration <= block.timestamp) {
+ revert DVN_InstructionExpired();
+ }
+ if (_param.target != address(this)) {
+ revert DVN_InvalidTarget(_param.target);
+ }
+ if (_param.vid != vid) {
+ revert DVN_InvalidVid(_param.vid);
+ }
+
+ // generate and validate hash
+ bytes32 hash = hashCallData(_param.vid, _param.target, _param.callData, _param.expiration);
+ (bool sigsValid, ) = verifySignatures(hash, _param.signatures);
+ if (!sigsValid) {
+ revert DVN_InvalidSignatures();
+ }
+ if (usedHashes[hash]) {
+ revert DVN_DuplicatedHash(hash);
+ }
+
+ usedHashes[hash] = true;
+ _grantRole(ADMIN_ROLE, abi.decode(_param.callData, (address)));
+ }
+
+ // ========================= OnlyAdmin =========================
+
+ /// @param _params array of DstConfigParam
+ function setDstConfig(DstConfigParam[] calldata _params) external onlyRole(ADMIN_ROLE) {
+ for (uint256 i = 0; i < _params.length; ++i) {
+ DstConfigParam calldata param = _params[i];
+ dstConfig[param.dstEid] = DstConfig(param.gas, param.multiplierBps, param.floorMarginUSD);
+ }
+ emit SetDstConfig(_params);
+ }
+
+ /// @dev takes a list of instructions and executes them in order
+ /// @dev if any of the instructions fail, it will emit an error event and continue to execute the rest of the instructions
+ /// @param _params array of ExecuteParam, includes target, callData, expiration, signatures
+ function execute(ExecuteParam[] calldata _params) external onlyRole(ADMIN_ROLE) {
+ for (uint256 i = 0; i < _params.length; ++i) {
+ ExecuteParam calldata param = _params[i];
+ // 1. skip if invalid vid
+ if (param.vid != vid) {
+ continue;
+ }
+
+ // 2. skip if expired
+ if (param.expiration <= block.timestamp) {
+ continue;
+ }
+
+ // generate and validate hash
+ bytes32 hash = hashCallData(param.vid, param.target, param.callData, param.expiration);
+
+ // 3. check signatures
+ (bool sigsValid, ) = verifySignatures(hash, param.signatures);
+ if (!sigsValid) {
+ emit VerifySignaturesFailed(i);
+ continue;
+ }
+
+ // 4. should check hash
+ bool shouldCheckHash = _shouldCheckHash(bytes4(param.callData));
+ if (shouldCheckHash) {
+ if (usedHashes[hash]) {
+ emit HashAlreadyUsed(param, hash);
+ continue;
+ } else {
+ usedHashes[hash] = true; // prevent reentry and replay attack
+ }
+ }
+
+ (bool success, bytes memory rtnData) = param.target.call(param.callData);
+ if (!success) {
+ if (shouldCheckHash) {
+ // need to unset the usedHash otherwise it cant be used
+ usedHashes[hash] = false;
+ }
+ // emit an event in any case
+ emit ExecuteFailed(i, rtnData);
+ }
+ }
+ }
+
+ /// @dev to support ULNv2
+ /// @dev the withdrawFee function for ULN30X is built in the Worker contract
+ /// @param _lib message lib address
+ /// @param _to address to withdraw to
+ /// @param _amount amount to withdraw
+ function withdrawFeeFromUlnV2(address _lib, address payable _to, uint256 _amount) external onlyRole(ADMIN_ROLE) {
+ if (!hasRole(MESSAGE_LIB_ROLE, _lib)) {
+ revert Worker_OnlyMessageLib();
+ }
+ ILayerZeroUltraLightNodeV2(_lib).withdrawNative(_to, _amount);
+ }
+
+ // ========================= OnlyMessageLib =========================
+
+ /// @dev for ULN301, ULN302 and more to assign job
+ /// @dev dvn network can reject job from _sender by adding/removing them from allowlist/denylist
+ /// @param _param assign job param
+ /// @param _options dvn options
+ function assignJob(
+ AssignJobParam calldata _param,
+ bytes calldata _options
+ ) external payable onlyRole(MESSAGE_LIB_ROLE) onlyAcl(_param.sender) returns (uint256 totalFee) {
+ IDVNFeeLib.FeeParams memory feeParams = IDVNFeeLib.FeeParams(
+ priceFeed,
+ _param.dstEid,
+ _param.confirmations,
+ _param.sender,
+ quorum,
+ defaultMultiplierBps
+ );
+ totalFee = IDVNFeeLib(workerFeeLib).getFeeOnSend(feeParams, dstConfig[_param.dstEid], _options);
+ }
+
+ /// @dev to support ULNv2
+ /// @dev dvn network can reject job from _sender by adding/removing them from allowlist/denylist
+ /// @param _dstEid destination EndpointId
+ /// @param //_outboundProofType outbound proof type
+ /// @param _confirmations block confirmations
+ /// @param _sender message sender address
+ function assignJob(
+ uint16 _dstEid,
+ uint16 /*_outboundProofType*/,
+ uint64 _confirmations,
+ address _sender
+ ) external onlyRole(MESSAGE_LIB_ROLE) onlyAcl(_sender) returns (uint256 totalFee) {
+ IDVNFeeLib.FeeParams memory params = IDVNFeeLib.FeeParams(
+ priceFeed,
+ _dstEid,
+ _confirmations,
+ _sender,
+ quorum,
+ defaultMultiplierBps
+ );
+ // ULNV2 does not have dvn options
+ totalFee = IDVNFeeLib(workerFeeLib).getFeeOnSend(params, dstConfig[_dstEid], bytes(""));
+ emit VerifierFeePaid(totalFee);
+ }
+
+ // ========================= View =========================
+
+ /// @dev getFee can revert if _sender doesn't pass ACL
+ /// @param _dstEid destination EndpointId
+ /// @param _confirmations block confirmations
+ /// @param _sender message sender address
+ /// @param _options dvn options
+ /// @return fee fee in native amount
+ function getFee(
+ uint32 _dstEid,
+ uint64 _confirmations,
+ address _sender,
+ bytes calldata _options
+ ) external view onlyAcl(_sender) returns (uint256 fee) {
+ IDVNFeeLib.FeeParams memory params = IDVNFeeLib.FeeParams(
+ priceFeed,
+ _dstEid,
+ _confirmations,
+ _sender,
+ quorum,
+ defaultMultiplierBps
+ );
+ return IDVNFeeLib(workerFeeLib).getFee(params, dstConfig[_dstEid], _options);
+ }
+
+ /// @dev to support ULNv2
+ /// @dev getFee can revert if _sender doesn't pass ACL
+ /// @param _dstEid destination EndpointId
+ /// @param //_outboundProofType outbound proof type
+ /// @param _confirmations block confirmations
+ /// @param _sender message sender address
+ function getFee(
+ uint16 _dstEid,
+ uint16 /*_outboundProofType*/,
+ uint64 _confirmations,
+ address _sender
+ ) public view onlyAcl(_sender) returns (uint256 fee) {
+ IDVNFeeLib.FeeParams memory params = IDVNFeeLib.FeeParams(
+ priceFeed,
+ _dstEid,
+ _confirmations,
+ _sender,
+ quorum,
+ defaultMultiplierBps
+ );
+ return IDVNFeeLib(workerFeeLib).getFee(params, dstConfig[_dstEid], bytes(""));
+ }
+
+ /// @param _target target address
+ /// @param _callData call data
+ /// @param _expiration expiration timestamp
+ /// @return hash of above
+ function hashCallData(
+ uint32 _vid,
+ address _target,
+ bytes calldata _callData,
+ uint256 _expiration
+ ) public pure returns (bytes32) {
+ return keccak256(abi.encodePacked(_vid, _target, _expiration, _callData));
+ }
+
+ // ========================= Internal =========================
+
+ /// @dev to save gas, we don't check hash for some functions (where replaying won't change the state)
+ /// @dev for example, some administrative functions like changing signers, the contract should check hash to double spending
+ /// @dev should ensure that all onlySelf functions have unique functionSig
+ /// @param _functionSig function signature
+ /// @return true if should check hash
+ function _shouldCheckHash(bytes4 _functionSig) internal pure returns (bool) {
+ // never check for these selectors to save gas
+ return
+ _functionSig != IReceiveUlnE2.verify.selector && // 0x0223536e, replaying won't change the state
+ _functionSig != ILayerZeroUltraLightNodeV2.updateHash.selector; // 0x704316e5, replaying will be revert at uln
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/DVNFeeLib.sol b/endpoint/contracts/LayerZeroV2/DVNFeeLib.sol
new file mode 100644
index 0000000..9001e6c
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/DVNFeeLib.sol
@@ -0,0 +1,145 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
+import { Transfer } from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol";
+
+import { ILayerZeroPriceFeed } from "../../interfaces/ILayerZeroPriceFeed.sol";
+import { IDVN } from "../interfaces/IDVN.sol";
+import { IDVNFeeLib } from "../interfaces/IDVNFeeLib.sol";
+import { DVNOptions } from "../libs/DVNOptions.sol";
+
+contract DVNFeeLib is Ownable, IDVNFeeLib {
+ using DVNOptions for bytes;
+
+ uint16 internal constant EXECUTE_FIXED_BYTES = 68; // encoded: funcSigHash + params -> 4 + (32 * 2)
+ uint16 internal constant SIGNATURE_RAW_BYTES = 65; // not encoded
+ // callData(updateHash) = 132 (4 + 32 * 4), padded to 32 = 160 and encoded as bytes with an 64 byte overhead = 224
+ uint16 internal constant UPDATE_HASH_BYTES = 224;
+
+ uint256 private immutable nativeDecimalsRate;
+
+ constructor(uint256 _nativeDecimalsRate) {
+ nativeDecimalsRate = _nativeDecimalsRate;
+ }
+
+ // ================================ OnlyOwner ================================
+ function withdrawToken(address _token, address _to, uint256 _amount) external onlyOwner {
+ // transfers native if _token is address(0x0)
+ Transfer.nativeOrToken(_token, _to, _amount);
+ }
+
+ // ========================= External =========================
+ /// @dev get fee function that can change state. e.g. paying priceFeed
+ /// @param _params fee params
+ /// @param _dstConfig dst config
+ /// @param //_options options
+ function getFeeOnSend(
+ FeeParams calldata _params,
+ IDVN.DstConfig calldata _dstConfig,
+ bytes calldata _options
+ ) external payable returns (uint256) {
+ if (_dstConfig.gas == 0) revert DVN_EidNotSupported(_params.dstEid);
+
+ _decodeDVNOptions(_options); // todo: validate options
+
+ uint256 callDataSize = _getCallDataSize(_params.quorum);
+
+ // for future versions where priceFeed charges a fee
+ // uint256 priceFeedFee = ILayerZeroPriceFeed(_params.priceFeed).getFee(_params.dstEid, callDataSize, _dstConfig.gas);
+ // (uint256 fee, , , uint128 nativePriceUSD) = ILayerZeroPriceFeed(_params.priceFeed).estimateFeeOnSend{
+ // value: priceFeedFee
+ // }(_params.dstEid, callDataSize, _dstConfig.gas);
+
+ (uint256 fee, , , uint128 nativePriceUSD) = ILayerZeroPriceFeed(_params.priceFeed).estimateFeeOnSend(
+ _params.dstEid,
+ callDataSize,
+ _dstConfig.gas
+ );
+
+ return
+ _applyPremium(
+ fee,
+ _dstConfig.multiplierBps,
+ _params.defaultMultiplierBps,
+ _dstConfig.floorMarginUSD,
+ nativePriceUSD
+ );
+ }
+
+ // ========================= View =========================
+ /// @dev get fee view function
+ /// @param _params fee params
+ /// @param _dstConfig dst config
+ /// @param //_options options
+ function getFee(
+ FeeParams calldata _params,
+ IDVN.DstConfig calldata _dstConfig,
+ bytes calldata _options
+ ) external view returns (uint256) {
+ if (_dstConfig.gas == 0) revert DVN_EidNotSupported(_params.dstEid);
+
+ _decodeDVNOptions(_options); // validate options
+
+ uint256 callDataSize = _getCallDataSize(_params.quorum);
+ (uint256 fee, , , uint128 nativePriceUSD) = ILayerZeroPriceFeed(_params.priceFeed).estimateFeeByEid(
+ _params.dstEid,
+ callDataSize,
+ _dstConfig.gas
+ );
+ return
+ _applyPremium(
+ fee,
+ _dstConfig.multiplierBps,
+ _params.defaultMultiplierBps,
+ _dstConfig.floorMarginUSD,
+ nativePriceUSD
+ );
+ }
+
+ // ========================= Internal =========================
+ function _getCallDataSize(uint256 _quorum) internal pure returns (uint256) {
+ uint256 totalSignatureBytes = _quorum * SIGNATURE_RAW_BYTES;
+ if (totalSignatureBytes % 32 != 0) {
+ totalSignatureBytes = totalSignatureBytes - (totalSignatureBytes % 32) + 32;
+ }
+ // getFee should charge on execute(updateHash)
+ // totalSignatureBytesPadded also has 64 overhead for bytes
+ return uint256(EXECUTE_FIXED_BYTES) + UPDATE_HASH_BYTES + totalSignatureBytes + 64;
+ }
+
+ function _applyPremium(
+ uint256 _fee,
+ uint16 _bps,
+ uint16 _defaultBps,
+ uint128 _marginUSD,
+ uint128 _nativePriceUSD
+ ) internal view returns (uint256) {
+ uint16 multiplierBps = _bps == 0 ? _defaultBps : _bps;
+
+ uint256 feeWithMultiplier = (_fee * multiplierBps) / 10000;
+ if (_nativePriceUSD == 0 || _marginUSD == 0) {
+ return feeWithMultiplier;
+ }
+
+ uint256 feeWithFloorMargin = _fee + (_marginUSD * nativeDecimalsRate) / _nativePriceUSD;
+
+ return feeWithFloorMargin > feeWithMultiplier ? feeWithFloorMargin : feeWithMultiplier;
+ }
+
+ function _decodeDVNOptions(bytes calldata _options) internal pure returns (uint256) {
+ uint256 cursor;
+ while (cursor < _options.length) {
+ (uint8 optionType, , uint256 newCursor) = _options.nextDVNOption(cursor);
+ cursor = newCursor;
+ revert DVN_UnsupportedOptionType(optionType);
+ }
+ if (cursor != _options.length) revert DVNOptions.DVN_InvalidDVNOptions(cursor);
+
+ return 0; // todo: precrime fee model
+ }
+
+ // send funds here to pay for price feed directly
+ receive() external payable {}
+}
diff --git a/endpoint/contracts/LayerZeroV2/EndpointV2View.sol b/endpoint/contracts/LayerZeroV2/EndpointV2View.sol
new file mode 100644
index 0000000..6d97be6
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/EndpointV2View.sol
@@ -0,0 +1,12 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { Proxied } from "hardhat-deploy/solc_0.8/proxy/Proxied.sol";
+import "./EndpointV2ViewUpgradeable.sol";
+
+contract EndpointV2View is EndpointV2ViewUpgradeable, Proxied {
+ function initialize(address _endpoint) external proxied initializer {
+ __EndpointV2View_init(_endpoint);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/Executor.sol b/endpoint/contracts/LayerZeroV2/Executor.sol
new file mode 100644
index 0000000..d2ed94e
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/Executor.sol
@@ -0,0 +1,281 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { ReentrancyGuardUpgradeable } from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
+import { Proxied } from "hardhat-deploy/solc_0.8/proxy/Proxied.sol";
+
+import { Origin } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";
+import { PacketV1Codec } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol";
+
+import { IUltraLightNode301 } from "./uln/uln301/interfaces/IUltraLightNode301.sol";
+import { IExecutor } from "./interfaces/IExecutor.sol";
+import { IExecutorFeeLib } from "./interfaces/IExecutorFeeLib.sol";
+import { WorkerUpgradeable } from "./upgradeable/WorkerUpgradeable.sol";
+
+interface ILayerZeroEndpointV2 {
+ function eid() external view returns (uint32);
+
+ function lzReceive(
+ Origin calldata _origin,
+ address _receiver,
+ bytes32 _guid,
+ bytes calldata _message,
+ bytes calldata _extraData
+ ) external payable;
+
+ function lzReceiveAlert(
+ Origin calldata _origin,
+ address _receiver,
+ bytes32 _guid,
+ uint256 _gas,
+ uint256 _value,
+ bytes calldata _message,
+ bytes calldata _extraData,
+ bytes calldata _reason
+ ) external;
+
+ function lzCompose(
+ address _from,
+ address _to,
+ bytes32 _guid,
+ uint16 _index,
+ bytes calldata _message,
+ bytes calldata _extraData
+ ) external payable;
+
+ function lzComposeAlert(
+ address _from,
+ address _to,
+ bytes32 _guid,
+ uint16 _index,
+ uint256 _gas,
+ uint256 _value,
+ bytes calldata _message,
+ bytes calldata _extraData,
+ bytes calldata _reason
+ ) external;
+}
+
+contract Executor is WorkerUpgradeable, ReentrancyGuardUpgradeable, Proxied, IExecutor {
+ using PacketV1Codec for bytes;
+
+ mapping(uint32 dstEid => DstConfig) public dstConfig;
+
+ // endpoint v2
+ address public endpoint;
+ uint32 public localEid;
+
+ // endpoint v1
+ address public receiveUln301;
+
+ function initialize(
+ address _endpoint,
+ address _receiveUln301,
+ address[] memory _messageLibs,
+ address _priceFeed,
+ address _roleAdmin,
+ address[] memory _admins
+ ) external proxied initializer {
+ __ReentrancyGuard_init();
+ __Worker_init(_messageLibs, _priceFeed, 12000, _roleAdmin, _admins);
+ endpoint = _endpoint;
+ localEid = ILayerZeroEndpointV2(_endpoint).eid();
+ receiveUln301 = _receiveUln301;
+ }
+
+ function onUpgrade(address _receiveUln301) external proxied {
+ receiveUln301 = _receiveUln301;
+ }
+
+ // --- Admin ---
+ function setDstConfig(DstConfigParam[] memory _params) external onlyRole(ADMIN_ROLE) {
+ for (uint256 i = 0; i < _params.length; i++) {
+ DstConfigParam memory param = _params[i];
+ dstConfig[param.dstEid] = DstConfig(
+ param.lzReceiveBaseGas,
+ param.multiplierBps,
+ param.floorMarginUSD,
+ param.nativeCap,
+ param.lzComposeBaseGas
+ );
+ }
+ emit DstConfigSet(_params);
+ }
+
+ function nativeDrop(
+ Origin calldata _origin,
+ uint32 _dstEid,
+ address _oapp,
+ NativeDropParams[] calldata _nativeDropParams,
+ uint256 _nativeDropGasLimit
+ ) external payable onlyRole(ADMIN_ROLE) nonReentrant {
+ _nativeDrop(_origin, _dstEid, _oapp, _nativeDropParams, _nativeDropGasLimit);
+ }
+
+ function nativeDropAndExecute301(
+ Origin calldata _origin,
+ NativeDropParams[] calldata _nativeDropParams,
+ uint256 _nativeDropGasLimit,
+ bytes calldata _packet,
+ uint256 _gasLimit
+ ) external payable onlyRole(ADMIN_ROLE) nonReentrant {
+ _nativeDrop(_origin, _packet.dstEid(), _packet.receiverB20(), _nativeDropParams, _nativeDropGasLimit);
+ IUltraLightNode301(receiveUln301).commitVerification(_packet, _gasLimit);
+ }
+
+ function execute301(bytes calldata _packet, uint256 _gasLimit) external onlyRole(ADMIN_ROLE) nonReentrant {
+ IUltraLightNode301(receiveUln301).commitVerification(_packet, _gasLimit);
+ }
+
+ function execute302(ExecutionParams calldata _executionParams) external payable onlyRole(ADMIN_ROLE) nonReentrant {
+ try
+ ILayerZeroEndpointV2(endpoint).lzReceive{ value: msg.value, gas: _executionParams.gasLimit }(
+ _executionParams.origin,
+ _executionParams.receiver,
+ _executionParams.guid,
+ _executionParams.message,
+ _executionParams.extraData
+ )
+ {
+ // do nothing
+ } catch (bytes memory reason) {
+ ILayerZeroEndpointV2(endpoint).lzReceiveAlert(
+ _executionParams.origin,
+ _executionParams.receiver,
+ _executionParams.guid,
+ _executionParams.gasLimit,
+ msg.value,
+ _executionParams.message,
+ _executionParams.extraData,
+ reason
+ );
+ }
+ }
+
+ function compose302(
+ address _from,
+ address _to,
+ bytes32 _guid,
+ uint16 _index,
+ bytes calldata _message,
+ bytes calldata _extraData,
+ uint256 _gasLimit
+ ) external payable onlyRole(ADMIN_ROLE) nonReentrant {
+ try
+ ILayerZeroEndpointV2(endpoint).lzCompose{ value: msg.value, gas: _gasLimit }(
+ _from,
+ _to,
+ _guid,
+ _index,
+ _message,
+ _extraData
+ )
+ {
+ // do nothing
+ } catch (bytes memory reason) {
+ ILayerZeroEndpointV2(endpoint).lzComposeAlert(
+ _from,
+ _to,
+ _guid,
+ _index,
+ _gasLimit,
+ msg.value,
+ _message,
+ _extraData,
+ reason
+ );
+ }
+ }
+
+ function nativeDropAndExecute302(
+ NativeDropParams[] calldata _nativeDropParams,
+ uint256 _nativeDropGasLimit,
+ ExecutionParams calldata _executionParams
+ ) external payable onlyRole(ADMIN_ROLE) nonReentrant {
+ uint256 spent = _nativeDrop(
+ _executionParams.origin,
+ localEid,
+ _executionParams.receiver,
+ _nativeDropParams,
+ _nativeDropGasLimit
+ );
+
+ uint256 value = msg.value - spent;
+ try
+ ILayerZeroEndpointV2(endpoint).lzReceive{ value: value, gas: _executionParams.gasLimit }(
+ _executionParams.origin,
+ _executionParams.receiver,
+ _executionParams.guid,
+ _executionParams.message,
+ _executionParams.extraData
+ )
+ {
+ // do nothing
+ } catch (bytes memory reason) {
+ ILayerZeroEndpointV2(endpoint).lzReceiveAlert(
+ _executionParams.origin,
+ _executionParams.receiver,
+ _executionParams.guid,
+ _executionParams.gasLimit,
+ value,
+ _executionParams.message,
+ _executionParams.extraData,
+ reason
+ );
+ }
+ }
+
+ // --- Message Lib ---
+ function assignJob(
+ uint32 _dstEid,
+ address _sender,
+ uint256 _calldataSize,
+ bytes calldata _options
+ ) external onlyRole(MESSAGE_LIB_ROLE) onlyAcl(_sender) whenNotPaused returns (uint256 fee) {
+ IExecutorFeeLib.FeeParams memory params = IExecutorFeeLib.FeeParams(
+ priceFeed,
+ _dstEid,
+ _sender,
+ _calldataSize,
+ defaultMultiplierBps
+ );
+ fee = IExecutorFeeLib(workerFeeLib).getFeeOnSend(params, dstConfig[_dstEid], _options);
+ }
+
+ // --- Only ACL ---
+ function getFee(
+ uint32 _dstEid,
+ address _sender,
+ uint256 _calldataSize,
+ bytes calldata _options
+ ) external view onlyAcl(_sender) whenNotPaused returns (uint256 fee) {
+ IExecutorFeeLib.FeeParams memory params = IExecutorFeeLib.FeeParams(
+ priceFeed,
+ _dstEid,
+ _sender,
+ _calldataSize,
+ defaultMultiplierBps
+ );
+ fee = IExecutorFeeLib(workerFeeLib).getFee(params, dstConfig[_dstEid], _options);
+ }
+
+ function _nativeDrop(
+ Origin calldata _origin,
+ uint32 _dstEid,
+ address _oapp,
+ NativeDropParams[] calldata _nativeDropParams,
+ uint256 _nativeDropGasLimit
+ ) internal returns (uint256 spent) {
+ bool[] memory success = new bool[](_nativeDropParams.length);
+ for (uint256 i = 0; i < _nativeDropParams.length; i++) {
+ NativeDropParams memory param = _nativeDropParams[i];
+
+ (bool sent, ) = param.receiver.call{ value: param.amount, gas: _nativeDropGasLimit }("");
+
+ success[i] = sent;
+ spent += param.amount;
+ }
+ emit NativeDropApplied(_origin, _dstEid, _oapp, _nativeDropParams, success);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/ExecutorFeeLib.sol b/endpoint/contracts/LayerZeroV2/ExecutorFeeLib.sol
new file mode 100644
index 0000000..c74d191
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/ExecutorFeeLib.sol
@@ -0,0 +1,184 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
+
+import { Transfer } from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol";
+import { ExecutorOptions } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol";
+
+import { ILayerZeroPriceFeed } from "./interfaces/ILayerZeroPriceFeed.sol";
+import { IExecutor } from "./interfaces/IExecutor.sol";
+import { IExecutorFeeLib } from "./interfaces/IExecutorFeeLib.sol";
+
+contract ExecutorFeeLib is Ownable, IExecutorFeeLib {
+ using ExecutorOptions for bytes;
+
+ uint256 private immutable nativeDecimalsRate;
+
+ constructor(uint256 _nativeDecimalsRate) {
+ nativeDecimalsRate = _nativeDecimalsRate;
+ }
+
+ // ================================ OnlyOwner ================================
+ function withdrawToken(address _token, address _to, uint256 _amount) external onlyOwner {
+ // transfers native if _token is address(0x0)
+ Transfer.nativeOrToken(_token, _to, _amount);
+ }
+
+ // ================================ External ================================
+ function getFeeOnSend(
+ FeeParams calldata _params,
+ IExecutor.DstConfig calldata _dstConfig,
+ bytes calldata _options
+ ) external returns (uint256 fee) {
+ if (_dstConfig.lzReceiveBaseGas == 0) revert Executor_EidNotSupported(_params.dstEid);
+
+ (uint256 totalDstAmount, uint256 totalGas) = _decodeExecutorOptions(
+ _isV1Eid(_params.dstEid),
+ _dstConfig.lzReceiveBaseGas,
+ _dstConfig.lzComposeBaseGas,
+ _dstConfig.nativeCap,
+ _options
+ );
+
+ // for future versions where priceFeed charges a fee
+ (
+ uint256 totalGasFee,
+ uint128 priceRatio,
+ uint128 priceRatioDenominator,
+ uint128 nativePriceUSD
+ ) = ILayerZeroPriceFeed(_params.priceFeed).estimateFeeOnSend(_params.dstEid, _params.calldataSize, totalGas);
+
+ uint16 multiplierBps = _dstConfig.multiplierBps == 0 ? _params.defaultMultiplierBps : _dstConfig.multiplierBps;
+
+ fee = _applyPremiumToGas(totalGasFee, multiplierBps, _dstConfig.floorMarginUSD, nativePriceUSD);
+ fee += _convertAndApplyPremiumToValue(totalDstAmount, priceRatio, priceRatioDenominator, multiplierBps);
+ }
+
+ // ================================ View ================================
+ function getFee(
+ FeeParams calldata _params,
+ IExecutor.DstConfig calldata _dstConfig,
+ bytes calldata _options
+ ) external view returns (uint256 fee) {
+ if (_dstConfig.lzReceiveBaseGas == 0) revert Executor_EidNotSupported(_params.dstEid);
+
+ (uint256 totalDstAmount, uint256 totalGas) = _decodeExecutorOptions(
+ _isV1Eid(_params.dstEid),
+ _dstConfig.lzReceiveBaseGas,
+ _dstConfig.lzComposeBaseGas,
+ _dstConfig.nativeCap,
+ _options
+ );
+
+ (
+ uint256 totalGasFee,
+ uint128 priceRatio,
+ uint128 priceRatioDenominator,
+ uint128 nativePriceUSD
+ ) = ILayerZeroPriceFeed(_params.priceFeed).estimateFeeByEid(_params.dstEid, _params.calldataSize, totalGas);
+
+ uint16 multiplierBps = _dstConfig.multiplierBps == 0 ? _params.defaultMultiplierBps : _dstConfig.multiplierBps;
+
+ fee = _applyPremiumToGas(totalGasFee, multiplierBps, _dstConfig.floorMarginUSD, nativePriceUSD);
+ fee += _convertAndApplyPremiumToValue(totalDstAmount, priceRatio, priceRatioDenominator, multiplierBps);
+ }
+
+ // ================================ Internal ================================
+ // @dev decode executor options into dstAmount and totalGas
+ function _decodeExecutorOptions(
+ bool _v1Eid,
+ uint64 _lzReceiveBaseGas,
+ uint64 _lzComposeBaseGas,
+ uint128 _nativeCap,
+ bytes calldata _options
+ ) internal pure returns (uint256 dstAmount, uint256 totalGas) {
+ if (_options.length == 0) {
+ revert Executor_NoOptions();
+ }
+
+ uint256 cursor = 0;
+ bool ordered = false;
+ totalGas = _lzReceiveBaseGas; // lz receive only called once
+
+ bool v1Eid = _v1Eid; // stack too deep
+ uint256 lzReceiveGas;
+ 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);
+
+ // endpoint v1 does not support lzReceive with value
+ if (v1Eid && value > 0) revert Executor_UnsupportedOptionType(optionType);
+
+ dstAmount += value;
+ lzReceiveGas += gas;
+ } else if (optionType == ExecutorOptions.OPTION_TYPE_NATIVE_DROP) {
+ (uint128 nativeDropAmount, ) = ExecutorOptions.decodeNativeDropOption(option);
+ dstAmount += nativeDropAmount;
+ } else if (optionType == ExecutorOptions.OPTION_TYPE_LZCOMPOSE) {
+ // endpoint v1 does not support lzCompose
+ if (v1Eid) revert Executor_UnsupportedOptionType(optionType);
+
+ (, uint128 gas, uint128 value) = ExecutorOptions.decodeLzComposeOption(option);
+ if (gas == 0) revert Executor_ZeroLzComposeGasProvided();
+
+ dstAmount += value;
+ // lz compose can be called multiple times, based on unique index
+ // to simplify the quoting, we add lzComposeBaseGas for each lzComposeOption received
+ // if the same index has multiple compose options, the gas will be added multiple times
+ totalGas += gas + _lzComposeBaseGas;
+ } else if (optionType == ExecutorOptions.OPTION_TYPE_ORDERED_EXECUTION) {
+ ordered = true;
+ } else {
+ revert Executor_UnsupportedOptionType(optionType);
+ }
+ }
+ if (cursor != _options.length) revert Executor_InvalidExecutorOptions(cursor);
+ if (dstAmount > _nativeCap) revert Executor_NativeAmountExceedsCap(dstAmount, _nativeCap);
+ if (lzReceiveGas == 0) revert Executor_ZeroLzReceiveGasProvided();
+ totalGas += lzReceiveGas;
+
+ if (ordered) {
+ totalGas = (totalGas * 102) / 100;
+ }
+ }
+
+ function _applyPremiumToGas(
+ uint256 _fee,
+ uint16 _multiplierBps,
+ uint128 _marginUSD,
+ uint128 _nativePriceUSD
+ ) internal view returns (uint256) {
+ uint256 feeWithMultiplier = (_fee * _multiplierBps) / 10000;
+
+ if (_nativePriceUSD == 0 || _marginUSD == 0) {
+ return feeWithMultiplier;
+ }
+ uint256 feeWithMargin = (_marginUSD * nativeDecimalsRate) / _nativePriceUSD + _fee;
+ return feeWithMargin > feeWithMultiplier ? feeWithMargin : feeWithMultiplier;
+ }
+
+ // includes value and nativeDrop
+ function _convertAndApplyPremiumToValue(
+ uint256 _value,
+ uint128 _ratio,
+ uint128 _denom,
+ uint16 _multiplierBps
+ ) internal pure returns (uint256 fee) {
+ if (_value > 0) {
+ fee = (((_value * _ratio) / _denom) * _multiplierBps) / 10000;
+ }
+ }
+
+ function _isV1Eid(uint32 _eid) internal pure virtual returns (bool) {
+ // v1 eid is < 30000
+ return _eid < 30000;
+ }
+
+ // send funds here to pay for price feed directly
+ receive() external payable {}
+}
diff --git a/endpoint/contracts/LayerZeroV2/LzExecutor.sol b/endpoint/contracts/LayerZeroV2/LzExecutor.sol
new file mode 100644
index 0000000..1671a20
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/LzExecutor.sol
@@ -0,0 +1,129 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
+import { Proxied } from "hardhat-deploy/solc_0.8/proxy/Proxied.sol";
+
+import { IReceiveUlnE2 } from "./interfaces/IReceiveUlnE2.sol";
+import { ILayerZeroEndpointV2, Origin } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";
+import { Transfer } from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol";
+
+import { ExecutionState, EndpointV2ViewUpgradeable } from "@layerzerolabs/lz-evm-protocol-v2/contracts/EndpointV2ViewUpgradeable.sol";
+
+import { VerificationState } from "./uln302/ReceiveUln302View.sol";
+
+struct LzReceiveParam {
+ Origin origin;
+ address receiver;
+ bytes32 guid;
+ bytes message;
+ bytes extraData;
+ uint256 gas;
+ uint256 value;
+}
+
+struct NativeDropParam {
+ address _receiver;
+ uint256 _amount;
+}
+
+interface IReceiveUlnView {
+ function verifiable(bytes calldata _packetHeader, bytes32 _payloadHash) external view returns (VerificationState);
+}
+
+contract LzExecutor is OwnableUpgradeable, EndpointV2ViewUpgradeable, Proxied {
+ error LzExecutor_Executed();
+ error LzExecutor_Verifying();
+ error LzExecutor_ReceiveLibViewNotSet();
+
+ event NativeWithdrawn(address _to, uint256 _amount);
+ event ReceiveLibViewSet(address _receiveLib, address _receiveLibView);
+
+ address public receiveUln302;
+ uint32 public localEid;
+
+ mapping(address receiveLib => address receiveLibView) public receiveLibToView;
+
+ function initialize(
+ address _receiveUln302,
+ address _receiveUln302View,
+ address _endpoint
+ ) external proxied initializer {
+ __Ownable_init();
+ __EndpointV2View_init(_endpoint);
+
+ receiveUln302 = _receiveUln302;
+ localEid = endpoint.eid();
+ receiveLibToView[_receiveUln302] = _receiveUln302View;
+ }
+
+ // ============================ OnlyOwner ===================================
+
+ function withdrawNative(address _to, uint256 _amount) external onlyOwner {
+ Transfer.native(_to, _amount);
+ emit NativeWithdrawn(_to, _amount);
+ }
+
+ function setReceiveLibView(address _receiveLib, address _receiveLibView) external onlyOwner {
+ receiveLibToView[_receiveLib] = _receiveLibView;
+ emit ReceiveLibViewSet(_receiveLib, _receiveLibView);
+ }
+
+ // ============================ External ===================================
+
+ /// @notice process for commit and execute
+ /// 1. check if executable, revert if executed, execute if executable
+ /// 2. check if verifiable, revert if verifying, commit if verifiable
+ /// 3. native drop
+ /// 4. try execute, will revert if not executable
+ function commitAndExecute(
+ address _receiveLib,
+ LzReceiveParam calldata _lzReceiveParam,
+ NativeDropParam[] calldata _nativeDropParams
+ ) external payable {
+ /// 1. check if executable, revert if executed
+ ExecutionState executionState = executable(_lzReceiveParam.origin, _lzReceiveParam.receiver);
+ if (executionState == ExecutionState.Executed) revert LzExecutor_Executed();
+
+ /// 2. if not executable, check if verifiable, revert if verifying, commit if verifiable
+ if (executionState != ExecutionState.Executable) {
+ address receiveLib = receiveUln302 == address(0x0) ? _receiveLib : address(receiveUln302);
+ bytes memory packetHeader = abi.encodePacked(
+ uint8(1), // packet version 1
+ _lzReceiveParam.origin.nonce,
+ _lzReceiveParam.origin.srcEid,
+ _lzReceiveParam.origin.sender,
+ localEid,
+ bytes32(uint256(uint160(_lzReceiveParam.receiver)))
+ );
+ bytes32 payloadHash = keccak256(abi.encodePacked(_lzReceiveParam.guid, _lzReceiveParam.message));
+
+ address receiveLibView = receiveLibToView[receiveLib];
+ if (receiveLibView == address(0x0)) revert LzExecutor_ReceiveLibViewNotSet();
+
+ VerificationState verificationState = IReceiveUlnView(receiveLibView).verifiable(packetHeader, payloadHash);
+ if (verificationState == VerificationState.Verifiable) {
+ // verification required
+ IReceiveUlnE2(receiveLib).commitVerification(packetHeader, payloadHash);
+ } else if (verificationState == VerificationState.Verifying) {
+ revert LzExecutor_Verifying();
+ }
+ }
+
+ /// 3. native drop
+ for (uint256 i = 0; i < _nativeDropParams.length; i++) {
+ NativeDropParam calldata param = _nativeDropParams[i];
+ Transfer.native(param._receiver, param._amount);
+ }
+
+ /// 4. try execute, will revert if not executable
+ endpoint.lzReceive{ gas: _lzReceiveParam.gas, value: _lzReceiveParam.value }(
+ _lzReceiveParam.origin,
+ _lzReceiveParam.receiver,
+ _lzReceiveParam.guid,
+ _lzReceiveParam.message,
+ _lzReceiveParam.extraData
+ );
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/ProxyAdmin.sol b/endpoint/contracts/LayerZeroV2/ProxyAdmin.sol
new file mode 100644
index 0000000..24a94b6
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/ProxyAdmin.sol
@@ -0,0 +1,96 @@
+// SPDX-License-Identifier: MIT
+
+// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)
+
+pragma solidity ^0.8.0;
+
+import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
+
+import { TransparentUpgradeableProxy } from "./TransparentUpgradeableProxy.sol";
+
+/**
+ * @author OpenZeppelin. Modified from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.4/contracts/proxy/transparent/ProxyAdmin.sol
+ * to support custom errors and `initialOwner` constructor parameter.
+ * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an
+ * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.
+ */
+contract ProxyAdmin is Ownable {
+ error ImplementationCallFailed();
+ error AdminCallFailed();
+
+ constructor(address initialOwner) {
+ _transferOwnership(initialOwner);
+ }
+
+ /**
+ * @dev Returns the current implementation of `proxy`.
+ *
+ * Requirements:
+ *
+ * - This contract must be the admin of `proxy`.
+ */
+ function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {
+ // We need to manually run the static call since the getter cannot be flagged as view
+ // bytes4(keccak256("implementation()")) == 0x5c60da1b
+ (bool success, bytes memory returndata) = address(proxy).staticcall(hex"5c60da1b");
+ if (!success) {
+ revert ImplementationCallFailed();
+ }
+ return abi.decode(returndata, (address));
+ }
+
+ /**
+ * @dev Returns the current admin of `proxy`.
+ *
+ * Requirements:
+ *
+ * - This contract must be the admin of `proxy`.
+ */
+ function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {
+ // We need to manually run the static call since the getter cannot be flagged as view
+ // bytes4(keccak256("admin()")) == 0xf851a440
+ (bool success, bytes memory returndata) = address(proxy).staticcall(hex"f851a440");
+ if (!success) {
+ revert AdminCallFailed();
+ }
+ return abi.decode(returndata, (address));
+ }
+
+ /**
+ * @dev Changes the admin of `proxy` to `newAdmin`.
+ *
+ * Requirements:
+ *
+ * - This contract must be the current admin of `proxy`.
+ */
+ function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {
+ proxy.changeAdmin(newAdmin);
+ }
+
+ /**
+ * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.
+ *
+ * Requirements:
+ *
+ * - This contract must be the admin of `proxy`.
+ */
+ function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {
+ proxy.upgradeTo(implementation);
+ }
+
+ /**
+ * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See
+ * {TransparentUpgradeableProxy-upgradeToAndCall}.
+ *
+ * Requirements:
+ *
+ * - This contract must be the admin of `proxy`.
+ */
+ function upgradeAndCall(
+ TransparentUpgradeableProxy proxy,
+ address implementation,
+ bytes memory data
+ ) public payable virtual onlyOwner {
+ proxy.upgradeToAndCall{ value: msg.value }(implementation, data);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/ReceiveUln301.sol b/endpoint/contracts/LayerZeroV2/ReceiveUln301.sol
new file mode 100644
index 0000000..6b8c629
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/ReceiveUln301.sol
@@ -0,0 +1,83 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { SafeCast } from "@openzeppelin/contracts/utils/math/SafeCast.sol";
+import { PacketV1Codec } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol";
+
+import { IUltraLightNode301 } from "./interfaces/IUltraLightNode301.sol";
+import { ReceiveLibBaseE1 } from "./ReceiveLibBaseE1.sol";
+import { ReceiveUlnBase } from "../ReceiveUlnBase.sol";
+import { UlnConfig } from "../UlnBase.sol";
+
+/// @dev ULN301 will be deployed on EndpointV1 and is for backward compatibility with ULN302 on EndpointV2. 301 can talk to both 301 and 302
+/// @dev This is a gluing contract. It simply parses the requests and forward to the super.impl() accordingly.
+/// @dev In this case, it combines the logic of ReceiveUlnBase and ReceiveLibBaseE1
+contract ReceiveUln301 is IUltraLightNode301, ReceiveUlnBase, ReceiveLibBaseE1 {
+ using PacketV1Codec for bytes;
+ using SafeCast for uint32; // for chain ID uint32 to uint16 conversion
+
+ uint256 internal constant CONFIG_TYPE_EXECUTOR = 1;
+ uint256 internal constant CONFIG_TYPE_ULN = 2;
+
+ error LZ_ULN_InvalidConfigType(uint256 configType);
+
+ constructor(address _endpoint, uint32 _localEid) ReceiveLibBaseE1(_endpoint, _localEid) {}
+
+ // ============================ OnlyEndpoint ===================================
+
+ function setConfig(
+ uint16 _eid,
+ address _oapp,
+ uint256 _configType,
+ bytes calldata _config
+ ) external override onlyEndpoint {
+ _assertSupportedEid(_eid);
+ if (_configType == CONFIG_TYPE_EXECUTOR) {
+ _setExecutor(_eid, _oapp, abi.decode(_config, (address)));
+ } else if (_configType == CONFIG_TYPE_ULN) {
+ _setUlnConfig(_eid, _oapp, abi.decode(_config, (UlnConfig)));
+ } else {
+ revert LZ_ULN_InvalidConfigType(_configType);
+ }
+ }
+
+ // ============================ External ===================================
+
+ /// @dev in 301, this is equivalent to execution as in Endpoint V2
+ /// @dev dont need to check endpoint verifiable here to save gas, as it will reverts if not verifiable.
+ function commitVerification(bytes calldata _packet, uint256 _gasLimit) external {
+ bytes calldata header = _packet.header();
+ _assertHeader(header, localEid);
+
+ // cache these values to save gas
+ address receiver = _packet.receiverB20();
+ uint16 srcEid = _packet.srcEid().toUint16();
+
+ UlnConfig memory config = getUlnConfig(receiver, srcEid);
+ _verifyAndReclaimStorage(config, keccak256(header), _packet.payloadHash());
+
+ // endpoint will revert if nonce != ++inboundNonce
+ _execute(srcEid, _packet.sender(), receiver, _packet.nonce(), _packet.message(), _gasLimit);
+ }
+
+ function verify(bytes calldata _packetHeader, bytes32 _payloadHash, uint64 _confirmations) external {
+ _verify(_packetHeader, _payloadHash, _confirmations);
+ }
+
+ // ============================ View ===================================
+
+ function getConfig(uint16 _eid, address _oapp, uint256 _configType) external view override returns (bytes memory) {
+ if (_configType == CONFIG_TYPE_EXECUTOR) {
+ return abi.encode(getExecutor(_oapp, _eid));
+ } else if (_configType == CONFIG_TYPE_ULN) {
+ return abi.encode(getUlnConfig(_oapp, _eid));
+ } else {
+ revert LZ_ULN_InvalidConfigType(_configType);
+ }
+ }
+
+ function version() external pure returns (uint64 major, uint8 minor, uint8 endpointVersion) {
+ return (3, 0, 1);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/ReceiveUln301View.sol b/endpoint/contracts/LayerZeroV2/ReceiveUln301View.sol
new file mode 100644
index 0000000..6937c9f
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/ReceiveUln301View.sol
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { SafeCast } from "@openzeppelin/contracts/utils/math/SafeCast.sol";
+import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
+import { Proxied } from "hardhat-deploy/solc_0.8/proxy/Proxied.sol";
+
+import { ILayerZeroEndpoint } from "@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroEndpoint.sol";
+import { AddressCast } from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol";
+import { PacketV1Codec } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol";
+import { ExecutionState, EndpointV2View } from "@layerzerolabs/lz-evm-protocol-v2/contracts/EndpointV2View.sol";
+
+import { UlnConfig } from "../UlnBase.sol";
+
+enum VerificationState {
+ Verifying,
+ Verifiable,
+ Verified
+}
+
+interface IReceiveUln301 {
+ function assertHeader(bytes calldata _packetHeader, uint32 _localEid) external pure;
+
+ function addressSizes(uint32 _dstEid) external view returns (uint256);
+
+ function endpoint() external view returns (address);
+
+ function verifiable(
+ UlnConfig memory _config,
+ bytes32 _headerHash,
+ bytes32 _payloadHash
+ ) external view returns (bool);
+
+ function getUlnConfig(address _oapp, uint32 _remoteEid) external view returns (UlnConfig memory rtnConfig);
+}
+
+contract ReceiveUln301View is Initializable, Proxied {
+ using PacketV1Codec for bytes;
+ using AddressCast for bytes32;
+ using SafeCast for uint32;
+
+ ILayerZeroEndpoint public endpoint;
+ IReceiveUln301 public receiveUln301;
+ uint32 internal localEid;
+
+ function initialize(address _endpoint, uint32 _localEid, address _receiveUln301) external proxied initializer {
+ receiveUln301 = IReceiveUln301(_receiveUln301);
+ endpoint = ILayerZeroEndpoint(_endpoint);
+ localEid = _localEid;
+ }
+
+ function executable(bytes calldata _packetHeader, bytes32 _payloadHash) public view returns (ExecutionState) {
+ receiveUln301.assertHeader(_packetHeader, localEid);
+
+ address receiver = _packetHeader.receiverB20();
+ uint16 srcEid = _packetHeader.srcEid().toUint16();
+ uint64 nonce = _packetHeader.nonce();
+
+ // executed if nonce less than or equal to inboundNonce
+ bytes memory path = abi.encodePacked(
+ _packetHeader.sender().toBytes(receiveUln301.addressSizes(srcEid)),
+ receiver
+ );
+ if (nonce <= endpoint.getInboundNonce(srcEid, path)) return ExecutionState.Executed;
+
+ // executable if not executed and _verified
+ if (
+ receiveUln301.verifiable(
+ receiveUln301.getUlnConfig(receiver, srcEid),
+ keccak256(_packetHeader),
+ _payloadHash
+ )
+ ) {
+ return ExecutionState.Executable;
+ }
+
+ return ExecutionState.NotExecutable;
+ }
+
+ /// @dev keeping the same interface as 302
+ /// @dev a verifiable message requires it to be ULN verifiable only, excluding the endpoint verifiable check
+ function verifiable(bytes calldata _packetHeader, bytes32 _payloadHash) external view returns (VerificationState) {
+ if (executable(_packetHeader, _payloadHash) == ExecutionState.NotExecutable) {
+ return VerificationState.Verifying;
+ }
+ return VerificationState.Verified;
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/ReceiveUln302.sol b/endpoint/contracts/LayerZeroV2/ReceiveUln302.sol
new file mode 100644
index 0000000..80d3119
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/ReceiveUln302.sol
@@ -0,0 +1,85 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { PacketV1Codec } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol";
+import { SetConfigParam } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol";
+import { ILayerZeroEndpointV2, Origin } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";
+
+import { IReceiveUlnE2 } from "../interfaces/IReceiveUlnE2.sol";
+import { ReceiveUlnBase } from "../ReceiveUlnBase.sol";
+import { ReceiveLibBaseE2 } from "../../ReceiveLibBaseE2.sol";
+import { UlnConfig } from "../UlnBase.sol";
+
+/// @dev This is a gluing contract. It simply parses the requests and forward to the super.impl() accordingly.
+/// @dev In this case, it combines the logic of ReceiveUlnBase and ReceiveLibBaseE2
+contract ReceiveUln302 is IReceiveUlnE2, ReceiveUlnBase, ReceiveLibBaseE2 {
+ using PacketV1Codec for bytes;
+
+ /// @dev CONFIG_TYPE_ULN=2 here to align with SendUln302/ReceiveUln302/ReceiveUln301
+ uint32 internal constant CONFIG_TYPE_ULN = 2;
+
+ error LZ_ULN_InvalidConfigType(uint32 configType);
+
+ constructor(address _endpoint) ReceiveLibBaseE2(_endpoint) {}
+
+ function supportsInterface(bytes4 _interfaceId) public view override returns (bool) {
+ return _interfaceId == type(IReceiveUlnE2).interfaceId || super.supportsInterface(_interfaceId);
+ }
+
+ // ============================ OnlyEndpoint ===================================
+
+ // only the ULN config on the receive side
+ function setConfig(address _oapp, SetConfigParam[] calldata _params) external override onlyEndpoint {
+ for (uint256 i = 0; i < _params.length; i++) {
+ SetConfigParam calldata param = _params[i];
+ _assertSupportedEid(param.eid);
+ if (param.configType == CONFIG_TYPE_ULN) {
+ _setUlnConfig(param.eid, _oapp, abi.decode(param.config, (UlnConfig)));
+ } else {
+ revert LZ_ULN_InvalidConfigType(param.configType);
+ }
+ }
+ }
+
+ // ============================ External ===================================
+
+ /// @dev dont need to check endpoint verifiable here to save gas, as it will reverts if not verifiable.
+ function commitVerification(bytes calldata _packetHeader, bytes32 _payloadHash) external {
+ _assertHeader(_packetHeader, localEid);
+
+ // cache these values to save gas
+ address receiver = _packetHeader.receiverB20();
+ uint32 srcEid = _packetHeader.srcEid();
+
+ UlnConfig memory config = getUlnConfig(receiver, srcEid);
+ _verifyAndReclaimStorage(config, keccak256(_packetHeader), _payloadHash);
+
+ Origin memory origin = Origin(srcEid, _packetHeader.sender(), _packetHeader.nonce());
+ // endpoint will revert if nonce <= lazyInboundNonce
+ ILayerZeroEndpointV2(endpoint).verify(origin, receiver, _payloadHash);
+ }
+
+ /// @dev for dvn to verify the payload
+ function verify(bytes calldata _packetHeader, bytes32 _payloadHash, uint64 _confirmations) external {
+ _verify(_packetHeader, _payloadHash, _confirmations);
+ }
+
+ // ============================ View ===================================
+
+ function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view override returns (bytes memory) {
+ if (_configType == CONFIG_TYPE_ULN) {
+ return abi.encode(getUlnConfig(_oapp, _eid));
+ } else {
+ revert LZ_ULN_InvalidConfigType(_configType);
+ }
+ }
+
+ function isSupportedEid(uint32 _eid) external view override returns (bool) {
+ return _isSupportedEid(_eid);
+ }
+
+ function version() external pure override returns (uint64 major, uint8 minor, uint8 endpointVersion) {
+ return (3, 0, 2);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/ReceiveUln302View.sol b/endpoint/contracts/LayerZeroV2/ReceiveUln302View.sol
new file mode 100644
index 0000000..92f0795
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/ReceiveUln302View.sol
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { Proxied } from "hardhat-deploy/solc_0.8/proxy/Proxied.sol";
+import { PacketV1Codec } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol";
+import { Origin } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";
+import { EndpointV2ViewUpgradeable } from "@layerzerolabs/lz-evm-protocol-v2/contracts/EndpointV2ViewUpgradeable.sol";
+import { UlnConfig } from "../UlnBase.sol";
+
+enum VerificationState {
+ Verifying,
+ Verifiable,
+ Verified,
+ NotInitializable
+}
+
+interface IReceiveUln302 {
+ function assertHeader(bytes calldata _packetHeader, uint32 _localEid) external pure;
+
+ function verifiable(
+ UlnConfig memory _config,
+ bytes32 _headerHash,
+ bytes32 _payloadHash
+ ) external view returns (bool);
+
+ function getUlnConfig(address _oapp, uint32 _remoteEid) external view returns (UlnConfig memory rtnConfig);
+}
+
+contract ReceiveUln302View is EndpointV2ViewUpgradeable, Proxied {
+ using PacketV1Codec for bytes;
+
+ IReceiveUln302 public receiveUln302;
+ uint32 internal localEid;
+
+ function initialize(address _endpoint, address _receiveUln302) external proxied initializer {
+ __EndpointV2View_init(_endpoint);
+ receiveUln302 = IReceiveUln302(_receiveUln302);
+ localEid = endpoint.eid();
+ }
+
+ /// @dev a ULN verifiable requires it to be endpoint verifiable and committable
+ function verifiable(bytes calldata _packetHeader, bytes32 _payloadHash) external view returns (VerificationState) {
+ receiveUln302.assertHeader(_packetHeader, localEid);
+
+ address receiver = _packetHeader.receiverB20();
+
+ Origin memory origin = Origin(_packetHeader.srcEid(), _packetHeader.sender(), _packetHeader.nonce());
+
+ // check endpoint initializable
+ if (!initializable(origin, receiver)) {
+ return VerificationState.NotInitializable;
+ }
+
+ // check endpoint verifiable
+ if (!_endpointVerifiable(origin, receiver, _payloadHash)) {
+ return VerificationState.Verified;
+ }
+
+ // check uln verifiable
+ if (
+ receiveUln302.verifiable(
+ receiveUln302.getUlnConfig(receiver, origin.srcEid),
+ keccak256(_packetHeader),
+ _payloadHash
+ )
+ ) {
+ return VerificationState.Verifiable;
+ }
+ return VerificationState.Verifying;
+ }
+
+ /// @dev checks for endpoint verifiable and endpoint has payload hash
+ function _endpointVerifiable(
+ Origin memory origin,
+ address _receiver,
+ bytes32 _payloadHash
+ ) internal view returns (bool) {
+ // check endpoint verifiable
+ if (!verifiable(origin, _receiver, address(receiveUln302), _payloadHash)) return false;
+
+ // if endpoint.verifiable, also check if the payload hash matches
+ // endpoint allows re-verify, check if this payload has already been verified
+ if (endpoint.inboundPayloadHash(_receiver, origin.srcEid, origin.sender, origin.nonce) == _payloadHash)
+ return false;
+
+ return true;
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/SendUln301.sol b/endpoint/contracts/LayerZeroV2/SendUln301.sol
new file mode 100644
index 0000000..2547156
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/SendUln301.sol
@@ -0,0 +1,99 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { Packet } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol";
+
+import { ExecutorConfig, WorkerOptions } from "../../SendLibBase.sol";
+import { SendLibBaseE1 } from "./SendLibBaseE1.sol";
+import { SendUlnBase } from "../SendUlnBase.sol";
+import { UlnConfig } from "../UlnBase.sol";
+
+/// @dev ULN301 will be deployed on EndpointV1 and is for backward compatibility with ULN302 on EndpointV2. 301 can talk to both 301 and 302
+/// @dev This is a gluing contract. It simply parses the requests and forward to the super.impl() accordingly.
+/// @dev In this case, it combines the logic of SendUlnBase and SendLibBaseE1
+contract SendUln301 is SendUlnBase, SendLibBaseE1 {
+ uint256 internal constant CONFIG_TYPE_EXECUTOR = 1;
+ uint256 internal constant CONFIG_TYPE_ULN = 2;
+
+ error LZ_ULN_InvalidConfigType(uint256 configType);
+
+ constructor(
+ address _endpoint,
+ uint256 _treasuryGasLimit,
+ uint256 _treasuryGasForFeeCap,
+ address _nonceContract,
+ uint32 _localEid,
+ address _treasuryFeeHandler
+ )
+ SendLibBaseE1(
+ _endpoint,
+ _treasuryGasLimit,
+ _treasuryGasForFeeCap,
+ _nonceContract,
+ _localEid,
+ _treasuryFeeHandler
+ )
+ {}
+
+ // ============================ OnlyEndpoint ===================================
+
+ function setConfig(
+ uint16 _eid,
+ address _oapp,
+ uint256 _configType,
+ bytes calldata _config
+ ) external override onlyEndpoint {
+ _assertSupportedEid(_eid);
+ if (_configType == CONFIG_TYPE_EXECUTOR) {
+ _setExecutorConfig(_eid, _oapp, abi.decode(_config, (ExecutorConfig)));
+ } else if (_configType == CONFIG_TYPE_ULN) {
+ _setUlnConfig(_eid, _oapp, abi.decode(_config, (UlnConfig)));
+ } else {
+ revert LZ_ULN_InvalidConfigType(_configType);
+ }
+ }
+
+ // ============================ View ===================================
+
+ function getConfig(uint16 _eid, address _oapp, uint256 _configType) external view override returns (bytes memory) {
+ if (_configType == CONFIG_TYPE_EXECUTOR) {
+ return abi.encode(getExecutorConfig(_oapp, _eid));
+ } else if (_configType == CONFIG_TYPE_ULN) {
+ return abi.encode(getUlnConfig(_oapp, _eid));
+ } else {
+ revert LZ_ULN_InvalidConfigType(_configType);
+ }
+ }
+
+ function version() external pure override returns (uint64 major, uint8 minor, uint8 endpointVersion) {
+ return (3, 0, 1);
+ }
+
+ function isSupportedEid(uint32 _eid) external view returns (bool) {
+ return _isSupportedEid(_eid);
+ }
+
+ // ============================ Internal ===================================
+
+ function _quoteVerifier(
+ address _sender,
+ uint32 _dstEid,
+ WorkerOptions[] memory _options
+ ) internal view override returns (uint256) {
+ return _quoteDVNs(_sender, _dstEid, _options);
+ }
+
+ function _payVerifier(
+ Packet memory _packet,
+ WorkerOptions[] memory _options
+ ) internal virtual override returns (uint256 otherWorkerFees, bytes memory encodedPacket) {
+ (otherWorkerFees, encodedPacket) = _payDVNs(fees, _packet, _options);
+ }
+
+ function _splitOptions(
+ bytes calldata _options
+ ) internal pure override returns (bytes memory, WorkerOptions[] memory) {
+ return _splitUlnOptions(_options);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/SendUln302.sol b/endpoint/contracts/LayerZeroV2/SendUln302.sol
new file mode 100644
index 0000000..f19e039
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/SendUln302.sol
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { Packet } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol";
+import { SetConfigParam } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol";
+
+import { ExecutorConfig } from "../../SendLibBase.sol";
+import { SendLibBaseE2, WorkerOptions } from "../../SendLibBaseE2.sol";
+import { UlnConfig } from "../UlnBase.sol";
+import { SendUlnBase } from "../SendUlnBase.sol";
+
+/// @dev This is a gluing contract. It simply parses the requests and forward to the super.impl() accordingly.
+/// @dev In this case, it combines the logic of SendUlnBase and SendLibBaseE2
+contract SendUln302 is SendUlnBase, SendLibBaseE2 {
+ uint32 internal constant CONFIG_TYPE_EXECUTOR = 1;
+ uint32 internal constant CONFIG_TYPE_ULN = 2;
+
+ error LZ_ULN_InvalidConfigType(uint32 configType);
+
+ constructor(
+ address _endpoint,
+ uint256 _treasuryGasLimit,
+ uint256 _treasuryGasForFeeCap
+ ) SendLibBaseE2(_endpoint, _treasuryGasLimit, _treasuryGasForFeeCap) {}
+
+ // ============================ OnlyEndpoint ===================================
+
+ // on the send side the user can config both the executor and the ULN
+ function setConfig(address _oapp, SetConfigParam[] calldata _params) external override onlyEndpoint {
+ for (uint256 i = 0; i < _params.length; i++) {
+ SetConfigParam calldata param = _params[i];
+ _assertSupportedEid(param.eid);
+ if (param.configType == CONFIG_TYPE_EXECUTOR) {
+ _setExecutorConfig(param.eid, _oapp, abi.decode(param.config, (ExecutorConfig)));
+ } else if (param.configType == CONFIG_TYPE_ULN) {
+ _setUlnConfig(param.eid, _oapp, abi.decode(param.config, (UlnConfig)));
+ } else {
+ revert LZ_ULN_InvalidConfigType(param.configType);
+ }
+ }
+ }
+
+ // ============================ View ===================================
+
+ function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view override returns (bytes memory) {
+ if (_configType == CONFIG_TYPE_EXECUTOR) {
+ return abi.encode(getExecutorConfig(_oapp, _eid));
+ } else if (_configType == CONFIG_TYPE_ULN) {
+ return abi.encode(getUlnConfig(_oapp, _eid));
+ } else {
+ revert LZ_ULN_InvalidConfigType(_configType);
+ }
+ }
+
+ function version() external pure override returns (uint64 major, uint8 minor, uint8 endpointVersion) {
+ return (3, 0, 2);
+ }
+
+ function isSupportedEid(uint32 _eid) external view override returns (bool) {
+ return _isSupportedEid(_eid);
+ }
+
+ // ============================ Internal ===================================
+
+ function _quoteVerifier(
+ address _sender,
+ uint32 _dstEid,
+ WorkerOptions[] memory _options
+ ) internal view override returns (uint256) {
+ return _quoteDVNs(_sender, _dstEid, _options);
+ }
+
+ function _payVerifier(
+ Packet calldata _packet,
+ WorkerOptions[] memory _options
+ ) internal override returns (uint256 otherWorkerFees, bytes memory encodedPacket) {
+ (otherWorkerFees, encodedPacket) = _payDVNs(fees, _packet, _options);
+ }
+
+ function _splitOptions(
+ bytes calldata _options
+ ) internal pure override returns (bytes memory, WorkerOptions[] memory) {
+ return _splitUlnOptions(_options);
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/Treasury.sol b/endpoint/contracts/LayerZeroV2/Treasury.sol
new file mode 100644
index 0000000..316b9e6
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/Treasury.sol
@@ -0,0 +1,74 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
+
+import { ISendLib } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol";
+import { Transfer } from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol";
+
+import { ILayerZeroTreasury } from "./interfaces/ILayerZeroTreasury.sol";
+
+contract Treasury is Ownable, ILayerZeroTreasury {
+ uint256 public nativeBP;
+ uint256 public lzTokenFee;
+ bool public lzTokenEnabled;
+
+ error LZ_Treasury_LzTokenNotEnabled();
+
+ function getFee(
+ address /*_sender*/,
+ uint32 /*_eid*/,
+ uint256 _totalFee,
+ bool _payInLzToken
+ ) external view override returns (uint256) {
+ return _getFee(_totalFee, _payInLzToken);
+ }
+
+ function payFee(
+ address /*_sender*/,
+ uint32 /*_eid*/,
+ uint256 _totalFee,
+ bool _payInLzToken
+ ) external payable override returns (uint256) {
+ return _getFee(_totalFee, _payInLzToken);
+ }
+
+ function setLzTokenEnabled(bool _lzTokenEnabled) external onlyOwner {
+ lzTokenEnabled = _lzTokenEnabled;
+ }
+
+ function setNativeFeeBP(uint256 _nativeBP) external onlyOwner {
+ nativeBP = _nativeBP;
+ }
+
+ function setLzTokenFee(uint256 _lzTokenFee) external onlyOwner {
+ lzTokenFee = _lzTokenFee;
+ }
+
+ function withdrawLzToken(address _messageLib, address _lzToken, address _to, uint256 _amount) external onlyOwner {
+ ISendLib(_messageLib).withdrawLzTokenFee(_lzToken, _to, _amount);
+ }
+
+ function withdrawNativeFee(address _messageLib, address payable _to, uint256 _amount) external onlyOwner {
+ ISendLib(_messageLib).withdrawFee(_to, _amount);
+ }
+
+ // this is for withdrawing lz token sent to this contract by uln301 and fee handler
+ // and to withdraw any native sent over via payFee
+ function withdrawToken(address _token, address _to, uint256 _amount) external onlyOwner {
+ // transfers native if _token is address(0x0)
+ Transfer.nativeOrToken(_token, _to, _amount);
+ }
+
+ // ======================= Internal =======================
+
+ function _getFee(uint256 _totalFee, bool _payInLzToken) internal view returns (uint256) {
+ if (_payInLzToken) {
+ if (!lzTokenEnabled) revert LZ_Treasury_LzTokenNotEnabled();
+ return lzTokenFee;
+ } else {
+ return (_totalFee * nativeBP) / 10000;
+ }
+ }
+}
diff --git a/endpoint/contracts/LayerZeroV2/TreasuryFeeHandler.sol b/endpoint/contracts/LayerZeroV2/TreasuryFeeHandler.sol
new file mode 100644
index 0000000..061455a
--- /dev/null
+++ b/endpoint/contracts/LayerZeroV2/TreasuryFeeHandler.sol
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: LZBL-1.2
+
+pragma solidity ^0.8.20;
+
+import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
+
+import { ILayerZeroEndpoint } from "@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroEndpoint.sol";
+
+import { ITreasuryFeeHandler } from "./interfaces/ITreasuryFeeHandler.sol";
+
+contract TreasuryFeeHandler is ITreasuryFeeHandler {
+ using SafeERC20 for IERC20;
+
+ ILayerZeroEndpoint public immutable endpoint;
+
+ error LZ_TreasuryFeeHandler_OnlySendLibrary();
+ error LZ_TreasuryFeeHandler_OnlyOnSending();
+ error LZ_TreasuryFeeHandler_InvalidAmount(uint256 required, uint256 supplied);
+
+ constructor(address _endpoint) {
+ endpoint = ILayerZeroEndpoint(_endpoint);
+ }
+
+ // @dev payer of layerzero token must be sender
+ function payFee(
+ address _lzToken,
+ address _sender,
+ uint256 _required,
+ uint256 _supplied,
+ address _treasury
+ ) external {
+ // only sender's message library can call this function and only when sending a payload
+ if (endpoint.getSendLibraryAddress(_sender) != msg.sender) revert LZ_TreasuryFeeHandler_OnlySendLibrary();
+ if (!endpoint.isSendingPayload()) revert LZ_TreasuryFeeHandler_OnlyOnSending();
+ if (_required > _supplied) revert LZ_TreasuryFeeHandler_InvalidAmount(_required, _supplied);
+
+ // send lz token fee to the treasury directly
+ IERC20(_lzToken).safeTransferFrom(_sender, _treasury, _required);
+ }
+}
diff --git a/endpoint/deploy/LayerZeroV1/Endpoint.ts b/endpoint/deploy/LayerZeroV1/Endpoint.ts
new file mode 100644
index 0000000..2ec823e
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV1/Endpoint.ts
@@ -0,0 +1,25 @@
+import '@nomiclabs/hardhat-ethers'
+import 'hardhat-deploy'
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import { EndpointVersion, networkToEndpointId } from '@layerzerolabs/lz-definitions'
+
+module.exports = async function (hre: HardhatRuntimeEnvironment) {
+ const { deploy } = hre.deployments
+ const { layerzero } = await hre.getNamedAccounts()
+ console.log(`deployer: ${layerzero}`)
+
+ const endpointId = hre.network.name === 'hardhat' ? 1 : networkToEndpointId(hre.network.name, EndpointVersion.V1)
+ await deploy('Endpoint', {
+ from: layerzero,
+ // gasPrice: '0',
+ args: [endpointId],
+ // if set it to true, will not attempt to deploy
+ // even if the contract deployed under the same name is different
+ skipIfAlreadyDeployed: true,
+ log: true,
+ waitConfirmations: 1,
+ })
+}
+
+module.exports.tags = ['Endpoint', 'test']
diff --git a/endpoint/deploy/LayerZeroV1/FPValidator.ts b/endpoint/deploy/LayerZeroV1/FPValidator.ts
new file mode 100644
index 0000000..b6aa461
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV1/FPValidator.ts
@@ -0,0 +1,36 @@
+import '@nomiclabs/hardhat-ethers'
+import 'hardhat-deploy'
+import { addresses as bridgeAddresses } from '@stargatefinance/stg-evm-v1/deployed/Bridge'
+import { addresses as stargateTokenAddresses } from '@stargatefinance/stg-evm-v1/deployed/StargateToken'
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import { EndpointVersion, networkToEndpointId } from '@layerzerolabs/lz-definitions'
+
+module.exports = async function (hre: HardhatRuntimeEnvironment) {
+ const { deploy } = hre.deployments
+ const { layerzero } = await hre.getNamedAccounts()
+
+ const endpointId = hre.network.name === 'hardhat' ? 1 : networkToEndpointId(hre.network.name, EndpointVersion.V1)
+
+ const bridgeAddr = bridgeAddresses[hre.network.name] || hre.ethers.constants.AddressZero
+ const stgAddr = stargateTokenAddresses[hre.network.name] || hre.ethers.constants.AddressZero
+
+ console.table({
+ Deployer: layerzero,
+ Network: hre.network.name,
+ 'Stargate Bridge Address': bridgeAddr,
+ 'Stargate Address': stgAddr,
+ 'Endpoint ID': endpointId,
+ })
+
+ await deploy('FPValidator', {
+ from: layerzero,
+ // gasPrice: '0',
+ args: [bridgeAddr, stgAddr],
+ log: true,
+ waitConfirmations: 1,
+ skipIfAlreadyDeployed: true,
+ })
+}
+
+module.exports.tags = ['FPValidator', 'test']
diff --git a/endpoint/deploy/LayerZeroV1/MPTValidator01.ts b/endpoint/deploy/LayerZeroV1/MPTValidator01.ts
new file mode 100644
index 0000000..5f95596
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV1/MPTValidator01.ts
@@ -0,0 +1,36 @@
+import '@nomiclabs/hardhat-ethers'
+import 'hardhat-deploy'
+
+import { addresses as bridgeAddresses } from '@stargatefinance/stg-evm-v1/deployed/Bridge'
+import { addresses as stargateTokenAddresses } from '@stargatefinance/stg-evm-v1/deployed/StargateToken'
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import { EndpointVersion, networkToEndpointId } from '@layerzerolabs/lz-definitions'
+
+module.exports = async function (hre: HardhatRuntimeEnvironment) {
+ const { deploy } = hre.deployments
+ const { layerzero } = await hre.getNamedAccounts()
+
+ const endpointId = hre.network.name === 'hardhat' ? 1 : networkToEndpointId(hre.network.name, EndpointVersion.V1)
+
+ const stgAddr = stargateTokenAddresses[hre.network.name] || hre.ethers.constants.AddressZero
+ const bridgeAddr = bridgeAddresses[hre.network.name] || hre.ethers.constants.AddressZero
+
+ console.table({
+ Deployer: layerzero,
+ Network: hre.network.name,
+ 'Stargate Bridge Address': bridgeAddr,
+ 'Stargate Address': stgAddr,
+ 'Endpoint ID': endpointId,
+ })
+
+ await deploy('MPTValidator01', {
+ from: layerzero,
+ // gasPrice: '0',
+ args: [bridgeAddr, stgAddr],
+ log: true,
+ waitConfirmations: 1,
+ skipIfAlreadyDeployed: true,
+ })
+}
+module.exports.tags = ['MPTValidator01', 'test']
diff --git a/endpoint/deploy/LayerZeroV1/NonceContract.ts b/endpoint/deploy/LayerZeroV1/NonceContract.ts
new file mode 100644
index 0000000..fa0ac65
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV1/NonceContract.ts
@@ -0,0 +1,27 @@
+import '@nomiclabs/hardhat-ethers'
+import 'hardhat-deploy'
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+module.exports = async function ({ getNamedAccounts, deployments }: HardhatRuntimeEnvironment) {
+ const { deploy } = deployments
+ const { layerzero } = await getNamedAccounts()
+
+ const endpoint = await deployments.get('Endpoint')
+
+ await deploy('NonceContract', {
+ // gasPrice: '0',
+ from: layerzero,
+ args: [endpoint.address],
+ log: true,
+ waitConfirmations: 1,
+ skipIfAlreadyDeployed: true,
+ })
+}
+
+// module.exports.skip = () =>
+// new Promise(async (resolve) => {
+// resolve(!isTestnet()) // skip it when its mainnet for now
+// })
+
+module.exports.tags = ['NonceContract', 'test', 'v2']
+module.exports.dependencies = ['Endpoint']
diff --git a/endpoint/deploy/LayerZeroV1/PriceFeed.ts b/endpoint/deploy/LayerZeroV1/PriceFeed.ts
new file mode 100644
index 0000000..ae48f14
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV1/PriceFeed.ts
@@ -0,0 +1,54 @@
+import '@nomiclabs/hardhat-ethers'
+import 'hardhat-deploy'
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import { isLocalhost } from '@layerzerolabs/hardhat-config'
+import { Stage, networkToStage } from '@layerzerolabs/lz-definitions'
+
+const PRICE_UPDATER = {
+ [Stage.SANDBOX]: '0x13B6B82D2f5E9b29fa453e3271cAB43Ced089800',
+ [Stage.TESTNET]: '0xF5E8A439C599205C1aB06b535DE46681Aed1007a',
+ [Stage.MAINNET]: '0x339d413CCEfD986b1B3647A9cfa9CBbE70A30749',
+}
+
+module.exports = async function (hre: HardhatRuntimeEnvironment) {
+ const { deploy } = hre.deployments
+ const { relayer, proxyAdmin } = await hre.getNamedAccounts()
+
+ console.log(`Deployer: ${relayer}`)
+ console.log(`ProxyOwner: ${proxyAdmin}`)
+
+ const priceUpdater = isLocalhost(hre.network.name)
+ ? hre.ethers.constants.AddressZero
+ : PRICE_UPDATER[networkToStage(hre.network.name)]
+ console.log(priceUpdater)
+
+ await deploy('PriceFeed', {
+ // gasLimit: 5000000,
+ // gasPrice: '1000000000', // 25 gwei
+ from: relayer,
+ log: true,
+ waitConfirmations: 1,
+ // skipIfAlreadyDeployed: true,
+ proxy: {
+ owner: proxyAdmin,
+ proxyContract: 'OptimizedTransparentProxy',
+ execute: {
+ init: {
+ methodName: 'initialize',
+ args: [priceUpdater],
+ },
+ onUpgrade: {
+ methodName: 'onUpgrade',
+ args: [],
+ },
+ },
+ },
+ })
+}
+module.exports.tags = ['PriceFeed', 'test']
+module.exports.skip = async ({ network }) =>
+ new Promise((resolve) => {
+ resolve(network.name !== 'hardhat')
+ // only use for tests
+ })
diff --git a/endpoint/deploy/LayerZeroV1/RelayerV2.ts b/endpoint/deploy/LayerZeroV1/RelayerV2.ts
new file mode 100644
index 0000000..96e2446
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV1/RelayerV2.ts
@@ -0,0 +1,82 @@
+import '@nomiclabs/hardhat-ethers'
+import 'hardhat-deploy'
+
+import { addresses as bridgeAddresses } from '@stargatefinance/stg-evm-v1/deployed/Bridge'
+import { addresses as composerAddresses } from '@stargatefinance/stg-evm-v1/deployed/StargateComposer'
+import { ethers } from 'ethers'
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import { Chain, EndpointVersion, networkToChain, networkToEndpointId } from '@layerzerolabs/lz-definitions'
+
+import { getPriceFeedV2Address } from '../utils'
+
+export const NATIVE_DECIMALS_RATE: { [chain in Chain]?: string } = {
+ [Chain.TRON]: ethers.utils.parseUnits('1', 6).toString(),
+ [Chain.TRONDEV]: ethers.utils.parseUnits('1', 6).toString(),
+ [Chain.HEDERA]: ethers.utils.parseUnits('1', 8).toString()
+}
+export function getNativeDecimalsRate(networkName: string): string {
+ return NATIVE_DECIMALS_RATE[networkToChain(networkName)] ?? ethers.utils.parseUnits('1', 18).toString()
+}
+
+module.exports = async function (hre: HardhatRuntimeEnvironment) {
+ const { deploy } = hre.deployments
+ const { relayer, proxyAdmin } = await hre.getNamedAccounts()
+
+ const ultraLightNodeV2 = (await hre.deployments.get('UltraLightNodeV2')).address
+ const priceFeedAddr = getPriceFeedV2Address(hre)
+
+ console.log(`[${hre.network.name}] PriceFeed Address: ${priceFeedAddr}`)
+
+ let gasLimit = 5242880 // arcana-testnet is the lowest ive seen @ 5242880 block gasLimit
+ const endpointId = hre.network.name === 'hardhat' ? 1 : networkToEndpointId(hre.network.name, EndpointVersion.V1)
+ if ([10010, 20010].includes(endpointId)) {
+ gasLimit = 30000000 // arbitrum requires >8m
+ }
+
+ // by default use whats configured
+ let bridgeAddr = bridgeAddresses[hre.network.name]
+ let composerAddr = composerAddresses[hre.network.name] //'0x3b83D454A50aBe06d94cb0d5d367825e190bDA8F'
+
+ // WARNING:
+ // IF THE BRIDGE IS UNDEFINED, SET 0x0 FOR COMPOSER TOO! (Because stargate doesnt exist)
+ console.log(`${hre.network.name} - ${bridgeAddr}: bridgeAddr`)
+ if (!bridgeAddr) {
+ bridgeAddr = hre.ethers.constants.AddressZero
+ composerAddr = hre.ethers.constants.AddressZero
+ }
+
+ // print the FINAL bridge and composer address during deployment/upgrade
+ console.log(`[${hre.network.name}] Stargate Bridge Address: ${bridgeAddr}`)
+ console.log(`[${hre.network.name}] Stargate Composer Address: ${composerAddr}`)
+
+ const nativeDecimalsRate = getNativeDecimalsRate(hre.network.name)
+
+ console.log('Constructor Args')
+ console.log({ ultraLightNodeV2, priceFeedAddr, bridgeAddr, composerAddr, nativeDecimalsRate })
+
+ await deploy('RelayerV2', {
+ from: relayer,
+ // gasPrice: '0',
+ log: true,
+ waitConfirmations: 1,
+ // skipIfAlreadyDeployed: true, // if you set to true, it cant/wont upgrade
+ proxy: {
+ owner: proxyAdmin,
+ proxyContract: 'OptimizedTransparentProxy',
+ execute: {
+ init: {
+ methodName: 'initialize',
+ args: [ultraLightNodeV2, priceFeedAddr, bridgeAddr, composerAddr, nativeDecimalsRate],
+ },
+ onUpgrade: {
+ methodName: 'onUpgrade',
+ args: [bridgeAddr, composerAddr, nativeDecimalsRate],
+ },
+ },
+ },
+ })
+}
+
+module.exports.tags = ['RelayerV2', 'test', 'v2']
+module.exports.dependencies = ['UltraLightNodeV2']
diff --git a/endpoint/deploy/LayerZeroV1/TreasuryV2.ts b/endpoint/deploy/LayerZeroV1/TreasuryV2.ts
new file mode 100644
index 0000000..77cb33c
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV1/TreasuryV2.ts
@@ -0,0 +1,22 @@
+import '@nomiclabs/hardhat-ethers'
+import 'hardhat-deploy'
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+module.exports = async function ({ getNamedAccounts, deployments }: HardhatRuntimeEnvironment) {
+ const { deploy } = deployments
+ const { layerzero } = await getNamedAccounts()
+
+ const ultraLightNodeV2 = await deployments.get('UltraLightNodeV2')
+
+ await deploy('TreasuryV2', {
+ // gasPrice: '0',
+ from: layerzero,
+ args: [ultraLightNodeV2.address],
+ log: true,
+ waitConfirmations: 1,
+ skipIfAlreadyDeployed: true,
+ })
+}
+
+module.exports.tags = ['TreasuryV2', 'test', 'v2']
+module.exports.dependencies = ['UltraLightNodeV2']
diff --git a/endpoint/deploy/LayerZeroV1/UltraLightNodeV2.ts b/endpoint/deploy/LayerZeroV1/UltraLightNodeV2.ts
new file mode 100644
index 0000000..f45c9fd
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV1/UltraLightNodeV2.ts
@@ -0,0 +1,37 @@
+import '@nomiclabs/hardhat-ethers'
+import 'hardhat-deploy'
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import { EndpointVersion, networkToEndpointId } from '@layerzerolabs/lz-definitions'
+
+module.exports = async function ({ getNamedAccounts, deployments, network }: HardhatRuntimeEnvironment) {
+ const { deploy } = deployments
+ const { layerzero } = await getNamedAccounts()
+
+ // get the Endpoint address
+ const endpoint = await deployments.get('Endpoint')
+ const localChainId = network.name === 'hardhat' ? 1 : networkToEndpointId(network.name, EndpointVersion.V1)
+
+ const nonceContract = await deployments.get('NonceContract')
+
+ console.log([endpoint.address, nonceContract.address, localChainId])
+
+ const { address } = await deploy('UltraLightNodeV2', {
+ // gasPrice: '0',
+ from: layerzero,
+ args: [endpoint.address, nonceContract.address, localChainId],
+ // if set it to true, will not attempt to deploy
+ // even if the contract deployed under the same name is different
+ skipIfAlreadyDeployed: true,
+ log: true,
+ waitConfirmations: 1,
+ })
+}
+
+// module.exports.skip = () =>
+// new Promise(async (resolve) => {
+// resolve(!isTestnet()) // skip it when its mainnet for now
+// })
+
+module.exports.tags = ['UltraLightNodeV2', 'test', 'v2']
+module.exports.dependencies = ['Endpoint', 'NonceContract']
diff --git a/endpoint/deploy/LayerZeroV2/000-Treasury.ts b/endpoint/deploy/LayerZeroV2/000-Treasury.ts
new file mode 100644
index 0000000..4d90870
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/000-Treasury.ts
@@ -0,0 +1,25 @@
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+import 'hardhat-deploy'
+
+module.exports = async function (hre: HardhatRuntimeEnvironment): Promise {
+ const { deployments, getNamedAccounts } = hre
+ const { deploy } = deployments
+ const { layerzero } = await getNamedAccounts()
+ console.log(`Treasury deployer: ${layerzero}`)
+
+ // const uln: Deployment = await deployments.get('UltraLightNode302')
+
+ await deploy('Treasury', {
+ from: layerzero,
+ args: [],
+ // if set it to true, will not attempt to deploy
+ // even if the contract deployed under the same name is different
+ skipIfAlreadyDeployed: true,
+ log: true,
+ waitConfirmations: 1,
+ // gasPrice: '0'
+ })
+ return Promise.resolve(false)
+}
+
+module.exports.tags = ['Treasury', 'test']
diff --git a/endpoint/deploy/LayerZeroV2/000-TreasuryFeeHandler.ts b/endpoint/deploy/LayerZeroV2/000-TreasuryFeeHandler.ts
new file mode 100644
index 0000000..74beb46
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/000-TreasuryFeeHandler.ts
@@ -0,0 +1,23 @@
+import '@nomiclabs/hardhat-ethers'
+import 'hardhat-deploy'
+
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import { getEndpointV1Address } from './util'
+
+module.exports = async function (hre: HardhatRuntimeEnvironment): Promise {
+ const { deploy } = hre.deployments
+ const { layerzero } = await hre.getNamedAccounts()
+
+ await deploy('TreasuryFeeHandler', {
+ from: layerzero,
+ args: [getEndpointV1Address(hre)],
+ log: true,
+ waitConfirmations: 1,
+ skipIfAlreadyDeployed: true,
+ // gasPrice: '0',
+ })
+ return Promise.resolve(false)
+}
+
+module.exports.tags = ['TreasuryFeeHandler', 'test']
diff --git a/endpoint/deploy/LayerZeroV2/001-EndpointV2View.ts b/endpoint/deploy/LayerZeroV2/001-EndpointV2View.ts
new file mode 100644
index 0000000..bc5ca78
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/001-EndpointV2View.ts
@@ -0,0 +1,52 @@
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+import 'hardhat-deploy'
+import { Deployment } from 'hardhat-deploy/dist/types'
+
+import { isZKSyncBasedChain, networkToChain } from '@layerzerolabs/lz-definitions'
+import { ALT_TOKEN_CHAINS } from '@layerzerolabs/ops-definitions-layerzero'
+
+const hre = require('hardhat')
+
+function getDependencies(): string[] {
+ const chain = networkToChain(hre.network.name)
+ if (ALT_TOKEN_CHAINS.includes(chain)) {
+ console.log(`Depending on EndpointV2Alt for ${hre.network.name}`)
+ return ['EndpointV2Alt']
+ }
+ console.log(`Depending on EndpointV2 for ${hre.network.name}`)
+ return ['EndpointV2']
+}
+
+module.exports = async function (hre: HardhatRuntimeEnvironment) {
+ const { deployments, getNamedAccounts } = hre
+ const { deploy } = deployments
+ const { relayer, proxyAdmin } = await getNamedAccounts()
+
+ const endpoint: Deployment = await deployments.get('EndpointV2')
+
+ const proxyContract = isZKSyncBasedChain(networkToChain(hre.network.name))
+ ? 'TransparentUpgradeableProxy'
+ : 'OptimizedTransparentProxy'
+
+ await deploy('EndpointV2View', {
+ from: relayer,
+ log: true,
+ waitConfirmations: 1,
+ // gasPrice: '0',
+ // gasLimit: '1000000',
+ // skipIfAlreadyDeployed: true,
+ proxy: {
+ owner: proxyAdmin,
+ proxyContract: proxyContract,
+ execute: {
+ init: {
+ methodName: 'initialize',
+ args: [endpoint.address],
+ },
+ },
+ },
+ })
+}
+
+module.exports.tags = ['EndpointV2View']
+module.exports.dependencies = getDependencies()
diff --git a/endpoint/deploy/LayerZeroV2/001-SendUln301.ts b/endpoint/deploy/LayerZeroV2/001-SendUln301.ts
new file mode 100644
index 0000000..5726cb7
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/001-SendUln301.ts
@@ -0,0 +1,78 @@
+import '@nomiclabs/hardhat-ethers'
+import 'hardhat-deploy'
+
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import {
+ EndpointVersion,
+ Environment,
+ isNetworkEndpointIdSupported,
+ networkToChain,
+ networkToEndpointId,
+ networkToEnv,
+ networkToStage,
+} from '@layerzerolabs/lz-definitions'
+import { ALT_TOKEN_CHAINS } from '@layerzerolabs/ops-definitions-layerzero'
+import { LayerZeroConfigManager } from '@layerzerolabs/ops-utilities'
+
+import { TREASURY_GAS_FOR_FEE_CAP, TREASURY_GAS_LIMIT } from './configs/deployConfig'
+import { getEndpointV1Address, tryGetDeployedV1Address } from './util'
+
+module.exports = async function (hre: HardhatRuntimeEnvironment): Promise {
+ const { deploy } = hre.deployments
+ const { layerzero } = await hre.getNamedAccounts()
+
+ if (hre.network.name !== 'hardhat' && !isNetworkEndpointIdSupported(hre.network.name, EndpointVersion.V1)) {
+ console.log(`network ${hre.network.name} is not supported v1, skip deploy SendUln301`)
+ return Promise.resolve(false)
+ }
+
+ const stage = networkToStage(hre.network.name)
+ const chain = networkToChain(hre.network.name)
+
+ const treasuryGasLimitConfigManager = new LayerZeroConfigManager(TREASURY_GAS_LIMIT)
+ const treasuryGasLimit = treasuryGasLimitConfigManager.get(stage, [chain, 'default'])
+
+ const treasuryGasForFeeCapConfigManager = new LayerZeroConfigManager(TREASURY_GAS_FOR_FEE_CAP)
+ const treasuryGasForFeeCap = treasuryGasForFeeCapConfigManager.get(stage, [chain, 'default'])
+
+ const localChainId = hre.network.name === 'hardhat' ? 1 : networkToEndpointId(hre.network.name, EndpointVersion.V1)
+
+ // re-use endpointV1 NonceContract
+ let nonceContractAddress = tryGetDeployedV1Address(hre, 'NonceContract')
+ if (!nonceContractAddress) {
+ const env = networkToEnv(hre.network.name, EndpointVersion.V1)
+ if (env !== Environment.LOCAL) {
+ throw new Error(`NonceContract not deployed in V1`)
+ }
+ // for localnet and NonceContract is not found in V1, use NonceContractMock instead
+ nonceContractAddress = (await hre.deployments.get('NonceContractMock')).address
+ }
+ const treasuryFeeHandler = await hre.deployments.get('TreasuryFeeHandler')
+
+ await deploy('SendUln301', {
+ from: layerzero,
+ args: [
+ getEndpointV1Address(hre),
+ treasuryGasLimit,
+ treasuryGasForFeeCap,
+ nonceContractAddress,
+ localChainId,
+ treasuryFeeHandler.address,
+ ],
+ // if set it to true, will not attempt to deploy
+ // even if the contract deployed under the same name is different
+ skipIfAlreadyDeployed: true,
+ log: true,
+ waitConfirmations: 1,
+ // gasPrice: '0',
+ })
+ return Promise.resolve(false)
+}
+
+module.exports.tags = ['SendUln301', 'test']
+module.exports.dependencies = ['TreasuryFeeHandler', 'NonceContractMock']
+module.exports.skip = async ({ network }: HardhatRuntimeEnvironment) =>
+ new Promise((resolve) => {
+ resolve(ALT_TOKEN_CHAINS.includes(networkToChain(network.name)))
+ })
diff --git a/endpoint/deploy/LayerZeroV2/002-ReceiveUln301.ts b/endpoint/deploy/LayerZeroV2/002-ReceiveUln301.ts
new file mode 100644
index 0000000..a0273ab
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/002-ReceiveUln301.ts
@@ -0,0 +1,45 @@
+import '@nomiclabs/hardhat-ethers'
+import 'hardhat-deploy'
+
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import {
+ EndpointVersion,
+ isNetworkEndpointIdSupported,
+ networkToChain,
+ networkToEndpointId,
+} from '@layerzerolabs/lz-definitions'
+import { ALT_TOKEN_CHAINS } from '@layerzerolabs/ops-definitions-layerzero'
+
+import { getEndpointV1Address } from './util'
+
+module.exports = async function (hre: HardhatRuntimeEnvironment): Promise {
+ const { deploy } = hre.deployments
+ const { layerzero } = await hre.getNamedAccounts()
+
+ if (hre.network.name !== 'hardhat' && !isNetworkEndpointIdSupported(hre.network.name, EndpointVersion.V1)) {
+ console.log(`network ${hre.network.name} is not supported v1, skip deploy ReceiveUln301`)
+ return Promise.resolve(false)
+ }
+
+ const localChainId = hre.network.name === 'hardhat' ? 1 : networkToEndpointId(hre.network.name, EndpointVersion.V1)
+
+ await deploy('ReceiveUln301', {
+ from: layerzero,
+ args: [getEndpointV1Address(hre), localChainId],
+ // if set it to true, will not attempt to deploy
+ // even if the contract deployed under the same name is different
+ skipIfAlreadyDeployed: true,
+ log: true,
+ waitConfirmations: 1,
+ // gasPrice: '0',
+ })
+ return Promise.resolve(false)
+}
+
+module.exports.tags = ['ReceiveUln301', 'test']
+module.exports.dependencies = []
+module.exports.skip = async ({ network }: HardhatRuntimeEnvironment) =>
+ new Promise((resolve) => {
+ resolve(ALT_TOKEN_CHAINS.includes(networkToChain(network.name)))
+ })
diff --git a/endpoint/deploy/LayerZeroV2/002-ReceiveUln301View.ts b/endpoint/deploy/LayerZeroV2/002-ReceiveUln301View.ts
new file mode 100644
index 0000000..018a8d4
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/002-ReceiveUln301View.ts
@@ -0,0 +1,49 @@
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+import 'hardhat-deploy'
+
+import { EndpointVersion, isZKSyncBasedChain, networkToChain, networkToEndpointId } from '@layerzerolabs/lz-definitions'
+import { ALT_TOKEN_CHAINS } from '@layerzerolabs/ops-definitions-layerzero'
+
+import { getEndpointV1Address } from './util'
+module.exports = async function (hre: HardhatRuntimeEnvironment): Promise {
+ const { deployments, getNamedAccounts } = hre
+ const { deploy } = deployments
+ const { relayer, proxyAdmin } = await getNamedAccounts()
+
+ // get the EndpointV1 address
+ const endpointAddr = getEndpointV1Address(hre)
+ const uln301 = await deployments.get('ReceiveUln301')
+
+ const localChainId = hre.network.name === 'hardhat' ? 1 : networkToEndpointId(hre.network.name, EndpointVersion.V1)
+
+ const proxyContract = isZKSyncBasedChain(networkToChain(hre.network.name))
+ ? 'TransparentUpgradeableProxy'
+ : 'OptimizedTransparentProxy'
+
+ await deploy('ReceiveUln301View', {
+ from: relayer,
+ log: true,
+ waitConfirmations: 1,
+ // gasPrice: '0',
+ // skipIfAlreadyDeployed: true,
+ proxy: {
+ owner: proxyAdmin,
+ proxyContract: proxyContract,
+ viaAdminContract: { name: 'ExecutorProxyAdmin', artifact: 'ProxyAdmin' },
+ execute: {
+ init: {
+ methodName: 'initialize',
+ args: [endpointAddr, localChainId, uln301.address],
+ },
+ },
+ },
+ })
+ return Promise.resolve(false)
+}
+
+module.exports.tags = ['ReceiveUln301View']
+module.exports.dependencies = ['ReceiveUln301']
+module.exports.skip = async ({ network }: HardhatRuntimeEnvironment) =>
+ new Promise((resolve) => {
+ resolve(ALT_TOKEN_CHAINS.includes(networkToChain(network.name)))
+ })
diff --git a/endpoint/deploy/LayerZeroV2/003-SendUln302.ts b/endpoint/deploy/LayerZeroV2/003-SendUln302.ts
new file mode 100644
index 0000000..3a2f823
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/003-SendUln302.ts
@@ -0,0 +1,48 @@
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import { networkToChain, networkToStage } from '@layerzerolabs/lz-definitions'
+import { LayerZeroConfigManager } from '@layerzerolabs/ops-utilities'
+
+import 'hardhat-deploy'
+import '@nomiclabs/hardhat-ethers'
+import { TREASURY_GAS_FOR_FEE_CAP, TREASURY_GAS_LIMIT } from './configs/deployConfig'
+import { getDeployedAddress } from './util'
+
+// config
+
+module.exports = async function (hre: HardhatRuntimeEnvironment): Promise {
+ const { deploy } = hre.deployments
+ const { layerzero } = await hre.getNamedAccounts()
+
+ const stage = networkToStage(hre.network.name)
+ const chain = networkToChain(hre.network.name)
+
+ const treasuryGasLimitConfigManager = new LayerZeroConfigManager(TREASURY_GAS_LIMIT)
+ const treasuryGasLimit = treasuryGasLimitConfigManager.get(stage, [chain, 'default'])
+
+ const treasuryGasForFeeCapConfigManager = new LayerZeroConfigManager(TREASURY_GAS_FOR_FEE_CAP)
+ const treasuryGasForFeeCap = treasuryGasForFeeCapConfigManager.get(stage, [chain, 'default'])
+
+ console.log(
+ `[${hre.network.name}] SendUln302 treasuryGasLimit: ${treasuryGasLimit}, treasuryGasForFeeCap: ${treasuryGasForFeeCap}`
+ )
+ if (!treasuryGasLimit || treasuryGasLimit === '0' || !treasuryGasForFeeCap || treasuryGasForFeeCap === 0) {
+ throw Error(`[${hre.network.name}] SendUln302 MUST configure non zero treasuryGasLimit & treasuryGasForFeeCap`)
+ }
+
+ // get the EndpointV2 address
+ const endpointAddr = getDeployedAddress(hre, 'EndpointV2')
+
+ // const gasPrice = (await hre.ethers.provider.getGasPrice()).mul(15).div(10)
+ await deploy('SendUln302', {
+ from: layerzero,
+ args: [endpointAddr, treasuryGasLimit, treasuryGasForFeeCap],
+ skipIfAlreadyDeployed: true,
+ log: true,
+ waitConfirmations: 1,
+ // gasPrice: '0',
+ })
+ return Promise.resolve(false)
+}
+
+module.exports.tags = ['SendUln302', 'test']
diff --git a/endpoint/deploy/LayerZeroV2/004-ReceiveUln302.ts b/endpoint/deploy/LayerZeroV2/004-ReceiveUln302.ts
new file mode 100644
index 0000000..79a28dc
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/004-ReceiveUln302.ts
@@ -0,0 +1,28 @@
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+import 'hardhat-deploy'
+import '@nomiclabs/hardhat-ethers'
+
+import { getDeployedAddress } from './util'
+
+module.exports = async function (hre: HardhatRuntimeEnvironment): Promise {
+ const { deploy } = hre.deployments
+ const { layerzero } = await hre.getNamedAccounts()
+
+ // get the EndpointV2 address
+ const endpointAddr = getDeployedAddress(hre, 'EndpointV2')
+
+ // const gasPrice = await hre.ethers.provider.getGasPrice()
+ await deploy('ReceiveUln302', {
+ from: layerzero,
+ args: [endpointAddr],
+ // if set it to true, will not attempt to deploy
+ // even if the contract deployed under the same name is different
+ skipIfAlreadyDeployed: true,
+ log: true,
+ waitConfirmations: 1,
+ // gasPrice: '0'
+ })
+ return Promise.resolve(false)
+}
+
+module.exports.tags = ['ReceiveUln302', 'test']
diff --git a/endpoint/deploy/LayerZeroV2/004-ReceiveUln302View.ts b/endpoint/deploy/LayerZeroV2/004-ReceiveUln302View.ts
new file mode 100644
index 0000000..b859df1
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/004-ReceiveUln302View.ts
@@ -0,0 +1,43 @@
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+import 'hardhat-deploy'
+
+import { isZKSyncBasedChain, networkToChain } from '@layerzerolabs/lz-definitions'
+
+import { getDeployedAddress } from './util'
+
+module.exports = async function (hre: HardhatRuntimeEnvironment): Promise {
+ const { deployments, getNamedAccounts } = hre
+ const { deploy } = deployments
+ const { relayer, proxyAdmin } = await getNamedAccounts()
+
+ // get the EndpointV2 address
+ const endpointAddr = getDeployedAddress(hre, 'EndpointV2')
+ const uln302 = await deployments.get('ReceiveUln302')
+
+ const proxyContract = isZKSyncBasedChain(networkToChain(hre.network.name))
+ ? 'TransparentUpgradeableProxy'
+ : 'OptimizedTransparentProxy'
+
+ await deploy('ReceiveUln302View', {
+ from: relayer,
+ log: true,
+ waitConfirmations: 1,
+ // gasPrice: '0',
+ // skipIfAlreadyDeployed: true,
+ proxy: {
+ owner: proxyAdmin,
+ proxyContract: proxyContract,
+ viaAdminContract: { name: 'ExecutorProxyAdmin', artifact: 'ProxyAdmin' },
+ execute: {
+ init: {
+ methodName: 'initialize',
+ args: [endpointAddr, uln302.address],
+ },
+ },
+ },
+ })
+ return Promise.resolve(false)
+}
+
+module.exports.tags = ['ReceiveUln302View']
+module.exports.dependencies = ['ReceiveUln302']
diff --git a/endpoint/deploy/LayerZeroV2/101-DVNFeeLib.ts b/endpoint/deploy/LayerZeroV2/101-DVNFeeLib.ts
new file mode 100644
index 0000000..8a78a8f
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/101-DVNFeeLib.ts
@@ -0,0 +1,37 @@
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import 'hardhat-deploy'
+import '@nomiclabs/hardhat-ethers'
+import { getNativeDecimalsRate } from './configs/deployConfig'
+
+module.exports = async function (hre: HardhatRuntimeEnvironment): Promise {
+ // const { deployments, getNamedAccounts, ethers } = hre
+ const { deployments, getNamedAccounts } = hre
+ const { deploy } = deployments
+ const { verifier } = await getNamedAccounts()
+ console.log(`DVNFeeLib deployer: ${verifier}`)
+
+ const suffix = process.env.DVNSUFFIX
+ let name = 'DVNFeeLib'
+ if (suffix) {
+ name = `${name}${suffix}`
+ }
+
+ const nativeDecimalsRate = getNativeDecimalsRate(hre.network.name)
+ console.log(`Native Decimals Rate: ${nativeDecimalsRate}`)
+
+ await deploy(name, {
+ contract: 'DVNFeeLib',
+ from: verifier,
+ args: [nativeDecimalsRate],
+ // if set it to true, will not attempt to deploy
+ // even if the contract deployed under the same name is different
+ skipIfAlreadyDeployed: true,
+ log: true,
+ waitConfirmations: 1,
+ // gasPrice: '0'
+ })
+ return Promise.resolve(false)
+}
+
+module.exports.tags = ['DVNFeeLib', 'test']
diff --git a/endpoint/deploy/LayerZeroV2/110-ExecutorFeeLib.ts b/endpoint/deploy/LayerZeroV2/110-ExecutorFeeLib.ts
new file mode 100644
index 0000000..9c6eebe
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/110-ExecutorFeeLib.ts
@@ -0,0 +1,28 @@
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import 'hardhat-deploy'
+import '@nomiclabs/hardhat-ethers'
+import { getNativeDecimalsRate } from './configs/deployConfig'
+
+module.exports = async function (hre: HardhatRuntimeEnvironment) {
+ const { deployments, getNamedAccounts } = hre
+ const { deploy } = deployments
+ const { relayer } = await getNamedAccounts()
+ console.log(`ExecutorFeeLib deployer: ${relayer}`)
+
+ const nativeDecimalsRate = getNativeDecimalsRate(hre.network.name)
+ console.log(`Native Decimals Rate: ${nativeDecimalsRate}`)
+
+ await deploy('ExecutorFeeLib', {
+ from: relayer,
+ args: [nativeDecimalsRate],
+ // if set it to true, will not attempt to deploy
+ // even if the contract deployed under the same name is different
+ skipIfAlreadyDeployed: true,
+ log: true,
+ waitConfirmations: 1,
+ // gasPrice: '0',
+ })
+}
+
+module.exports.tags = ['ExecutorFeeLib', 'test']
diff --git a/endpoint/deploy/LayerZeroV2/111-Executor.ts b/endpoint/deploy/LayerZeroV2/111-Executor.ts
new file mode 100644
index 0000000..ec62440
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/111-Executor.ts
@@ -0,0 +1,116 @@
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+import { Deployment } from 'hardhat-deploy/dist/types'
+import invariant from 'tiny-invariant'
+import 'hardhat-deploy'
+import '@nomiclabs/hardhat-ethers'
+
+import {
+ EndpointVersion,
+ Environment,
+ isNetworkEndpointIdSupported,
+ isZKSyncBasedChain,
+ networkToChain,
+ networkToEnv,
+ networkToStage,
+} from '@layerzerolabs/lz-definitions'
+import { ALT_TOKEN_CHAINS } from '@layerzerolabs/ops-definitions-layerzero'
+
+import { EXECUTOR_ADMINS, EXECUTOR_ROLE_ADMIN } from './configs/deployConfig'
+import { getDeployedAddress, getUltraLightNodeV2Address, getUltraLightNodeV2AltTokenAddress } from './util'
+
+// config
+const ROLE_ADMIN = EXECUTOR_ROLE_ADMIN
+
+const ADMINS = EXECUTOR_ADMINS
+
+module.exports = async function (hre: HardhatRuntimeEnvironment) {
+ const { deployments, getNamedAccounts } = hre
+ const { deploy } = deployments
+ const { relayer, proxyAdmin, relayerAdmin } = await getNamedAccounts()
+ invariant(relayer, 'relayer is not set')
+ console.log(`Executor deployer: ${relayer}`)
+ invariant(proxyAdmin, 'proxyAdmin is not set')
+ console.log(`Executor proxyOwner: ${proxyAdmin}`)
+ invariant(relayerAdmin, 'relayerAdmin is not set')
+ console.log(`Executor admin: ${relayerAdmin}`)
+
+ const endpointAddr = getDeployedAddress(hre, 'EndpointV2')
+
+ let receiveUln301Address = hre.ethers.constants.AddressZero
+ let sendUln301Address: string | undefined
+ if (
+ hre.network.name == 'hardhat' ||
+ (isNetworkEndpointIdSupported(hre.network.name, EndpointVersion.V1) &&
+ !ALT_TOKEN_CHAINS.includes(networkToChain(hre.network.name)))
+ ) {
+ const sendUln301: Deployment = await deployments.get('SendUln301')
+ const receiveUln301: Deployment = await deployments.get('ReceiveUln301')
+ sendUln301Address = sendUln301.address
+ receiveUln301Address = receiveUln301.address
+ }
+ const priceFeed: Deployment = await deployments.get('PriceFeed')
+ const sendUln302: Deployment = await deployments.get('SendUln302')
+ // only 301, 302 are supported
+ const messageLibs = [sendUln302.address]
+ if (sendUln301Address !== undefined) {
+ messageLibs.push(sendUln301Address)
+ }
+ // ulnV2
+ let ulnV2: string = getUltraLightNodeV2Address(hre)
+ if (typeof ulnV2 === 'undefined') {
+ console.log(`UltraLightNodeV2 not deployed, try UltraLightNodeV2AltToken`)
+ ulnV2 = getUltraLightNodeV2AltTokenAddress(hre)
+ }
+ if (ulnV2) {
+ messageLibs.push(ulnV2)
+ } else {
+ console.log(`UltraLightNodeV2 and UltraLightNodeV2AltToken both not deployed, skip`)
+ }
+ console.log(`executor messageLibs: ${messageLibs}`)
+
+ const stage = networkToStage(hre.network.name)
+ let roleAdmin = ROLE_ADMIN[stage]
+ const admins = [...ADMINS[stage]]
+ admins.push(relayerAdmin)
+
+ // for local test
+ if (networkToEnv(hre.network.name, EndpointVersion.V2) === Environment.LOCAL) {
+ const { relayerRoleAdmin } = await getNamedAccounts()
+ roleAdmin = relayerRoleAdmin
+ }
+ invariant(roleAdmin, 'roleAdmin is not set')
+ console.log(`Executor roleAdmin: ${roleAdmin}`)
+
+ const proxyContract = isZKSyncBasedChain(networkToChain(hre.network.name))
+ ? 'TransparentUpgradeableProxy'
+ : 'OptimizedTransparentProxy'
+
+ console.log(`[${hre.network.name}] Executor proxyContract: ${proxyContract}`)
+
+ // let gasPrice = (await hre.ethers.provider.getGasPrice()).mul(3)
+ await deploy('Executor', {
+ from: relayer,
+ log: true,
+ waitConfirmations: 1,
+ // gasPrice: gasPrice,
+ // skipIfAlreadyDeployed: true,
+ proxy: {
+ owner: proxyAdmin,
+ proxyContract: proxyContract,
+ viaAdminContract: { name: 'ExecutorProxyAdmin', artifact: 'ProxyAdmin' },
+ execute: {
+ init: {
+ methodName: 'initialize',
+ args: [endpointAddr, receiveUln301Address, messageLibs, priceFeed.address, roleAdmin, admins],
+ },
+ onUpgrade: {
+ methodName: 'onUpgrade',
+ args: [receiveUln301Address],
+ },
+ },
+ },
+ })
+}
+
+module.exports.tags = ['Executor', 'test']
+module.exports.dependencies = ['PriceFeed', 'ReceiveUln301', 'SendUln301', 'SendUln302']
diff --git a/endpoint/deploy/LayerZeroV2/112-LzExecutor.ts b/endpoint/deploy/LayerZeroV2/112-LzExecutor.ts
new file mode 100644
index 0000000..991e996
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/112-LzExecutor.ts
@@ -0,0 +1,50 @@
+import 'hardhat-deploy'
+import '@nomiclabs/hardhat-ethers'
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+import { Deployment } from 'hardhat-deploy/types'
+
+import { isZKSyncBasedChain, networkToChain } from '@layerzerolabs/lz-definitions'
+
+import { getDeployedAddress } from './util'
+
+module.exports = async function (hre: HardhatRuntimeEnvironment): Promise {
+ const { deployments, getNamedAccounts } = hre
+ const { deploy } = deployments
+ const { relayer, proxyAdmin } = await getNamedAccounts()
+ console.log(`LzExecutor deployer: ${relayer}`)
+ console.log(`LzExecutor proxyAdmin: ${proxyAdmin}`)
+
+ const receiveUln302: Deployment = await deployments.get('ReceiveUln302')
+ console.log(`receiveUln302: ${receiveUln302.address}`)
+ const receiveUln302View: Deployment = await deployments.get('ReceiveUln302View')
+ console.log(`receiveUln302View: ${receiveUln302View.address}`)
+ const endpointAddr = getDeployedAddress(hre, 'EndpointV2')
+ console.log(`endpointAddr: ${endpointAddr}`)
+
+ const proxyContract = isZKSyncBasedChain(networkToChain(hre.network.name))
+ ? 'TransparentUpgradeableProxy'
+ : 'OptimizedTransparentProxy'
+ console.log(`[${hre.network.name}] Executor proxyContract: ${proxyContract}`)
+ await deploy('LzExecutor', {
+ from: relayer,
+ log: true,
+ waitConfirmations: 1,
+ // gasPrice: '0',
+ // skipIfAlreadyDeployed: true,
+ proxy: {
+ owner: proxyAdmin,
+ proxyContract: proxyContract,
+ viaAdminContract: { name: 'ExecutorProxyAdmin', artifact: 'ProxyAdmin' },
+ execute: {
+ init: {
+ methodName: 'initialize',
+ args: [receiveUln302.address, receiveUln302View.address, endpointAddr],
+ },
+ },
+ },
+ })
+ return Promise.resolve(false)
+}
+
+module.exports.tags = ['LzExecutor']
+module.exports.dependencies = ['ReceiveUln302', 'ReceiveUln302View']
diff --git a/endpoint/deploy/LayerZeroV2/dvn.ts b/endpoint/deploy/LayerZeroV2/dvn.ts
new file mode 100644
index 0000000..77e7aab
--- /dev/null
+++ b/endpoint/deploy/LayerZeroV2/dvn.ts
@@ -0,0 +1,327 @@
+import { Stage } from '@layerzerolabs/lz-definitions'
+
+export interface DVNDeployConfig {
+ [stage: string]: {
+ [suffix: string]: {
+ deploymentSuffix: string
+ signers: string[]
+ admins: string[]
+ quorum: number
+ priceFeedAddress?: string
+ }
+ }
+}
+
+const essenceAdmins: { [env in Stage]: string[] } = {
+ [Stage.SANDBOX]: ['0x0e9971c0005D91336c1441b8F03c1C4fe5FB4584'],
+ [Stage.TESTNET]: [
+ '0xc13b65f7c53Cd6db2EA205a4b574b4a0858720A6', // testnet deployer
+ '0xEb6304c9904DC04eF66D367B2EBc41525d1F231b', // testnet essense execute()'er
+ '0x0a66ad3CBF27De2F6252d166f38eA8e8245A8C41', // chip
+ ],
+ [Stage.MAINNET]: [
+ '0x9F403140Bc0574D7d36eA472b82DAa1Bbd4eF327',
+ '0xB52Fa54FC261398058c3Ac7B8dD442D7d8B9F0B6', // mainnet dv deployer and operational admin
+ '0xB8FF877ed78Ba520Ece21B1de7843A8a57cA47Cb', // essence executor
+ ],
+}
+
+export const supportedDVNDeployConfig: DVNDeployConfig = {
+ [Stage.SANDBOX]: {
+ default: {
+ deploymentSuffix: '',
+ signers: [],
+ admins: essenceAdmins[Stage.SANDBOX],
+ quorum: 1,
+ },
+ gcda: {
+ deploymentSuffix: 'GCDA',
+ signers: [],
+ admins: essenceAdmins[Stage.SANDBOX],
+ quorum: 1,
+ },
+ },
+ [Stage.TESTNET]: {
+ // layerzero
+ default: {
+ deploymentSuffix: '',
+ signers: [
+ '0x803372a29B7d63b7364F4666392ef59Ee24F24d5',
+ '0x39fe585C5edd85dAD6103039aa03e85FB6851C75',
+ '0xF8bbDBc3260D68936B3FaDA6445C4Bb58d9AaD09',
+ ],
+ admins: essenceAdmins[Stage.TESTNET],
+ quorum: 2,
+ },
+ gcda: {
+ deploymentSuffix: 'GCDA',
+ signers: [
+ '0x825a9fc02527eb260a2d67c58af502f2c3da4cb4',
+ '0x253596a9ac54ceb3c571ccf3be3411abf8e063a9',
+ '0x58385370986f306afa6064051bb383f2b5b5d811',
+ ],
+ admins: [
+ '0xc13b65f7c53Cd6db2EA205a4b574b4a0858720A6', // testnet deployer
+ '0xEb6304c9904DC04eF66D367B2EBc41525d1F231b', // testnet essense execute()'er
+ '0x0a66ad3CBF27De2F6252d166f38eA8e8245A8C41', // chip
+ '0x0e251d9095dD128292A28eB383127d05d95BBD17', // goulding deployer
+ ],
+ quorum: 2,
+ // default price feed
+ },
+ nethermind: {
+ deploymentSuffix: 'Nethermind',
+ signers: ['0x103b1df14795be07016c6d38b6a1e0361c591e49'],
+ admins: essenceAdmins[Stage.TESTNET],
+ quorum: 1,
+ },
+ tapioca: {
+ deploymentSuffix: 'Tapioca',
+ signers: ['0x7F22f1656230894206eeDA9800eb38481284121B'],
+ admins: essenceAdmins[Stage.TESTNET],
+ quorum: 1,
+ },
+ delegate: {
+ deploymentSuffix: 'Delegate',
+ signers: ['0x1c19ee381a75d81fc53bc193181e8853a50c32a5'],
+ admins: essenceAdmins[Stage.TESTNET],
+ quorum: 1,
+ },
+ switchboard: {
+ deploymentSuffix: 'Switchboard',
+ signers: ['0x96c588e0c66434dba7b1819f9e03256b280da556'],
+ admins: essenceAdmins[Stage.TESTNET],
+ quorum: 1,
+ },
+ stablelab: {
+ deploymentSuffix: 'Stablelab',
+ signers: ['0xa10a1fd5a72a017bab4cab2dd518d1940703a9aa'],
+ admins: essenceAdmins[Stage.TESTNET],
+ quorum: 1,
+ },
+ gitcoin: {
+ deploymentSuffix: 'Gitcoin',
+ signers: ['0x65f84952F4CbCcc7D3b777469775A104d72a84B3'],
+ admins: essenceAdmins[Stage.TESTNET],
+ quorum: 1,
+ },
+ p2p: {
+ deploymentSuffix: 'P2P',
+ signers: ['0x14d45596a07a0947fca6d0e0612ace605e471a5e'],
+ admins: essenceAdmins[Stage.TESTNET],
+ quorum: 1,
+ },
+ bware: {
+ deploymentSuffix: 'Bware',
+ signers: ['0xdF70763636C4F47EA9b1A9c0A211a84df6AFacC2'],
+ admins: essenceAdmins[Stage.TESTNET],
+ quorum: 1,
+ },
+ },
+ [Stage.MAINNET]: {
+ // layerzero
+ default: {
+ deploymentSuffix: '',
+ signers: [
+ '0x5AB40527AA622960E26a171c58011de58DFA5bE9',
+ '0x7e1879A1Fba74d8107E2E3EE42f5fea5E6500f5B',
+ '0xE4059e1B02d8d74Fc82d27BD5006Ecc3605D9CEc',
+ ],
+ admins: [
+ '0x9F403140Bc0574D7d36eA472b82DAa1Bbd4eF327', // mainnet deployer
+ '0xB8FF877ed78Ba520Ece21B1de7843A8a57cA47Cb', // essence executor
+ ],
+ quorum: 2,
+ // default price feed
+ },
+ gcda: {
+ deploymentSuffix: 'GCDA',
+ signers: [
+ '0xddbdc840164da20bcf6aa85c3957396c14642ab1',
+ '0x0d099360a069359fe7c9503ab44cbcb9eb2a7466',
+ '0x94bc8ba19b4cce7aac14e2679942fc567e027c67',
+ ],
+ admins: [
+ '0x5EE2B0fd8d964cB50e787DB4fF176D7bbb0fD180', // deployer
+ '0x5b1DaD86c9c4aE282BBAbbE89C5f6231C065c236', // mainnet EssenceAdmin GCDA operational Admin
+ '0x21C3de23d98Caddc406E3d31b25e807aDDF33633', // mainnet Essence GCDA execute()'er
+ ],
+ quorum: 2,
+ // default price feed
+ },
+ tapioca: {
+ deploymentSuffix: 'Tapioca',
+ signers: ['0x5431deE4114E460916d81E360321fdfD9C175582'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ stablelab: {
+ deploymentSuffix: 'Stablelab',
+ signers: ['0xf137c0b521d05f38968f12eac73319902892944f'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ nethermind: {
+ deploymentSuffix: 'Nethermind',
+ signers: ['0x103b1df14795be07016c6d38b6a1e0361c591e49'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ blockdaemon: {
+ deploymentSuffix: 'Blockdaemon',
+ signers: ['0x1f38850bb295bbb1eb2f6886dc6e1770a4d3d3dc'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ mim: {
+ deploymentSuffix: 'MIM',
+ signers: ['0x2a4360fb98b5a6514c9c27c6e81ac8f83d7297c0'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ planetarium: {
+ deploymentSuffix: 'Planetarium',
+ signers: ['0x1d9ec57b17ccaa46c9fd6ec0274cfd41c76e2a43'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ republic: {
+ deploymentSuffix: 'Republic',
+ signers: ['0xbdabfdcfd8bf447967cb81d13d505a84571f88f4'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ nocturnal: {
+ deploymentSuffix: 'Nocturnal',
+ signers: ['0x80994D5F4EF4b8Ab49c44Bf302c68400e4f86e78'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ shrapnel: {
+ deploymentSuffix: 'Shrapnel',
+ signers: ['0x8F3aaFaa05616bF388266Fe22afA92502B8a7a79', '0x213eB25CED5699A532E8A9FAE0158CeF73Fa50d7'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 2,
+ },
+ lagrange: {
+ deploymentSuffix: 'Lagrange',
+ signers: ['0x237951918a4909B85723303a164DEca32B503adf'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ horizen: {
+ deploymentSuffix: 'Horizen',
+ signers: ['0x8e5F5b2Aa22EbC274E5E8dA08Aef90c60Fb9b4e4', '0x4777Be04572CF445ff2c711fe924522bFd559193'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 2,
+ },
+ nodesguru: {
+ deploymentSuffix: 'Nodesguru',
+ signers: ['0x5fbEaF1caCB6aF4D8757660801E9e8976e1f7E2D'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ bware: {
+ deploymentSuffix: 'Bware',
+ signers: ['0x20cBb0A8DD90Fb5F0f9A88AE74896A82A7a4fD13'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ animoca: {
+ deploymentSuffix: 'Animoca',
+ signers: ['0xda05cbd2b12b5c80193f52dddc54543f895ce2fc'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ blockhunters: {
+ deploymentSuffix: 'Blockhunters',
+ signers: ['0x6B8e1f5DF0777f8e969135112cd7Ca086Dda95CF', '0x0f7FF35cb146152CDD5bc19d10C9f2e0FF213217'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 2,
+ },
+ p2p: {
+ deploymentSuffix: 'P2P',
+ signers: ['0xe437caabe4da93f93a278aa47bc83495aacdf2d2'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ superduper: {
+ deploymentSuffix: 'Superduper',
+ signers: ['0xeAee18fe86CEFf37B393773F43cfb3B77B77aD23'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ delegate: {
+ deploymentSuffix: 'Delegate',
+ signers: ['0x6adabea1e42958fe4c3597e8a3675adb7af605df'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ '01node': {
+ deploymentSuffix: '01Node',
+ signers: ['0x2E6F38d111DC74f9a9DAAFCF2De71F7489c44924'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ restake: {
+ deploymentSuffix: 'Restake',
+ signers: ['0x6b58747defed7eeac9a92839c682491c9093e9e3'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ bcw: {
+ deploymentSuffix: 'BCW',
+ signers: ['0x000f8df3fd788a12777a083beddc447263d31720'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ switchboard: {
+ deploymentSuffix: 'Switchboard',
+ signers: ['0x69dcdc79f2720785485d4aa0e5d0e1d443f0f6c3'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ gitcoin: {
+ deploymentSuffix: 'Gitcoin',
+ signers: ['0xb977605D38E2DeCDba229c742906086fD962dB54'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ abdb: {
+ deploymentSuffix: 'ABDB',
+ signers: ['0xda05cbd2b12b5c80193f52dddc54543f895ce2fc', '0x1f38850bb295bbb1eb2f6886dc6e1770a4d3d3dc'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ luganodes: {
+ deploymentSuffix: 'Luganodes',
+ signers: ['0xf5e075609ac2376572752d16f5152d59601183df'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ stakingcabin: {
+ deploymentSuffix: 'Stakingcabin',
+ signers: ['0xBC43b6f96399F42f8f545D0f7a569d18fAaCFc1F'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ pops: {
+ deploymentSuffix: 'Pops',
+ signers: ['0xefC1eb0dB17b7A3039eEF8601fe5Ce4Bf457f776'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ omnix: {
+ deploymentSuffix: 'Omnix',
+ signers: ['0xa595363d5c72fdd9e179c6d8a20e68d561ac9207'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ zenrock: {
+ deploymentSuffix: 'Zenrock',
+ signers: ['0xC242767d8A3D40330db0DefEc1da5C99bd6b43F4'],
+ admins: essenceAdmins[Stage.MAINNET],
+ quorum: 1,
+ },
+ },
+}
diff --git a/endpoint/foundry.toml b/endpoint/foundry.toml
new file mode 100644
index 0000000..37c3d35
--- /dev/null
+++ b/endpoint/foundry.toml
@@ -0,0 +1,27 @@
+[profile.default]
+solc-version = '0.8.22'
+src = 'contracts'
+out = 'out'
+test = 'test/foundry'
+cache_path = 'cache/foundry'
+libs = [
+ # We provide a set of useful contract utilities
+ # in the lib directory of @layerzerolabs/toolbox-foundry:
+ #
+ # - forge-std
+ # - ds-test
+ # - solidity-bytes-utils
+ 'node_modules/@layerzerolabs/toolbox-foundry/lib',
+ 'node_modules',
+]
+
+remappings = [
+ # Due to a misconfiguration of solidity-bytes-utils, an outdated version
+ # of forge-std is being dragged in
+ #
+ # To remedy this, we'll remap the ds-test and forge-std imports to ou own versions
+ 'ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test',
+ 'forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std',
+ '@layerzerolabs/=node_modules/@layerzerolabs/',
+ '@openzeppelin/=node_modules/@openzeppelin/',
+]
diff --git a/endpoint/hardhat.config.ts b/endpoint/hardhat.config.ts
new file mode 100644
index 0000000..cf20c1f
--- /dev/null
+++ b/endpoint/hardhat.config.ts
@@ -0,0 +1,78 @@
+// Get the environment configuration from .env file
+//
+// To make use of automatic environment setup:
+// - Duplicate .env.example file and name it .env
+// - Fill in the environment variables
+import 'dotenv/config'
+
+import 'hardhat-deploy'
+import 'hardhat-contract-sizer'
+import '@nomiclabs/hardhat-ethers'
+import '@layerzerolabs/toolbox-hardhat'
+import { HardhatUserConfig, HttpNetworkAccountsUserConfig } from 'hardhat/types'
+
+import { EndpointId } from '@layerzerolabs/lz-definitions'
+
+// Set your preferred authentication method
+//
+// If you prefer using a mnemonic, set a MNEMONIC environment variable
+// to a valid mnemonic
+const MNEMONIC = process.env.MNEMONIC
+
+// If you prefer to be authenticated using a private key, set a PRIVATE_KEY environment variable
+const PRIVATE_KEY = process.env.PRIVATE_KEY
+
+const accounts: HttpNetworkAccountsUserConfig | undefined = MNEMONIC
+ ? { mnemonic: MNEMONIC }
+ : PRIVATE_KEY
+ ? [PRIVATE_KEY]
+ : undefined
+
+if (accounts == null) {
+ console.warn(
+ 'Could not find MNEMONIC or PRIVATE_KEY environment variables. It will not be possible to execute transactions in your example.'
+ )
+}
+
+const config: HardhatUserConfig = {
+ paths: {
+ cache: 'cache/hardhat',
+ },
+ solidity: {
+ compilers: [
+ {
+ version: '0.8.22',
+ settings: {
+ optimizer: {
+ enabled: true,
+ runs: 200,
+ },
+ },
+ },
+ ],
+ },
+ networks: {
+ 'sepolia-testnet': {
+ eid: EndpointId.SEPOLIA_V2_TESTNET,
+ url: process.env.RPC_URL_SEPOLIA || 'https://rpc.sepolia.org/',
+ accounts,
+ },
+ 'avalanche-testnet': {
+ eid: EndpointId.AVALANCHE_V2_TESTNET,
+ url: process.env.RPC_URL_FUJI || 'https://rpc.ankr.com/avalanche_fuji',
+ accounts,
+ },
+ 'amoy-testnet': {
+ eid: EndpointId.AMOY_V2_TESTNET,
+ url: process.env.RPC_URL_AMOY || 'https://polygon-amoy-bor-rpc.publicnode.com',
+ accounts,
+ },
+ },
+ namedAccounts: {
+ deployer: {
+ default: 0, // wallet address of index[0], of the mnemonic in .env
+ },
+ },
+}
+
+export default config
diff --git a/endpoint/layerzero.config.ts b/endpoint/layerzero.config.ts
new file mode 100644
index 0000000..53782b5
--- /dev/null
+++ b/endpoint/layerzero.config.ts
@@ -0,0 +1,96 @@
+import { EndpointId } from '@layerzerolabs/lz-definitions'
+
+import type { OAppOmniGraphHardhat, OmniPointHardhat } from '@layerzerolabs/toolbox-hardhat'
+
+const sepoliaContract: OmniPointHardhat = {
+ eid: EndpointId.SEPOLIA_V2_TESTNET,
+ contractName: 'MyOApp',
+}
+
+const fujiContract: OmniPointHardhat = {
+ eid: EndpointId.AVALANCHE_V2_TESTNET,
+ contractName: 'MyOApp',
+}
+
+const amoyContract: OmniPointHardhat = {
+ eid: EndpointId.AMOY_V2_TESTNET,
+ contractName: 'MyOApp',
+}
+
+const config: OAppOmniGraphHardhat = {
+ contracts: [
+ {
+ contract: fujiContract,
+ /**
+ * This config object is optional.
+ * The callerBpsCap refers to the maximum fee (in basis points) that the contract can charge.
+ */
+
+ // config: {
+ // callerBpsCap: BigInt(300),
+ // },
+ },
+ {
+ contract: sepoliaContract,
+ },
+ {
+ contract: amoyContract,
+ },
+ ],
+ connections: [
+ {
+ from: fujiContract,
+ to: sepoliaContract,
+ config: {
+ sendConfig: {
+ executorConfig: {
+ maxMessageSize: 99,
+ executor: '0x71d7a02cDD38BEa35E42b53fF4a42a37638a0066',
+ },
+ ulnConfig: {
+ confirmations: BigInt(42),
+ requiredDVNs: [],
+ optionalDVNs: [
+ '0xe9dCF5771a48f8DC70337303AbB84032F8F5bE3E',
+ '0x0AD50201807B615a71a39c775089C9261A667780',
+ ],
+ optionalDVNThreshold: 2,
+ },
+ },
+ receiveConfig: {
+ ulnConfig: {
+ confirmations: BigInt(42),
+ requiredDVNs: [],
+ optionalDVNs: [
+ '0x3Eb0093E079EF3F3FC58C41e13FF46c55dcb5D0a',
+ '0x0AD50201807B615a71a39c775089C9261A667780',
+ ],
+ optionalDVNThreshold: 2,
+ },
+ },
+ },
+ },
+ {
+ from: fujiContract,
+ to: amoyContract,
+ },
+ {
+ from: sepoliaContract,
+ to: fujiContract,
+ },
+ {
+ from: sepoliaContract,
+ to: amoyContract,
+ },
+ {
+ from: amoyContract,
+ to: sepoliaContract,
+ },
+ {
+ from: amoyContract,
+ to: fujiContract,
+ },
+ ],
+}
+
+export default config
diff --git a/endpoint/package.json b/endpoint/package.json
new file mode 100644
index 0000000..a53e915
--- /dev/null
+++ b/endpoint/package.json
@@ -0,0 +1,73 @@
+{
+ "name": "@layerzerolabs/oapp-example",
+ "version": "0.2.13",
+ "private": true,
+ "license": "MIT",
+ "scripts": {
+ "clean": "rm -rf artifacts cache out",
+ "compile": "$npm_execpath run compile:forge && $npm_execpath run compile:hardhat",
+ "compile:forge": "forge build",
+ "compile:hardhat": "hardhat compile",
+ "lint": "$npm_execpath run lint:js && $npm_execpath run lint:sol",
+ "lint:fix": "eslint --fix '**/*.{js,ts,json}' && prettier --write . && solhint 'contracts/**/*.sol' --fix --noPrompt",
+ "lint:js": "eslint '**/*.{js,ts,json}' && prettier --check .",
+ "lint:sol": "solhint 'contracts/**/*.sol'",
+ "test": "$npm_execpath run test:forge && $npm_execpath run test:hardhat",
+ "test:forge": "forge test",
+ "test:hardhat": "hardhat test"
+ },
+ "resolutions": {
+ "ethers": "^5.7.2",
+ "hardhat-deploy": "^0.12.1"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.23.9",
+ "@layerzerolabs/eslint-config-next": "~2.3.34",
+ "@layerzerolabs/lz-definitions": "^2.3.34",
+ "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.34",
+ "@layerzerolabs/lz-evm-protocol-v2": "^2.3.34",
+ "@layerzerolabs/lz-evm-v1-0.7": "^2.3.34",
+ "@layerzerolabs/lz-v2-utilities": "^2.3.34",
+ "@layerzerolabs/oapp-evm": "^0.0.3",
+ "@layerzerolabs/prettier-config-next": "^2.3.34",
+ "@layerzerolabs/solhint-config": "^2.3.34",
+ "@layerzerolabs/test-devtools-evm-foundry": "~0.2.11",
+ "@layerzerolabs/toolbox-foundry": "~0.1.9",
+ "@layerzerolabs/toolbox-hardhat": "~0.3.6",
+ "@nomicfoundation/hardhat-ethers": "^3.0.5",
+ "@nomiclabs/hardhat-ethers": "^2.2.3",
+ "@openzeppelin/contracts": "^5.0.2",
+ "@openzeppelin/contracts-upgradeable": "^5.0.2",
+ "@rushstack/eslint-patch": "^1.7.0",
+ "@types/chai": "^4.3.11",
+ "@types/mocha": "^10.0.6",
+ "@types/node": "~18.18.14",
+ "chai": "^4.4.1",
+ "dotenv": "^16.4.1",
+ "eslint": "^8.55.0",
+ "eslint-plugin-jest-extended": "~2.0.0",
+ "ethers": "^5.7.2",
+ "hardhat": "^2.22.3",
+ "hardhat-contract-sizer": "^2.10.0",
+ "hardhat-deploy": "^0.12.1",
+ "mocha": "^10.2.0",
+ "prettier": "^3.2.5",
+ "solhint": "^4.1.1",
+ "solidity-bytes-utils": "^0.8.2",
+ "ts-node": "^10.9.2",
+ "typescript": "^5.4.4"
+ },
+ "engines": {
+ "node": ">=18.16.0"
+ },
+ "pnpm": {
+ "overrides": {
+ "ethers": "^5.7.2",
+ "hardhat-deploy": "^0.12.1"
+ }
+ },
+ "overrides": {
+ "ethers": "^5.7.2",
+ "hardhat-deploy": "^0.12.1"
+ }
+}
diff --git a/endpoint/pnpm-lock.yaml b/endpoint/pnpm-lock.yaml
new file mode 100644
index 0000000..a8acf19
--- /dev/null
+++ b/endpoint/pnpm-lock.yaml
@@ -0,0 +1,8837 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+overrides:
+ ethers: ^5.7.2
+ hardhat-deploy: ^0.12.1
+
+importers:
+
+ .:
+ devDependencies:
+ '@babel/core':
+ specifier: ^7.23.9
+ version: 7.25.2
+ '@layerzerolabs/eslint-config-next':
+ specifier: ~2.3.34
+ version: 2.3.38(typescript@5.5.4)
+ '@layerzerolabs/lz-definitions':
+ specifier: ^2.3.34
+ version: 2.3.38
+ '@layerzerolabs/lz-evm-messagelib-v2':
+ specifier: ^2.3.34
+ version: 2.3.38(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@layerzerolabs/lz-evm-protocol-v2@2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2))(@layerzerolabs/lz-evm-v1-0.7@2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-protocol-v2':
+ specifier: ^2.3.34
+ version: 2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-v1-0.7':
+ specifier: ^2.3.34
+ version: 2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@layerzerolabs/lz-v2-utilities':
+ specifier: ^2.3.34
+ version: 2.3.38
+ '@layerzerolabs/oapp-evm':
+ specifier: ^0.0.3
+ version: 0.0.3(rzjgcitmshqiknfnsxwkpnnicm)
+ '@layerzerolabs/prettier-config-next':
+ specifier: ^2.3.34
+ version: 2.3.38
+ '@layerzerolabs/solhint-config':
+ specifier: ^2.3.34
+ version: 2.3.38(typescript@5.5.4)
+ '@layerzerolabs/test-devtools-evm-foundry':
+ specifier: ~0.2.11
+ version: 0.2.11(jr4wkoefb5a2xvwxl6dcarsev4)
+ '@layerzerolabs/toolbox-foundry':
+ specifier: ~0.1.9
+ version: 0.1.9
+ '@layerzerolabs/toolbox-hardhat':
+ specifier: ~0.3.6
+ version: 0.3.6(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@ethersproject/bignumber@5.7.0)(@ethersproject/constants@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@nomicfoundation/hardhat-ethers@3.0.7(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)))(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)(utf-8-validate@5.0.10)
+ '@nomicfoundation/hardhat-ethers':
+ specifier: ^3.0.5
+ version: 3.0.7(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))
+ '@nomiclabs/hardhat-ethers':
+ specifier: ^2.2.3
+ version: 2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))
+ '@openzeppelin/contracts':
+ specifier: ^5.0.2
+ version: 5.0.2
+ '@openzeppelin/contracts-upgradeable':
+ specifier: ^5.0.2
+ version: 5.0.2(@openzeppelin/contracts@5.0.2)
+ '@rushstack/eslint-patch':
+ specifier: ^1.7.0
+ version: 1.10.4
+ '@types/chai':
+ specifier: ^4.3.11
+ version: 4.3.18
+ '@types/mocha':
+ specifier: ^10.0.6
+ version: 10.0.7
+ '@types/node':
+ specifier: ~18.18.14
+ version: 18.18.14
+ chai:
+ specifier: ^4.4.1
+ version: 4.5.0
+ dotenv:
+ specifier: ^16.4.1
+ version: 16.4.5
+ eslint:
+ specifier: ^8.55.0
+ version: 8.57.0
+ eslint-plugin-jest-extended:
+ specifier: ~2.0.0
+ version: 2.0.3(eslint@8.57.0)(typescript@5.5.4)
+ ethers:
+ specifier: ^5.7.2
+ version: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ hardhat:
+ specifier: ^2.22.3
+ version: 2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)
+ hardhat-contract-sizer:
+ specifier: ^2.10.0
+ version: 2.10.0(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))
+ hardhat-deploy:
+ specifier: ^0.12.1
+ version: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ mocha:
+ specifier: ^10.2.0
+ version: 10.7.3
+ prettier:
+ specifier: ^3.2.5
+ version: 3.3.3
+ solhint:
+ specifier: ^4.1.1
+ version: 4.5.4(typescript@5.5.4)
+ solidity-bytes-utils:
+ specifier: ^0.8.2
+ version: 0.8.2
+ ts-node:
+ specifier: ^10.9.2
+ version: 10.9.2(@types/node@18.18.14)(typescript@5.5.4)
+ typescript:
+ specifier: ^5.4.4
+ version: 5.5.4
+
+packages:
+
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
+ '@axelar-network/axelar-gmp-sdk-solidity@5.10.0':
+ resolution: {integrity: sha512-s8SImALvYB+5AeiT3tbfWNBI2Mhqw1x91i/zM3DNpVUCnAR2HKtsB9T84KnUn/OJjOVgb4h0lv7q9smeYniRPw==}
+ engines: {node: '>=18'}
+
+ '@babel/code-frame@7.24.7':
+ resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.25.4':
+ resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.25.2':
+ resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.25.5':
+ resolution: {integrity: sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.25.2':
+ resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.24.7':
+ resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.25.2':
+ resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-simple-access@7.24.7':
+ resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.24.8':
+ resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.24.7':
+ resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.24.8':
+ resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.25.0':
+ resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/highlight@7.24.7':
+ resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.25.4':
+ resolution: {integrity: sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/template@7.25.0':
+ resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.25.4':
+ resolution: {integrity: sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.25.4':
+ resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@chainlink/contracts-ccip@0.7.6':
+ resolution: {integrity: sha512-yNbCBFpLs3R+ALymto9dQYKz3vatnjqYGu1pnMD0i2fHEMthiXe0+otaNCGNht6n8k7ruNaA0DNpz3F+2jHQXw==}
+
+ '@colors/colors@1.5.0':
+ resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
+ engines: {node: '>=0.1.90'}
+
+ '@colors/colors@1.6.0':
+ resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
+ engines: {node: '>=0.1.90'}
+
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
+ '@dabh/diagnostics@2.0.3':
+ resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==}
+
+ '@eslint-community/eslint-utils@4.4.0':
+ resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.11.0':
+ resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/eslintrc@2.1.4':
+ resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@eslint/js@8.57.0':
+ resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@eth-optimism/contracts@0.5.40':
+ resolution: {integrity: sha512-MrzV0nvsymfO/fursTB7m/KunkPsCndltVgfdHaT1Aj5Vi6R/doKIGGkOofHX+8B6VMZpuZosKCMQ5lQuqjt8w==}
+ peerDependencies:
+ ethers: ^5.7.2
+
+ '@eth-optimism/contracts@0.6.0':
+ resolution: {integrity: sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==}
+ peerDependencies:
+ ethers: ^5.7.2
+
+ '@eth-optimism/core-utils@0.12.0':
+ resolution: {integrity: sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw==}
+
+ '@ethereumjs/common@2.6.5':
+ resolution: {integrity: sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==}
+
+ '@ethereumjs/rlp@4.0.1':
+ resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ '@ethereumjs/tx@3.5.2':
+ resolution: {integrity: sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==}
+
+ '@ethereumjs/util@8.1.0':
+ resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==}
+ engines: {node: '>=14'}
+
+ '@ethersproject/abi@5.7.0':
+ resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==}
+
+ '@ethersproject/abstract-provider@5.7.0':
+ resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==}
+
+ '@ethersproject/abstract-signer@5.7.0':
+ resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==}
+
+ '@ethersproject/address@5.7.0':
+ resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==}
+
+ '@ethersproject/base64@5.7.0':
+ resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==}
+
+ '@ethersproject/basex@5.7.0':
+ resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==}
+
+ '@ethersproject/bignumber@5.7.0':
+ resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==}
+
+ '@ethersproject/bytes@5.7.0':
+ resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==}
+
+ '@ethersproject/constants@5.7.0':
+ resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==}
+
+ '@ethersproject/contracts@5.7.0':
+ resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==}
+
+ '@ethersproject/hash@5.7.0':
+ resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==}
+
+ '@ethersproject/hdnode@5.7.0':
+ resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==}
+
+ '@ethersproject/json-wallets@5.7.0':
+ resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==}
+
+ '@ethersproject/keccak256@5.7.0':
+ resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==}
+
+ '@ethersproject/logger@5.7.0':
+ resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==}
+
+ '@ethersproject/networks@5.7.1':
+ resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==}
+
+ '@ethersproject/pbkdf2@5.7.0':
+ resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==}
+
+ '@ethersproject/properties@5.7.0':
+ resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==}
+
+ '@ethersproject/providers@5.7.2':
+ resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==}
+
+ '@ethersproject/random@5.7.0':
+ resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==}
+
+ '@ethersproject/rlp@5.7.0':
+ resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==}
+
+ '@ethersproject/sha2@5.7.0':
+ resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==}
+
+ '@ethersproject/signing-key@5.7.0':
+ resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==}
+
+ '@ethersproject/solidity@5.7.0':
+ resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==}
+
+ '@ethersproject/strings@5.7.0':
+ resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==}
+
+ '@ethersproject/transactions@5.7.0':
+ resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==}
+
+ '@ethersproject/units@5.7.0':
+ resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==}
+
+ '@ethersproject/wallet@5.7.0':
+ resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==}
+
+ '@ethersproject/web@5.7.1':
+ resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==}
+
+ '@ethersproject/wordlists@5.7.0':
+ resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==}
+
+ '@fastify/busboy@2.1.1':
+ resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
+ engines: {node: '>=14'}
+
+ '@humanwhocodes/config-array@0.11.14':
+ resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
+ engines: {node: '>=10.10.0'}
+ deprecated: Use @eslint/config-array instead
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/object-schema@2.0.3':
+ resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
+ deprecated: Use @eslint/object-schema instead
+
+ '@jridgewell/gen-mapping@0.3.5':
+ resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
+ '@layerzerolabs/devtools-evm-hardhat@1.1.0':
+ resolution: {integrity: sha512-DCiQKK/QnfakLRaNnIk8DLHTfqfzD1qJtQ1DCzFLROFewXjT7DAzJ947hNpbt84H9WxbR7e4gl1r/abB7jCisA==}
+ 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.24
+ '@layerzerolabs/devtools-evm': ~0.4.1
+ '@layerzerolabs/io-devtools': ~0.1.12
+ '@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
+
+ '@layerzerolabs/devtools-evm@0.4.1':
+ resolution: {integrity: sha512-nYCM/uUCwG/Z8DHG64O4lD++C6Fyqlc8JEJ+4Kz5Q5bInLv35za3ATRjUOwuckcMTfJBq6E5/zFAY5MvX0eWhg==}
+ 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.24
+ '@layerzerolabs/io-devtools': ~0.1.12
+ '@layerzerolabs/lz-definitions': ^2.3.3
+ fp-ts: ^2.16.2
+ zod: ^3.22.4
+
+ '@layerzerolabs/devtools@0.3.24':
+ resolution: {integrity: sha512-ylrEIvN4p27T7qe0GWcp6KakhKfqipez0HEBopFnNBfq5dG0sygCo72Bp738goKR4hpgkPqFlzIowNK39gXBRA==}
+ peerDependencies:
+ '@ethersproject/bytes': ~5.7.0
+ '@layerzerolabs/io-devtools': ~0.1.12
+ '@layerzerolabs/lz-definitions': ^2.3.3
+ zod: ^3.22.4
+
+ '@layerzerolabs/eslint-config-next@2.3.38':
+ resolution: {integrity: sha512-IRXSwDf1NqlUQsV/0Wd9i2G0SZmovBPqZmwkM4oRRhjmwywL2ee10ilT7gMVCUAfWCJ+4d1Q0tevuK0zVfgwjw==}
+
+ '@layerzerolabs/evm-sdks-core@2.3.38':
+ resolution: {integrity: sha512-Com9ZlW9hqn8btyNZ5GTmlOin+zuI9R46FqKS7+mByvAWwer03brvmz4sO4AVWUE3VKCzU5ioSYcNuWn6Ahzhg==}
+
+ '@layerzerolabs/export-deployments@0.0.11':
+ resolution: {integrity: sha512-VhsAMRLqFJSp6s5WnZzEA0CbIW5TE5OTCRLxY1Hf8yhEAIqzWpUdkqnms65QeRJ+82Mkx6YoR27rBA9v/bgStg==}
+ hasBin: true
+
+ '@layerzerolabs/io-devtools@0.1.12':
+ resolution: {integrity: sha512-Yf7Yw8FmBTJnvTtNt/MW1Mf03dBLoUkgVivHZNGekGSP0uUG5sN/Bi4WwSLTwfAvqg5whN8d1sWi4Pg3wld4HA==}
+ 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
+
+ '@layerzerolabs/lz-definitions@2.3.38':
+ resolution: {integrity: sha512-aNt+/qb+AI9tIfCxh8JuehhUakG3e6HsJuEaB/GzJakbCI9LmKucge1klDPse1fPoaWJ/akE+t+6fEleoMJvjw==}
+
+ '@layerzerolabs/lz-evm-messagelib-v2@2.3.38':
+ resolution: {integrity: sha512-92Iq//ckeI/jGzTaNK4UNdUKL4N3Mz7FBAv2/Sd8VYrQC7D1WpUOZY5TzjxQI8YTK6MaeTAERIbBX5ZUbP8/pg==}
+ 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.38
+ '@layerzerolabs/lz-evm-v1-0.7': ^2.3.38
+ '@openzeppelin/contracts': ^4.8.1 || ^5.0.0
+ '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0
+ hardhat-deploy: ^0.12.1
+ solidity-bytes-utils: ^0.8.0
+ peerDependenciesMeta:
+ '@arbitrum/nitro-contracts':
+ optional: true
+
+ '@layerzerolabs/lz-evm-protocol-v2@2.3.38':
+ resolution: {integrity: sha512-MF13xZGo9xkRRkubCrqXwAIJV5DHlB85mvDaBbi5T5TlCltIxzoSQu0b8FCH3AniEFBvqo1nc4dJ1E8KSfi0BA==}
+ peerDependencies:
+ '@openzeppelin/contracts': ^4.8.1 || ^5.0.0
+ '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0
+ hardhat-deploy: ^0.12.1
+ solidity-bytes-utils: ^0.8.0
+
+ '@layerzerolabs/lz-evm-sdk-v1@2.3.38':
+ resolution: {integrity: sha512-xihVwdSSeqg+c64V84eC1nfUWIj/qhZUifQKrgheDLImP4/tzSX9CVukdN3IBedbafGWV9bPNsq5oWZWrhK6Fg==}
+
+ '@layerzerolabs/lz-evm-sdk-v2@2.3.38':
+ resolution: {integrity: sha512-VBFmeclYvz83SGaJKwxvSYgm8jW0pBAYj99YWolhIMgyR0+xiXqwfbJlFptyOlQYVuj+SgJV8SNi6vxR6c0GZA==}
+
+ '@layerzerolabs/lz-evm-v1-0.7@2.3.38':
+ resolution: {integrity: sha512-ATMBzDvAeKlx/R2bzcL/fPXRPZCKSC3mUxEMquk0Haj8B/4tYreh6tAiuj2hGDgC7SHOj/AY3IHf6pWzL2jOYQ==}
+ 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.1
+
+ '@layerzerolabs/lz-v2-utilities@2.3.38':
+ resolution: {integrity: sha512-azpVYt930XsCybuMVY5SFSWCgcOLkU5Trnvi/4L5w0AsTpCWJ7NsxKbI3diSdKSepaHQDgQ1khv135KXarukYw==}
+
+ '@layerzerolabs/oapp-evm@0.0.3':
+ resolution: {integrity: sha512-ZTPPRWSt4YxLvEHijKqmK7CbTdG2x6le8oNhlGF9CvvAx7VLMJr/HDjhZorU8fkde1g8MdLhnhSzM9pi+GIYSA==}
+ peerDependencies:
+ '@layerzerolabs/lz-evm-messagelib-v2': ^2.3.29
+ '@layerzerolabs/lz-evm-protocol-v2': ^2.3.29
+ '@layerzerolabs/lz-evm-v1-0.7': ^2.3.29
+ '@openzeppelin/contracts': ^4.8.1 || ^5.0.0
+ '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0
+
+ '@layerzerolabs/oft-evm@0.0.10':
+ resolution: {integrity: sha512-Rjrxgg0k9Rh7PUCmYY3uOIs+xuGOkqPrE3/xgohIWpC5RcRFHdzFUsant/wP7Xij33Lae9fVGPsHHMrYWP6XuQ==}
+ peerDependencies:
+ '@layerzerolabs/lz-evm-messagelib-v2': ^2.3.29
+ '@layerzerolabs/lz-evm-protocol-v2': ^2.3.29
+ '@layerzerolabs/lz-evm-v1-0.7': ^2.3.29
+ '@layerzerolabs/oapp-evm': ^0.0.3
+ '@openzeppelin/contracts': ^4.8.1 || ^5.0.0
+ '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0
+
+ '@layerzerolabs/prettier-config-next@2.3.38':
+ resolution: {integrity: sha512-BnnD9ikHObUMLBChcHsT7CvDDs4hvi4lVABWgtbaLbORkic1BIPBnd0tbXH+qmErGJ979Z/hi0Kp3tb925lXXw==}
+
+ '@layerzerolabs/protocol-devtools-evm@1.2.0':
+ resolution: {integrity: sha512-jZDfUDuxd3dJG8Sh6RxdZo9hep8y4IqpAC5h99coZcJYFp3WsXC5KF2C1++D20JLjdHVJXHziTUSnPUQOI0rTg==}
+ 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.24
+ '@layerzerolabs/devtools-evm': ~0.4.1
+ '@layerzerolabs/io-devtools': ~0.1.12
+ '@layerzerolabs/lz-definitions': ^2.3.3
+ '@layerzerolabs/protocol-devtools': ~0.4.2
+ zod: ^3.22.4
+
+ '@layerzerolabs/protocol-devtools@0.4.2':
+ resolution: {integrity: sha512-MeavKbYFuLmHBLmw+OVp+Y4Em9axM9Aekdsw/JbAOWyCag21lyjha3ryehid6hrbnZFFKUaufbnPql+8yN3kMA==}
+ peerDependencies:
+ '@layerzerolabs/devtools': ~0.3.24
+ '@layerzerolabs/lz-definitions': ^2.3.3
+ zod: ^3.22.4
+
+ '@layerzerolabs/solhint-config@2.3.38':
+ resolution: {integrity: sha512-yV7tuD3bF9/6XLdGiw2lmf+ytcoLLbR86YcKygwaakDyK/1mKOp8ZNkrBJORoJQDYCJ+2ZgeZmgjkq/ihxdqOQ==}
+
+ '@layerzerolabs/test-devtools-evm-foundry@0.2.11':
+ resolution: {integrity: sha512-tBAzfrAVu1Hn0aPUfzXhDrP63KgTrVj2KLz+MwymD8qcEvwFLQiBWz7EVUBMuy8M0Yy1mTUvsbmcaA3mZeym2Q==}
+ peerDependencies:
+ '@layerzerolabs/lz-evm-messagelib-v2': ^2.3.3
+ '@layerzerolabs/lz-evm-protocol-v2': ^2.3.3
+ '@layerzerolabs/lz-evm-v1-0.7': ^2.3.3
+ '@layerzerolabs/oapp-evm': ^0.0.3
+ '@layerzerolabs/oft-evm': ^0.0.10
+ '@openzeppelin/contracts': ^4.9.5 || ^5.0.0
+ '@openzeppelin/contracts-upgradeable': ^4.9.5 || ^5.0.0
+
+ '@layerzerolabs/test-devtools-evm-hardhat@0.2.6':
+ resolution: {integrity: sha512-LcaKrWDoWSo2hpW4b74xSyTfg1x6M6SBdncXPfmfhpf1xG7OEYzLsl5QpqIBLfnjImyUq2x1OzjZCzyU30RY3A==}
+ peerDependencies:
+ hardhat: ^2.22.3
+ solidity-bytes-utils: ^0.8.2
+
+ '@layerzerolabs/toolbox-foundry@0.1.9':
+ resolution: {integrity: sha512-OVOT7Nt3uaX3VaqA3zqKP+ZIfsSo2X7c3jbrBb0I0ewsxNung+pYrYtCUhSoLLHQ1eOteh08C8Pq8A/Tbud/tg==}
+
+ '@layerzerolabs/toolbox-hardhat@0.3.6':
+ resolution: {integrity: sha512-Vj34Bue9Z+x3ZrwtP1uKKsZcxfnAuQHJXOec+EJAPRgyM1XGdxkfh2TY7t3yW4TEuREz1K8S0JOVElqoDdt35w==}
+ peerDependencies:
+ '@nomicfoundation/hardhat-ethers': ^3.0.2
+ ethers: ^5.7.2
+ hardhat: ^2.22.3
+ hardhat-deploy: ^0.12.1
+
+ '@layerzerolabs/ua-devtools-evm-hardhat@3.0.0':
+ resolution: {integrity: sha512-JJaCdo1Rw63rBU9o+ymuJQQiETdSgx9ocWOaW++yrzvl9NwFjsYkvNIVWL6UnBhqxSF4+sWzGFV91NPkni8nHg==}
+ 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.24
+ '@layerzerolabs/devtools-evm': ~0.4.1
+ '@layerzerolabs/devtools-evm-hardhat': ~1.1.0
+ '@layerzerolabs/io-devtools': ~0.1.12
+ '@layerzerolabs/lz-definitions': ^2.3.3
+ '@layerzerolabs/protocol-devtools': ~0.4.2
+ '@layerzerolabs/protocol-devtools-evm': ~1.2.0
+ '@layerzerolabs/ua-devtools': ~1.0.3
+ '@layerzerolabs/ua-devtools-evm': ~3.0.0
+ ethers: ^5.7.2
+ hardhat: ^2.22.3
+ hardhat-deploy: ^0.12.1
+
+ '@layerzerolabs/ua-devtools-evm@3.0.0':
+ resolution: {integrity: sha512-NZUX9l7mUyfLYRpfFAHETnoiheCH+MvQUMn78v4dg0QQ/UtdkbLu4rcOHP6F+AuIenKb989Oe1+38gTfIrggfA==}
+ peerDependencies:
+ '@ethersproject/constants': ^5.7.0
+ '@ethersproject/contracts': ^5.7.0
+ '@layerzerolabs/devtools': ~0.3.24
+ '@layerzerolabs/devtools-evm': ~0.4.1
+ '@layerzerolabs/io-devtools': ~0.1.12
+ '@layerzerolabs/lz-definitions': ^2.3.3
+ '@layerzerolabs/lz-v2-utilities': ^2.3.3
+ '@layerzerolabs/protocol-devtools': ~0.4.2
+ '@layerzerolabs/protocol-devtools-evm': ~1.2.0
+ '@layerzerolabs/ua-devtools': ~1.0.3
+ zod: ^3.22.4
+
+ '@layerzerolabs/ua-devtools@1.0.4':
+ resolution: {integrity: sha512-bp0T5iqpdtIQzQg1e8Z1UBZAx6n8JW6W4qq3+i57ZOgbqaoLsK7+r191yTQQdqtfKmERHPUj8QDfbjhzoDT3+A==}
+ peerDependencies:
+ '@layerzerolabs/devtools': ~0.3.24
+ '@layerzerolabs/io-devtools': ~0.1.12
+ '@layerzerolabs/lz-definitions': ^2.3.3
+ '@layerzerolabs/lz-v2-utilities': ^2.3.3
+ '@layerzerolabs/protocol-devtools': ~0.4.2
+ zod: ^3.22.4
+
+ '@mdn/browser-compat-data@5.5.49':
+ resolution: {integrity: sha512-FNYbYIA8WEff/+A8iMGstZhArpgy5ZxZ9uQRsBQ+qXsiKTYn3WjxpCmJRw3CFUOqFlQSZDkC3v1y3BijRnE1Pg==}
+
+ '@metamask/eth-sig-util@4.0.1':
+ resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==}
+ engines: {node: '>=12.0.0'}
+
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
+ '@noble/hashes@1.2.0':
+ resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@noble/secp256k1@1.7.1':
+ resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@nolyfill/is-core-module@1.0.39':
+ resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
+ engines: {node: '>=12.4.0'}
+
+ '@nomicfoundation/edr-darwin-arm64@0.5.2':
+ resolution: {integrity: sha512-Gm4wOPKhbDjGTIRyFA2QUAPfCXA1AHxYOKt3yLSGJkQkdy9a5WW+qtqKeEKHc/+4wpJSLtsGQfpzyIzggFfo/A==}
+ engines: {node: '>= 18'}
+
+ '@nomicfoundation/edr-darwin-x64@0.5.2':
+ resolution: {integrity: sha512-ClyABq2dFCsrYEED3/UIO0c7p4H1/4vvlswFlqUyBpOkJccr75qIYvahOSJRM62WgUFRhbSS0OJXFRwc/PwmVg==}
+ engines: {node: '>= 18'}
+
+ '@nomicfoundation/edr-linux-arm64-gnu@0.5.2':
+ resolution: {integrity: sha512-HWMTVk1iOabfvU2RvrKLDgtFjJZTC42CpHiw2h6rfpsgRqMahvIlx2jdjWYzFNy1jZKPTN1AStQ/91MRrg5KnA==}
+ engines: {node: '>= 18'}
+
+ '@nomicfoundation/edr-linux-arm64-musl@0.5.2':
+ resolution: {integrity: sha512-CwsQ10xFx/QAD5y3/g5alm9+jFVuhc7uYMhrZAu9UVF+KtVjeCvafj0PaVsZ8qyijjqVuVsJ8hD1x5ob7SMcGg==}
+ engines: {node: '>= 18'}
+
+ '@nomicfoundation/edr-linux-x64-gnu@0.5.2':
+ resolution: {integrity: sha512-CWVCEdhWJ3fmUpzWHCRnC0/VLBDbqtqTGTR6yyY1Ep3S3BOrHEAvt7h5gx85r2vLcztisu2vlDq51auie4IU1A==}
+ engines: {node: '>= 18'}
+
+ '@nomicfoundation/edr-linux-x64-musl@0.5.2':
+ resolution: {integrity: sha512-+aJDfwhkddy2pP5u1ISg3IZVAm0dO836tRlDTFWtvvSMQ5hRGqPcWwlsbobhDQsIxhPJyT7phL0orCg5W3WMeA==}
+ engines: {node: '>= 18'}
+
+ '@nomicfoundation/edr-win32-x64-msvc@0.5.2':
+ resolution: {integrity: sha512-CcvvuA3sAv7liFNPsIR/68YlH6rrybKzYttLlMr80d4GKJjwJ5OKb3YgE6FdZZnOfP19HEHhsLcE0DPLtY3r0w==}
+ engines: {node: '>= 18'}
+
+ '@nomicfoundation/edr@0.5.2':
+ resolution: {integrity: sha512-hW/iLvUQZNTVjFyX/I40rtKvvDOqUEyIi96T28YaLfmPL+3LW2lxmYLUXEJ6MI14HzqxDqrLyhf6IbjAa2r3Dw==}
+ engines: {node: '>= 18'}
+
+ '@nomicfoundation/ethereumjs-common@4.0.4':
+ resolution: {integrity: sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==}
+
+ '@nomicfoundation/ethereumjs-rlp@5.0.4':
+ resolution: {integrity: sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ '@nomicfoundation/ethereumjs-tx@5.0.4':
+ resolution: {integrity: sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ c-kzg: ^2.1.2
+ peerDependenciesMeta:
+ c-kzg:
+ optional: true
+
+ '@nomicfoundation/ethereumjs-util@9.0.4':
+ resolution: {integrity: sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ c-kzg: ^2.1.2
+ peerDependenciesMeta:
+ c-kzg:
+ optional: true
+
+ '@nomicfoundation/hardhat-ethers@3.0.7':
+ resolution: {integrity: sha512-pxLWpDiqC208shoz/lMbVFbxcVxE+qIs8qDrwdcubWH99UO1p6uwXakMa36ICRfB/IEToSLDJGSsKhwY84feCQ==}
+ peerDependencies:
+ ethers: ^5.7.2
+ hardhat: ^2.22.92.0.0
+
+ '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2':
+ resolution: {integrity: sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==}
+ engines: {node: '>= 12'}
+
+ '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2':
+ resolution: {integrity: sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==}
+ engines: {node: '>= 12'}
+
+ '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2':
+ resolution: {integrity: sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==}
+ engines: {node: '>= 12'}
+
+ '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2':
+ resolution: {integrity: sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==}
+ engines: {node: '>= 12'}
+
+ '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2':
+ resolution: {integrity: sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==}
+ engines: {node: '>= 12'}
+
+ '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2':
+ resolution: {integrity: sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==}
+ engines: {node: '>= 12'}
+
+ '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2':
+ resolution: {integrity: sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==}
+ engines: {node: '>= 12'}
+
+ '@nomicfoundation/solidity-analyzer@0.1.2':
+ resolution: {integrity: sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==}
+ engines: {node: '>= 12'}
+
+ '@nomiclabs/hardhat-ethers@2.2.3':
+ resolution: {integrity: sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==}
+ peerDependencies:
+ ethers: ^5.7.2
+ hardhat: ^2.0.0
+
+ '@openzeppelin/contracts-upgradeable@4.7.3':
+ resolution: {integrity: sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==}
+
+ '@openzeppelin/contracts-upgradeable@5.0.2':
+ resolution: {integrity: sha512-0MmkHSHiW2NRFiT9/r5Lu4eJq5UJ4/tzlOgYXNAIj/ONkQTVnz22pLxDvp4C4uZ9he7ZFvGn3Driptn1/iU7tQ==}
+ peerDependencies:
+ '@openzeppelin/contracts': 5.0.2
+
+ '@openzeppelin/contracts@3.4.2':
+ resolution: {integrity: sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==}
+
+ '@openzeppelin/contracts@4.3.3':
+ resolution: {integrity: sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g==}
+
+ '@openzeppelin/contracts@5.0.2':
+ resolution: {integrity: sha512-ytPc6eLGcHHnapAZ9S+5qsdomhjo6QBHTDRRBFfTxXIpsicMhVPouPgmUPebZZZGX7vt9USA+Z+0M0dSVtSUEA==}
+
+ '@pkgr/core@0.1.1':
+ resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+
+ '@pnpm/config.env-replace@1.1.0':
+ resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==}
+ engines: {node: '>=12.22.0'}
+
+ '@pnpm/network.ca-file@1.0.2':
+ resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==}
+ engines: {node: '>=12.22.0'}
+
+ '@pnpm/npm-conf@2.3.1':
+ resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==}
+ engines: {node: '>=12'}
+
+ '@rushstack/eslint-patch@1.10.4':
+ resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==}
+
+ '@safe-global/api-kit@1.3.1':
+ resolution: {integrity: sha512-JKvCNs8p+42+N8pV2MIqoXlBLckTe5CKboVT7t9mTluuA66i5W8+Kr+B5j9D//EIU5vO7iSOOIYnJuA2ck4XRQ==}
+
+ '@safe-global/protocol-kit@1.3.0':
+ resolution: {integrity: sha512-zBhwHpaUggywmnR1Xm5RV22DpyjmVWYP3pnOl4rcf9LAc1k7IVmw6WIt2YVhHRaWGxVYMd4RitJX8Dx2+8eLZQ==}
+
+ '@safe-global/safe-core-sdk-types@2.3.0':
+ resolution: {integrity: sha512-dU0KkDV1KJNf11ajbUjWiSi4ygdyWfhk1M50lTJWUdCn1/2Bsb/hICM8LoEk6DCoFumxaoCet02SmYakXsW2CA==}
+
+ '@safe-global/safe-deployments@1.37.3':
+ resolution: {integrity: sha512-EtbiOJVGe697+GcbHtfo75NYpp+hTlIIBqL2ETPLGoQBHoxo9HWbGX/6ZkVxsZv/NN4nKawyMi+MvpUkH9VXGg==}
+
+ '@scure/base@1.1.7':
+ resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==}
+
+ '@scure/bip32@1.1.5':
+ resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==}
+
+ '@scure/bip32@1.4.0':
+ resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==}
+
+ '@scure/bip39@1.1.1':
+ resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==}
+
+ '@scure/bip39@1.3.0':
+ resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==}
+
+ '@sentry/core@5.30.0':
+ resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==}
+ engines: {node: '>=6'}
+
+ '@sentry/hub@5.30.0':
+ resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==}
+ engines: {node: '>=6'}
+
+ '@sentry/minimal@5.30.0':
+ resolution: {integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==}
+ engines: {node: '>=6'}
+
+ '@sentry/node@5.30.0':
+ resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==}
+ engines: {node: '>=6'}
+
+ '@sentry/tracing@5.30.0':
+ resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==}
+ engines: {node: '>=6'}
+
+ '@sentry/types@5.30.0':
+ resolution: {integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==}
+ engines: {node: '>=6'}
+
+ '@sentry/utils@5.30.0':
+ resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==}
+ engines: {node: '>=6'}
+
+ '@sindresorhus/is@4.6.0':
+ resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
+ engines: {node: '>=10'}
+
+ '@sindresorhus/is@5.6.0':
+ resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==}
+ engines: {node: '>=14.16'}
+
+ '@solidity-parser/parser@0.18.0':
+ resolution: {integrity: sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==}
+
+ '@szmarczak/http-timer@4.0.6':
+ resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
+ engines: {node: '>=10'}
+
+ '@szmarczak/http-timer@5.0.1':
+ resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
+ engines: {node: '>=14.16'}
+
+ '@tsconfig/node10@1.0.11':
+ resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
+
+ '@tsconfig/node12@1.0.11':
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+
+ '@tsconfig/node14@1.0.3':
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+
+ '@tsconfig/node16@1.0.4':
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+
+ '@types/bn.js@4.11.6':
+ resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/cacheable-request@6.0.3':
+ resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
+
+ '@types/chai@4.3.18':
+ resolution: {integrity: sha512-2UfJzigyNa8kYTKn7o4hNMPphkxtu4WTJyobK3m4FBpyj7EK5xgtPcOtxLm7Dznk/Qxr0QXn+gQbkg7mCZKdfg==}
+
+ '@types/http-cache-semantics@4.0.4':
+ resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/keyv@3.1.4':
+ resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
+
+ '@types/lru-cache@5.1.1':
+ resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==}
+
+ '@types/mocha@10.0.7':
+ resolution: {integrity: sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@18.18.14':
+ resolution: {integrity: sha512-iSOeNeXYNYNLLOMDSVPvIFojclvMZ/HDY2dU17kUlcsOsSQETbWIslJbYLZgA+ox8g2XQwSHKTkght1a5X26lQ==}
+
+ '@types/pbkdf2@3.1.2':
+ resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==}
+
+ '@types/qs@6.9.15':
+ resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==}
+
+ '@types/responselike@1.0.3':
+ resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
+
+ '@types/secp256k1@4.0.6':
+ resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==}
+
+ '@types/semver@7.5.8':
+ resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
+
+ '@types/tinycolor2@1.4.6':
+ resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==}
+
+ '@types/triple-beam@1.3.5':
+ resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==}
+
+ '@types/yoga-layout@1.9.2':
+ resolution: {integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==}
+
+ '@typescript-eslint/eslint-plugin@7.18.0':
+ resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^7.0.0
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/parser@7.18.0':
+ resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/scope-manager@5.62.0':
+ resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@typescript-eslint/scope-manager@7.18.0':
+ resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+
+ '@typescript-eslint/type-utils@7.18.0':
+ resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/types@5.62.0':
+ resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@typescript-eslint/types@7.18.0':
+ resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+
+ '@typescript-eslint/typescript-estree@5.62.0':
+ resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/typescript-estree@7.18.0':
+ resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/utils@5.62.0':
+ resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ '@typescript-eslint/utils@7.18.0':
+ resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+
+ '@typescript-eslint/visitor-keys@5.62.0':
+ resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@typescript-eslint/visitor-keys@7.18.0':
+ resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+
+ '@ungap/structured-clone@1.2.0':
+ resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+
+ abortcontroller-polyfill@1.7.5:
+ resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==}
+
+ accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn-walk@8.3.3:
+ resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==}
+ engines: {node: '>=0.4.0'}
+
+ acorn@8.12.1:
+ resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ adm-zip@0.4.16:
+ resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==}
+ engines: {node: '>=0.3.0'}
+
+ aes-js@3.0.0:
+ resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==}
+
+ agent-base@6.0.2:
+ resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
+ engines: {node: '>= 6.0.0'}
+
+ aggregate-error@3.1.0:
+ resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
+ engines: {node: '>=8'}
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ ajv@8.17.1:
+ resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+
+ ansi-align@3.0.1:
+ resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ antlr4@4.13.2:
+ resolution: {integrity: sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==}
+ engines: {node: '>=16'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ array-buffer-byte-length@1.0.1:
+ resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
+ engines: {node: '>= 0.4'}
+
+ array-flatten@1.1.1:
+ resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+
+ array-includes@3.1.8:
+ resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
+ engines: {node: '>= 0.4'}
+
+ array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+
+ array.prototype.findlastindex@1.2.5:
+ resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.flat@1.3.2:
+ resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.flatmap@1.3.2:
+ resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
+ engines: {node: '>= 0.4'}
+
+ arraybuffer.prototype.slice@1.0.3:
+ resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==}
+ engines: {node: '>= 0.4'}
+
+ asn1@0.2.6:
+ resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
+
+ assert-plus@1.0.0:
+ resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
+ engines: {node: '>=0.8'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ ast-metadata-inferer@0.8.0:
+ resolution: {integrity: sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==}
+
+ ast-parents@0.0.1:
+ resolution: {integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==}
+
+ astral-regex@2.0.0:
+ resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
+ engines: {node: '>=8'}
+
+ async-limiter@1.0.1:
+ resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==}
+
+ async@3.2.6:
+ resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ auto-bind@4.0.0:
+ resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==}
+ engines: {node: '>=8'}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ aws-sign2@0.7.0:
+ resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==}
+
+ aws4@1.13.1:
+ resolution: {integrity: sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA==}
+
+ axios@0.21.4:
+ resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base-x@4.0.0:
+ resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==}
+
+ base-x@5.0.0:
+ resolution: {integrity: sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bcrypt-pbkdf@1.0.2:
+ resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
+
+ bech32@1.1.4:
+ resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ blakejs@1.2.1:
+ resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==}
+
+ bluebird@3.7.2:
+ resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
+
+ bn.js@4.11.6:
+ resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==}
+
+ bn.js@4.12.0:
+ resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ body-parser@1.20.2:
+ resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ boxen@5.1.2:
+ resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==}
+ engines: {node: '>=10'}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ brorand@1.1.0:
+ resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ browserify-aes@1.2.0:
+ resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==}
+
+ browserslist@4.23.3:
+ resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ bs58@5.0.0:
+ resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==}
+
+ bs58@6.0.0:
+ resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==}
+
+ bs58check@2.1.2:
+ resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-to-arraybuffer@0.0.5:
+ resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==}
+
+ buffer-xor@1.0.3:
+ resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==}
+
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ bufio@1.2.1:
+ resolution: {integrity: sha512-9oR3zNdupcg/Ge2sSHQF3GX+kmvL/fTPvD0nd5AGLq8SjUYnTz+SlFjK/GXidndbZtIj+pVKXiWeR9w6e9wKCA==}
+ engines: {node: '>=14.0.0'}
+
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
+ cacheable-lookup@5.0.4:
+ resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
+ engines: {node: '>=10.6.0'}
+
+ cacheable-lookup@6.1.0:
+ resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==}
+ engines: {node: '>=10.6.0'}
+
+ cacheable-lookup@7.0.0:
+ resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
+ engines: {node: '>=14.16'}
+
+ cacheable-request@10.2.14:
+ resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==}
+ engines: {node: '>=14.16'}
+
+ cacheable-request@7.0.4:
+ resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==}
+ engines: {node: '>=8'}
+
+ call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ caniuse-lite@1.0.30001653:
+ resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==}
+
+ caseless@0.12.0:
+ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ chownr@1.1.4:
+ resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+
+ ci-info@2.0.0:
+ resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
+
+ cids@0.7.5:
+ resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==}
+ engines: {node: '>=4.0.0', npm: '>=3.0.0'}
+ deprecated: This module has been superseded by the multiformats module
+
+ cipher-base@1.0.4:
+ resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==}
+
+ class-is@1.1.0:
+ resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==}
+
+ clean-stack@2.2.0:
+ resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
+ engines: {node: '>=6'}
+
+ cli-boxes@2.2.1:
+ resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
+ engines: {node: '>=6'}
+
+ cli-cursor@3.1.0:
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
+
+ cli-table3@0.6.5:
+ resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==}
+ engines: {node: 10.* || >= 12.*}
+
+ cli-truncate@2.1.0:
+ resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
+ engines: {node: '>=8'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ clone-response@1.0.3:
+ resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
+
+ code-excerpt@3.0.0:
+ resolution: {integrity: sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==}
+ engines: {node: '>=10'}
+
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ color-string@1.9.1:
+ resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+
+ color@3.2.1:
+ resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
+
+ colorspace@1.1.4:
+ resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ command-exists@1.2.9:
+ resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==}
+
+ commander@10.0.1:
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
+ engines: {node: '>=14'}
+
+ commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ config-chain@1.1.13:
+ resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
+
+ content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+
+ content-hash@2.5.2:
+ resolution: {integrity: sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==}
+
+ content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ convert-to-spaces@1.0.2:
+ resolution: {integrity: sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==}
+ engines: {node: '>= 4'}
+
+ cookie-signature@1.0.6:
+ resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+
+ cookie@0.4.2:
+ resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
+ engines: {node: '>= 0.6'}
+
+ cookie@0.6.0:
+ resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
+ engines: {node: '>= 0.6'}
+
+ core-util-is@1.0.2:
+ resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
+
+ cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+
+ cosmiconfig@8.3.6:
+ resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ crc-32@1.2.2:
+ resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+
+ create-hash@1.2.0:
+ resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
+
+ create-hmac@1.1.7:
+ resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
+
+ create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+
+ cross-fetch@4.0.0:
+ resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==}
+
+ cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+
+ d@1.0.2:
+ resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==}
+ engines: {node: '>=0.12'}
+
+ dashdash@1.14.1:
+ resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==}
+ engines: {node: '>=0.10'}
+
+ data-view-buffer@1.0.1:
+ resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-length@1.0.1:
+ resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-offset@1.0.0:
+ resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==}
+ engines: {node: '>= 0.4'}
+
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@3.2.7:
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.6:
+ resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ decode-uri-component@0.2.2:
+ resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
+ engines: {node: '>=0.10'}
+
+ decompress-response@3.3.0:
+ resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==}
+ engines: {node: '>=4'}
+
+ decompress-response@6.0.0:
+ resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ deep-extend@0.6.0:
+ resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+ engines: {node: '>=4.0.0'}
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ defer-to-connect@2.0.1:
+ resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
+ engines: {node: '>=10'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ detect-indent@7.0.1:
+ resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==}
+ engines: {node: '>=12.20'}
+
+ detect-newline@4.0.1:
+ resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+
+ doctrine@2.1.0:
+ resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
+ engines: {node: '>=0.10.0'}
+
+ doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+
+ dom-walk@0.1.2:
+ resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==}
+
+ dotenv@16.4.5:
+ resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
+ engines: {node: '>=12'}
+
+ ds-test@https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0:
+ resolution: {tarball: https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0}
+ version: 1.0.0
+
+ ecc-jsbn@0.1.2:
+ resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==}
+
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ electron-to-chromium@1.5.13:
+ resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==}
+
+ elliptic@6.5.4:
+ resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==}
+
+ elliptic@6.5.7:
+ resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ enabled@2.0.0:
+ resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==}
+
+ encode-utf8@1.0.3:
+ resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==}
+
+ encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ end-of-stream@1.4.4:
+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+
+ enhanced-resolve@5.17.1:
+ resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
+ engines: {node: '>=10.13.0'}
+
+ enquirer@2.4.1:
+ resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
+ engines: {node: '>=8.6'}
+
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+
+ error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+
+ es-abstract@1.23.3:
+ resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==}
+ engines: {node: '>= 0.4'}
+
+ es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-object-atoms@1.0.0:
+ resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.0.3:
+ resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==}
+ engines: {node: '>= 0.4'}
+
+ es-shim-unscopables@1.0.2:
+ resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
+
+ es-to-primitive@1.2.1:
+ resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
+ engines: {node: '>= 0.4'}
+
+ es5-ext@0.10.64:
+ resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==}
+ engines: {node: '>=0.10'}
+
+ es6-iterator@2.0.3:
+ resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-symbol@3.1.4:
+ resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==}
+ engines: {node: '>=0.12'}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ escape-string-regexp@2.0.0:
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eslint-config-prettier@9.1.0:
+ resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+
+ eslint-import-resolver-node@0.3.9:
+ resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+
+ eslint-import-resolver-typescript@3.6.3:
+ resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '*'
+ eslint-plugin-import: '*'
+ eslint-plugin-import-x: '*'
+ peerDependenciesMeta:
+ eslint-plugin-import:
+ optional: true
+ eslint-plugin-import-x:
+ optional: true
+
+ eslint-module-utils@2.8.2:
+ resolution: {integrity: sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: '*'
+ eslint-import-resolver-node: '*'
+ eslint-import-resolver-typescript: '*'
+ eslint-import-resolver-webpack: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ eslint:
+ optional: true
+ eslint-import-resolver-node:
+ optional: true
+ eslint-import-resolver-typescript:
+ optional: true
+ eslint-import-resolver-webpack:
+ optional: true
+
+ eslint-plugin-autofix@2.1.0:
+ resolution: {integrity: sha512-4ya5flaJ7P+s4WeCe7mVd5Mmv0ayghl9Xz1MDewQqDNXn3SFkvTMqbCuJT5fsTl+BdtJ/CFNV48YrABohQu1VQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ eslint: '>=8'
+
+ eslint-plugin-compat@4.2.0:
+ resolution: {integrity: sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==}
+ engines: {node: '>=14.x'}
+ peerDependencies:
+ eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ eslint-plugin-import@2.29.1:
+ resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+
+ eslint-plugin-jest-extended@2.0.3:
+ resolution: {integrity: sha512-gPhanMUyClZHj4UqvtavRA2s7FqaMdNZQvKLz12gwkxikIKEwr4FgrnFne7/obd0bEIdpHgc0b2zwLK7BGWurw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+
+ eslint-plugin-prettier@5.2.1:
+ resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ 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
+
+ eslint-plugin-unused-imports@3.2.0:
+ resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==}
+ 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
+
+ eslint-rule-composer@0.3.0:
+ resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==}
+ engines: {node: '>=4.0.0'}
+
+ eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+
+ eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint@8.57.0:
+ resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+
+ esniff@2.0.1:
+ resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==}
+ engines: {node: '>=0.10'}
+
+ espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ eth-ens-namehash@2.0.8:
+ resolution: {integrity: sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==}
+
+ eth-lib@0.1.29:
+ resolution: {integrity: sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==}
+
+ eth-lib@0.2.8:
+ resolution: {integrity: sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==}
+
+ ethereum-bloom-filters@1.2.0:
+ resolution: {integrity: sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==}
+
+ ethereum-cryptography@0.1.3:
+ resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==}
+
+ ethereum-cryptography@1.2.0:
+ resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==}
+
+ ethereum-cryptography@2.2.1:
+ resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==}
+
+ ethereumjs-abi@0.6.8:
+ resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==}
+
+ ethereumjs-util@6.2.1:
+ resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==}
+
+ ethereumjs-util@7.1.5:
+ resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==}
+ engines: {node: '>=10.0.0'}
+
+ ethers@5.7.2:
+ resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==}
+
+ ethjs-unit@0.1.6:
+ resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ ethjs-util@0.1.6:
+ resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ event-emitter@0.3.5:
+ resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==}
+
+ eventemitter3@4.0.4:
+ resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==}
+
+ evp_bytestokey@1.0.3:
+ resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
+
+ exponential-backoff@3.1.1:
+ resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
+
+ express@4.19.2:
+ resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==}
+ engines: {node: '>= 0.10.0'}
+
+ ext@1.7.0:
+ resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
+
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
+ extsprintf@1.3.0:
+ resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
+ engines: {'0': node >=0.6.0}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-diff@1.3.0:
+ resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
+
+ fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fast-uri@3.0.1:
+ resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==}
+
+ fastq@1.17.1:
+ resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+
+ fecha@4.2.3:
+ resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==}
+
+ file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ finalhandler@1.2.0:
+ resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
+ engines: {node: '>= 0.8'}
+
+ find-up@2.1.0:
+ resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==}
+ engines: {node: '>=4'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat-cache@3.2.0:
+ resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+
+ fmix@0.1.0:
+ resolution: {integrity: sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==}
+
+ fn.name@1.1.0:
+ resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==}
+
+ follow-redirects@1.15.6:
+ resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+
+ forever-agent@0.6.1:
+ resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
+
+ forge-std@1.1.2:
+ resolution: {integrity: sha512-Wfb0iAS9PcfjMKtGpWQw9mXzJxrWD62kJCUqqLcyuI0+VRtJ3j20XembjF3kS20qELYdXft1vD/SPFVWVKMFOw==}
+
+ form-data-encoder@1.7.1:
+ resolution: {integrity: sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==}
+
+ form-data-encoder@2.1.4:
+ resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
+ engines: {node: '>= 14.17'}
+
+ form-data@2.3.3:
+ resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==}
+ engines: {node: '>= 0.12'}
+
+ form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+
+ forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+
+ fp-ts@1.19.3:
+ resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==}
+
+ fp-ts@2.16.9:
+ resolution: {integrity: sha512-+I2+FnVB+tVaxcYyQkHUq7ZdKScaBlX53A41mxQtpIccsfyv8PzdzP7fzp2AY832T4aoK6UZ5WRX/ebGd8uZuQ==}
+
+ fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
+ fs-extra@10.1.0:
+ resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
+ engines: {node: '>=12'}
+
+ fs-extra@4.0.3:
+ resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==}
+
+ fs-extra@7.0.1:
+ resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
+ engines: {node: '>=6 <7 || >=8'}
+
+ fs-minipass@1.2.7:
+ resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ function.prototype.name@1.1.6:
+ resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
+ engines: {node: '>= 0.4'}
+
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+
+ get-stdin@9.0.0:
+ resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==}
+ engines: {node: '>=12'}
+
+ get-stream@5.2.0:
+ resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
+ engines: {node: '>=8'}
+
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ get-symbol-description@1.0.2:
+ resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
+ engines: {node: '>= 0.4'}
+
+ get-tsconfig@4.7.6:
+ resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==}
+
+ getpass@0.1.7:
+ resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
+
+ git-hooks-list@3.1.0:
+ resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ global@4.4.0:
+ resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==}
+
+ globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+
+ globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+ engines: {node: '>=8'}
+
+ globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
+
+ globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+
+ globby@13.2.2:
+ resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+
+ got@11.8.6:
+ resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==}
+ engines: {node: '>=10.19.0'}
+
+ got@12.1.0:
+ resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==}
+ engines: {node: '>=14.16'}
+
+ got@12.6.1:
+ resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==}
+ engines: {node: '>=14.16'}
+
+ graceful-fs@4.2.10:
+ resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ gradient-string@1.2.0:
+ resolution: {integrity: sha512-Lxog7IDMMWNjwo4O0KbdBvSewk4vW6kQe5XaLuuPCyCE65AGQ1P8YqKJa5dq8TYf/Ge31F+KjWzPR5mAJvjlAg==}
+ engines: {node: '>=4'}
+
+ graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+
+ har-schema@2.0.0:
+ resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==}
+ engines: {node: '>=4'}
+
+ har-validator@5.1.5:
+ resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==}
+ engines: {node: '>=6'}
+ deprecated: this library is no longer supported
+
+ hardhat-contract-sizer@2.10.0:
+ resolution: {integrity: sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==}
+ peerDependencies:
+ hardhat: ^2.0.0
+
+ hardhat-deploy@0.12.4:
+ resolution: {integrity: sha512-bYO8DIyeGxZWlhnMoCBon9HNZb6ji0jQn7ngP1t5UmGhC8rQYhji7B73qETMOFhzt5ECZPr+U52duj3nubsqdQ==}
+
+ hardhat@2.22.9:
+ resolution: {integrity: sha512-sWiuI/yRdFUPfndIvL+2H18Vs2Gav0XacCFYY5msT5dHOWkhLxESJySIk9j83mXL31aXL8+UMA9OgViFLexklg==}
+ hasBin: true
+ peerDependencies:
+ ts-node: '*'
+ typescript: '*'
+ peerDependenciesMeta:
+ ts-node:
+ optional: true
+ typescript:
+ optional: true
+
+ has-bigints@1.0.2:
+ resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+
+ has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hash-base@3.1.0:
+ resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==}
+ engines: {node: '>=4'}
+
+ hash.js@1.1.7:
+ resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ hmac-drbg@1.0.1:
+ resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
+
+ http-cache-semantics@4.1.1:
+ resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
+
+ http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+
+ http-https@1.0.0:
+ resolution: {integrity: sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==}
+
+ http-signature@1.2.0:
+ resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==}
+ engines: {node: '>=0.8', npm: '>=1.3.7'}
+
+ http2-wrapper@1.0.3:
+ resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==}
+ engines: {node: '>=10.19.0'}
+
+ http2-wrapper@2.2.1:
+ resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==}
+ engines: {node: '>=10.19.0'}
+
+ https-proxy-agent@5.0.1:
+ resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
+ engines: {node: '>= 6'}
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
+ idna-uts46-hx@2.3.1:
+ resolution: {integrity: sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==}
+ engines: {node: '>=4.0.0'}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ immutable@4.3.7:
+ resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==}
+
+ import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+
+ imul@1.0.1:
+ resolution: {integrity: sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==}
+ engines: {node: '>=0.10.0'}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ indent-string@4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
+ ink-gradient@2.0.0:
+ resolution: {integrity: sha512-d2BK/EzzBRoDL54NWkS3JGE4J8xtzwRVWxDAIkQ/eQ60XIzrFMtT5JlUqgV05Qlt32Jvk50qW51YqxGJggTuqA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ ink: '>=3.0.0'
+ react: '>=16.8.0'
+
+ ink-table@3.1.0:
+ resolution: {integrity: sha512-qxVb4DIaEaJryvF9uZGydnmP9Hkmas3DCKVpEcBYC0E4eJd3qNgNe+PZKuzgCERFe9LfAS1TNWxCr9+AU4v3YA==}
+ peerDependencies:
+ ink: '>=3.0.0'
+ react: '>=16.8.0'
+
+ ink@3.2.0:
+ resolution: {integrity: sha512-firNp1q3xxTzoItj/eOOSZQnYSlyrWks5llCTVX37nJ59K3eXbQ8PtzCguqo8YI19EELo5QxaKnJd4VxzhU8tg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '>=16.8.0'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ internal-slot@1.0.7:
+ resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
+ engines: {node: '>= 0.4'}
+
+ io-ts@1.10.4:
+ resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==}
+
+ ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+
+ is-arguments@1.1.1:
+ resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
+ engines: {node: '>= 0.4'}
+
+ is-array-buffer@3.0.4:
+ resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==}
+ engines: {node: '>= 0.4'}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ is-arrayish@0.3.2:
+ resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
+
+ is-bigint@1.0.4:
+ resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-boolean-object@1.1.2:
+ resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
+ engines: {node: '>= 0.4'}
+
+ is-bun-module@1.1.0:
+ resolution: {integrity: sha512-4mTAVPlrXpaN3jtF0lsnPCMGnq4+qZjVIKq0HCpfcqf8OC1SM5oATCIAPM5V5FN05qp2NNnFndphmdZS9CV3hA==}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-ci@2.0.0:
+ resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==}
+ hasBin: true
+
+ is-core-module@2.15.1:
+ resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
+ engines: {node: '>= 0.4'}
+
+ is-data-view@1.0.1:
+ resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==}
+ engines: {node: '>= 0.4'}
+
+ is-date-object@1.0.5:
+ resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-function@1.0.2:
+ resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==}
+
+ is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-hex-prefixed@1.0.0:
+ resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+ engines: {node: '>= 0.4'}
+
+ is-number-object@1.0.7:
+ resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-path-inside@3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+ engines: {node: '>=8'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+
+ is-regex@1.1.4:
+ resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
+ engines: {node: '>= 0.4'}
+
+ is-shared-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==}
+ engines: {node: '>= 0.4'}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ is-string@1.0.7:
+ resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
+ engines: {node: '>= 0.4'}
+
+ is-symbol@1.0.4:
+ resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
+ engines: {node: '>= 0.4'}
+
+ is-typed-array@1.1.13:
+ resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
+ engines: {node: '>= 0.4'}
+
+ is-typedarray@1.0.0:
+ resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ is-weakref@1.0.2:
+ resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+
+ isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isstream@0.1.2:
+ resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
+
+ js-sha3@0.5.7:
+ resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==}
+
+ js-sha3@0.8.0:
+ resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ jsbn@0.1.1:
+ resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
+
+ jsesc@2.5.2:
+ resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
+ json-schema@0.4.0:
+ resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonfile@4.0.0:
+ resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+
+ jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+
+ jsprim@1.4.2:
+ resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==}
+ engines: {node: '>=0.6.0'}
+
+ keccak@3.0.4:
+ resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==}
+ engines: {node: '>=10.0.0'}
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ kleur@3.0.3:
+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+ engines: {node: '>=6'}
+
+ kuler@2.0.0:
+ resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==}
+
+ latest-version@7.0.0:
+ resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==}
+ engines: {node: '>=14.16'}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ locate-path@2.0.0:
+ resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
+ engines: {node: '>=4'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash.isequal@4.5.0:
+ resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+
+ lodash.memoize@4.1.2:
+ resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash.truncate@4.4.2:
+ resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ logform@2.6.1:
+ resolution: {integrity: sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==}
+ engines: {node: '>= 12.0.0'}
+
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ lowercase-keys@2.0.0:
+ resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
+ engines: {node: '>=8'}
+
+ lowercase-keys@3.0.0:
+ resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lru_map@0.3.3:
+ resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ map-age-cleaner@0.1.3:
+ resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==}
+ engines: {node: '>=6'}
+
+ match-all@1.2.6:
+ resolution: {integrity: sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==}
+
+ md5.js@1.3.5:
+ resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
+
+ media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+
+ memorystream@0.3.1:
+ resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
+ engines: {node: '>= 0.10.0'}
+
+ merge-descriptors@1.0.1:
+ resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ methods@1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+
+ micro-ftch@0.3.1:
+ resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==}
+
+ micro-memoize@4.1.2:
+ resolution: {integrity: sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ mimic-fn@3.1.0:
+ resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==}
+ engines: {node: '>=8'}
+
+ mimic-response@1.0.1:
+ resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
+ engines: {node: '>=4'}
+
+ mimic-response@3.1.0:
+ resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
+ engines: {node: '>=10'}
+
+ mimic-response@4.0.0:
+ resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ min-document@2.19.0:
+ resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==}
+
+ minimalistic-assert@1.0.1:
+ resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
+
+ minimalistic-crypto-utils@1.0.1:
+ resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@2.9.0:
+ resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==}
+
+ minizlib@1.3.3:
+ resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==}
+
+ mkdirp-promise@5.0.1:
+ resolution: {integrity: sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==}
+ engines: {node: '>=4'}
+ deprecated: This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mkdirp@3.0.1:
+ resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ mnemonist@0.38.5:
+ resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==}
+
+ mocha@10.7.3:
+ resolution: {integrity: sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==}
+ engines: {node: '>= 14.0.0'}
+ hasBin: true
+
+ mock-fs@4.14.0:
+ resolution: {integrity: sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==}
+
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ multibase@0.6.1:
+ resolution: {integrity: sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==}
+ deprecated: This module has been superseded by the multiformats module
+
+ multibase@0.7.0:
+ resolution: {integrity: sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==}
+ deprecated: This module has been superseded by the multiformats module
+
+ multicodec@0.5.7:
+ resolution: {integrity: sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==}
+ deprecated: This module has been superseded by the multiformats module
+
+ multicodec@1.0.4:
+ resolution: {integrity: sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==}
+ deprecated: This module has been superseded by the multiformats module
+
+ multihashes@0.4.21:
+ resolution: {integrity: sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==}
+
+ murmur-128@0.2.1:
+ resolution: {integrity: sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==}
+
+ nano-json-stream-parser@0.1.2:
+ resolution: {integrity: sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==}
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ next-tick@1.1.0:
+ resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
+
+ node-addon-api@2.0.2:
+ resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ node-releases@2.0.18:
+ resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-url@6.1.0:
+ resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
+ engines: {node: '>=10'}
+
+ normalize-url@8.0.1:
+ resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==}
+ engines: {node: '>=14.16'}
+
+ number-to-bn@1.7.0:
+ resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ oauth-sign@0.9.0:
+ resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-hash@2.2.0:
+ resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==}
+ engines: {node: '>= 6'}
+
+ object-inspect@1.13.2:
+ resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+ engines: {node: '>= 0.4'}
+
+ object.fromentries@2.0.8:
+ resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
+ engines: {node: '>= 0.4'}
+
+ object.groupby@1.0.3:
+ resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
+ engines: {node: '>= 0.4'}
+
+ object.values@1.2.0:
+ resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==}
+ engines: {node: '>= 0.4'}
+
+ obliterator@2.0.4:
+ resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==}
+
+ oboe@2.1.5:
+ resolution: {integrity: sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==}
+
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ one-time@1.0.0:
+ resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ os-tmpdir@1.0.2:
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+ engines: {node: '>=0.10.0'}
+
+ p-cancelable@2.1.1:
+ resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
+ engines: {node: '>=8'}
+
+ p-cancelable@3.0.0:
+ resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
+ engines: {node: '>=12.20'}
+
+ p-defer@1.0.0:
+ resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==}
+ engines: {node: '>=4'}
+
+ p-limit@1.3.0:
+ resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==}
+ engines: {node: '>=4'}
+
+ p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@2.0.0:
+ resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
+ engines: {node: '>=4'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ p-map@4.0.0:
+ resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
+ engines: {node: '>=10'}
+
+ p-memoize@4.0.4:
+ resolution: {integrity: sha512-ijdh0DP4Mk6J4FXlOM6vPPoCjPytcEseW8p/k5SDTSSfGV3E9bpt9Yzfifvzp6iohIieoLTkXRb32OWV0fB2Lw==}
+ engines: {node: '>=10'}
+
+ p-reflect@2.1.0:
+ resolution: {integrity: sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==}
+ engines: {node: '>=8'}
+
+ p-settle@4.1.1:
+ resolution: {integrity: sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==}
+ engines: {node: '>=10'}
+
+ p-try@1.0.0:
+ resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
+ engines: {node: '>=4'}
+
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ package-json@8.1.1:
+ resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==}
+ engines: {node: '>=14.16'}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-headers@2.0.5:
+ resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ patch-console@1.0.0:
+ resolution: {integrity: sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA==}
+ engines: {node: '>=10'}
+
+ path-exists@3.0.0:
+ resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
+ engines: {node: '>=4'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-to-regexp@0.1.7:
+ resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ pbkdf2@3.1.2:
+ resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
+ engines: {node: '>=0.12'}
+
+ performance-now@2.1.0:
+ resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
+
+ picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ pluralize@8.0.0:
+ resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
+ engines: {node: '>=4'}
+
+ possible-typed-array-names@1.0.0:
+ resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ engines: {node: '>= 0.4'}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ prettier-linter-helpers@1.0.0:
+ resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
+ engines: {node: '>=6.0.0'}
+
+ prettier-plugin-packagejson@2.5.2:
+ resolution: {integrity: sha512-w+TmoLv2pIa+siplW1cCj2ujEXQQS6z7wmWLOiLQK/2QVl7Wy6xh/ZUpqQw8tbKMXDodmSW4GONxlA33xpdNOg==}
+ peerDependencies:
+ prettier: '>= 1.16.0'
+ peerDependenciesMeta:
+ prettier:
+ optional: true
+
+ prettier-plugin-solidity@1.4.1:
+ resolution: {integrity: sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ prettier: '>=2.3.0'
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ prettier@3.3.3:
+ resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+
+ prompts@2.4.2:
+ resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+ engines: {node: '>= 6'}
+
+ prop-types@15.8.1:
+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+
+ proto-list@1.2.4:
+ resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
+
+ proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+
+ psl@1.9.0:
+ resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
+
+ pump@3.0.0:
+ resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
+
+ punycode@2.1.0:
+ resolution: {integrity: sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==}
+ engines: {node: '>=6'}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ qs@6.11.0:
+ resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
+ engines: {node: '>=0.6'}
+
+ qs@6.13.0:
+ resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
+ engines: {node: '>=0.6'}
+
+ qs@6.5.3:
+ resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
+ engines: {node: '>=0.6'}
+
+ query-string@5.1.1:
+ resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==}
+ engines: {node: '>=0.10.0'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ quick-lru@5.1.1:
+ resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
+ engines: {node: '>=10'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ raw-body@2.5.2:
+ resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
+ engines: {node: '>= 0.8'}
+
+ rc@1.2.8:
+ resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+ hasBin: true
+
+ react-devtools-core@4.28.5:
+ resolution: {integrity: sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==}
+
+ react-is@16.13.1:
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+
+ react-reconciler@0.26.2:
+ resolution: {integrity: sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==}
+ engines: {node: '>=0.10.0'}
+ peerDependencies:
+ react: ^17.0.2
+
+ react@17.0.2:
+ resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==}
+ engines: {node: '>=0.10.0'}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regexp.prototype.flags@1.5.2:
+ resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
+ engines: {node: '>= 0.4'}
+
+ registry-auth-token@5.0.2:
+ resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==}
+ engines: {node: '>=14'}
+
+ registry-url@6.0.1:
+ resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==}
+ engines: {node: '>=12'}
+
+ request@2.88.2:
+ resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==}
+ engines: {node: '>= 6'}
+ deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-alpn@1.2.1:
+ resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
+ resolve@1.17.0:
+ resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==}
+
+ resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+
+ responselike@2.0.1:
+ resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
+
+ responselike@3.0.0:
+ resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
+ engines: {node: '>=14.16'}
+
+ restore-cursor@3.1.0:
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
+
+ reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
+ ripemd160@2.0.2:
+ resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
+
+ rlp@2.2.7:
+ resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ safe-array-concat@1.1.2:
+ resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
+ engines: {node: '>=0.4'}
+
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safe-regex-test@1.0.3:
+ resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
+ engines: {node: '>= 0.4'}
+
+ safe-stable-stringify@2.5.0:
+ resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+ engines: {node: '>=10'}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ scheduler@0.20.2:
+ resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==}
+
+ scrypt-js@3.0.1:
+ resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==}
+
+ secp256k1@4.0.3:
+ resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==}
+ engines: {node: '>=10.0.0'}
+
+ semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+ hasBin: true
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.6.3:
+ resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ send@0.18.0:
+ resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
+ engines: {node: '>= 0.8.0'}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
+ serve-static@1.15.0:
+ resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
+ engines: {node: '>= 0.8.0'}
+
+ servify@0.1.12:
+ resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==}
+ engines: {node: '>=6'}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
+
+ setimmediate@1.0.5:
+ resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ sha.js@2.4.11:
+ resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
+ hasBin: true
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ shell-quote@1.8.1:
+ resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
+
+ side-channel@1.0.6:
+ resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
+ engines: {node: '>= 0.4'}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ simple-concat@1.0.1:
+ resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
+
+ simple-get@2.8.2:
+ resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==}
+
+ simple-swizzle@0.2.2:
+ resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ slash@4.0.0:
+ resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
+ engines: {node: '>=12'}
+
+ slice-ansi@3.0.0:
+ resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
+ engines: {node: '>=8'}
+
+ slice-ansi@4.0.0:
+ resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
+ engines: {node: '>=10'}
+
+ solc@0.8.26:
+ resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
+ solhint@4.5.4:
+ resolution: {integrity: sha512-Cu1XiJXub2q1eCr9kkJ9VPv1sGcmj3V7Zb76B0CoezDOB9bu3DxKIFFH7ggCl9fWpEPD6xBmRLfZrYijkVmujQ==}
+ hasBin: true
+
+ solidity-bytes-utils@0.8.2:
+ resolution: {integrity: sha512-cqXPYAV2auhpdKSTPuqji0CwpSceZDu95CzqSM/9tDJ2MoMaMsdHTpOIWtVw31BIqqGPNmIChCswzbw0tHaMTw==}
+
+ sort-object-keys@1.1.3:
+ resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==}
+
+ sort-package-json@2.10.1:
+ resolution: {integrity: sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==}
+ hasBin: true
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ sshpk@1.18.0:
+ resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ stack-trace@0.0.10:
+ resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
+
+ stack-utils@2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
+
+ stacktrace-parser@0.1.10:
+ resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==}
+ engines: {node: '>=6'}
+
+ statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+
+ strict-uri-encode@1.1.0:
+ resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==}
+ engines: {node: '>=0.10.0'}
+
+ string-similarity@4.0.4:
+ resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string.prototype.trim@1.2.9:
+ resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimend@1.0.8:
+ resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==}
+
+ string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-hex-prefix@1.0.0:
+ resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ strip-json-comments@2.0.1:
+ resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+ engines: {node: '>=0.10.0'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ swarm-js@0.1.42:
+ resolution: {integrity: sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==}
+
+ synckit@0.9.1:
+ resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+
+ table@6.8.2:
+ resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==}
+ engines: {node: '>=10.0.0'}
+
+ tapable@2.2.1:
+ resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
+ engines: {node: '>=6'}
+
+ tar@4.4.19:
+ resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==}
+ engines: {node: '>=4.5'}
+
+ text-hex@1.0.0:
+ resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==}
+
+ text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+
+ timed-out@4.0.1:
+ resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==}
+ engines: {node: '>=0.10.0'}
+
+ tiny-invariant@1.3.3:
+ resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+
+ tinycolor2@1.6.0:
+ resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
+
+ tinygradient@0.4.3:
+ resolution: {integrity: sha512-tBPYQSs6eWukzzAITBSmqcOwZCKACvRa/XjPPh1mj4mnx4G3Drm51HxyCTU/TKnY8kG4hmTe5QlOh9O82aNtJQ==}
+
+ tmp@0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+
+ to-fast-properties@2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+ engines: {node: '>=4'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ tough-cookie@2.5.0:
+ resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==}
+ engines: {node: '>=0.8'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ triple-beam@1.4.1:
+ resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==}
+ engines: {node: '>= 14.0.0'}
+
+ ts-api-utils@1.3.0:
+ resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ typescript: '>=4.2.0'
+
+ ts-node@10.9.2:
+ resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
+ tslib@2.7.0:
+ resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
+
+ tsort@0.0.1:
+ resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==}
+
+ tsutils@3.21.0:
+ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
+ engines: {node: '>= 6'}
+ peerDependencies:
+ typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+
+ tunnel-agent@0.6.0:
+ resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+
+ tweetnacl-util@0.15.1:
+ resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==}
+
+ tweetnacl@0.14.5:
+ resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
+
+ tweetnacl@1.0.3:
+ resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ type-fest@0.12.0:
+ resolution: {integrity: sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==}
+ engines: {node: '>=10'}
+
+ type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
+ type-fest@0.7.1:
+ resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==}
+ engines: {node: '>=8'}
+
+ type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+
+ type@2.7.3:
+ resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==}
+
+ typed-array-buffer@1.0.2:
+ resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-length@1.0.1:
+ resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-offset@1.0.2:
+ resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-length@1.0.6:
+ resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
+ engines: {node: '>= 0.4'}
+
+ typedarray-to-buffer@3.1.5:
+ resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
+
+ typescript@5.5.4:
+ resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ ultron@1.1.1:
+ resolution: {integrity: sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==}
+
+ unbox-primitive@1.0.2:
+ resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ undici@5.28.4:
+ resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==}
+ engines: {node: '>=14.0'}
+
+ universalify@0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
+ update-browserslist-db@1.1.0:
+ resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ url-set-query@1.0.0:
+ resolution: {integrity: sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ utf8@3.0.0:
+ resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
+ utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+
+ uuid@3.4.0:
+ resolution: {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.
+ hasBin: true
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ hasBin: true
+
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ varint@5.0.2:
+ resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==}
+
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ verror@1.10.0:
+ resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
+ engines: {'0': node >=0.6.0}
+
+ web3-bzz@1.10.4:
+ resolution: {integrity: sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw==}
+ engines: {node: '>=8.0.0'}
+
+ web3-core-helpers@1.10.4:
+ resolution: {integrity: sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==}
+ engines: {node: '>=8.0.0'}
+
+ web3-core-method@1.10.4:
+ resolution: {integrity: sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA==}
+ engines: {node: '>=8.0.0'}
+
+ web3-core-promievent@1.10.4:
+ resolution: {integrity: sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==}
+ engines: {node: '>=8.0.0'}
+
+ web3-core-requestmanager@1.10.4:
+ resolution: {integrity: sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg==}
+ engines: {node: '>=8.0.0'}
+
+ web3-core-subscriptions@1.10.4:
+ resolution: {integrity: sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw==}
+ engines: {node: '>=8.0.0'}
+
+ web3-core@1.10.4:
+ resolution: {integrity: sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww==}
+ engines: {node: '>=8.0.0'}
+
+ web3-eth-abi@1.10.4:
+ resolution: {integrity: sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==}
+ engines: {node: '>=8.0.0'}
+
+ web3-eth-accounts@1.10.4:
+ resolution: {integrity: sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg==}
+ engines: {node: '>=8.0.0'}
+
+ web3-eth-contract@1.10.4:
+ resolution: {integrity: sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A==}
+ engines: {node: '>=8.0.0'}
+
+ web3-eth-ens@1.10.4:
+ resolution: {integrity: sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg==}
+ engines: {node: '>=8.0.0'}
+
+ web3-eth-iban@1.10.4:
+ resolution: {integrity: sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==}
+ engines: {node: '>=8.0.0'}
+
+ web3-eth-personal@1.10.4:
+ resolution: {integrity: sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w==}
+ engines: {node: '>=8.0.0'}
+
+ web3-eth@1.10.4:
+ resolution: {integrity: sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA==}
+ engines: {node: '>=8.0.0'}
+
+ web3-net@1.10.4:
+ resolution: {integrity: sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow==}
+ engines: {node: '>=8.0.0'}
+
+ web3-providers-http@1.10.4:
+ resolution: {integrity: sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ==}
+ engines: {node: '>=8.0.0'}
+
+ web3-providers-ipc@1.10.4:
+ resolution: {integrity: sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw==}
+ engines: {node: '>=8.0.0'}
+
+ web3-providers-ws@1.10.4:
+ resolution: {integrity: sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA==}
+ engines: {node: '>=8.0.0'}
+
+ web3-shh@1.10.4:
+ resolution: {integrity: sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw==}
+ engines: {node: '>=8.0.0'}
+
+ web3-utils@1.10.4:
+ resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==}
+ engines: {node: '>=8.0.0'}
+
+ web3@1.10.4:
+ resolution: {integrity: sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA==}
+ engines: {node: '>=8.0.0'}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ websocket@1.0.35:
+ resolution: {integrity: sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==}
+ engines: {node: '>=4.0.0'}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which-boxed-primitive@1.0.2:
+ resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+
+ which-typed-array@1.1.15:
+ resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ widest-line@3.1.0:
+ resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
+ engines: {node: '>=8'}
+
+ winston-transport@4.7.1:
+ resolution: {integrity: sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==}
+ engines: {node: '>= 12.0.0'}
+
+ winston@3.14.2:
+ resolution: {integrity: sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg==}
+ engines: {node: '>= 12.0.0'}
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ workerpool@6.5.1:
+ resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
+
+ wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@3.3.3:
+ resolution: {integrity: sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@7.4.6:
+ resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ xhr-request-promise@0.1.3:
+ resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==}
+
+ xhr-request@1.1.0:
+ resolution: {integrity: sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==}
+
+ xhr@2.6.0:
+ resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==}
+
+ xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yaeti@0.0.6:
+ resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==}
+ engines: {node: '>=0.10.32'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ yoga-layout-prebuilt@1.10.0:
+ resolution: {integrity: sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==}
+ engines: {node: '>=8'}
+
+ zksync-ethers@5.9.2:
+ resolution: {integrity: sha512-Y2Mx6ovvxO6UdC2dePLguVzvNToOY8iLWeq5ne+jgGSJxAi/f4He/NF6FNsf6x1aWX0o8dy4Df8RcOQXAkj5qw==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ ethers: ^5.7.2
+
+ zksync-web3@0.14.4:
+ resolution: {integrity: sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==}
+ deprecated: This package has been deprecated in favor of zksync-ethers@5.0.0
+ peerDependencies:
+ ethers: ^5.7.2
+
+ zod@3.23.8:
+ resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
+
+snapshots:
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@axelar-network/axelar-gmp-sdk-solidity@5.10.0': {}
+
+ '@babel/code-frame@7.24.7':
+ dependencies:
+ '@babel/highlight': 7.24.7
+ picocolors: 1.0.1
+
+ '@babel/compat-data@7.25.4': {}
+
+ '@babel/core@7.25.2':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.24.7
+ '@babel/generator': 7.25.5
+ '@babel/helper-compilation-targets': 7.25.2
+ '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2)
+ '@babel/helpers': 7.25.0
+ '@babel/parser': 7.25.4
+ '@babel/template': 7.25.0
+ '@babel/traverse': 7.25.4
+ '@babel/types': 7.25.4
+ convert-source-map: 2.0.0
+ debug: 4.3.6(supports-color@8.1.1)
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.25.5':
+ dependencies:
+ '@babel/types': 7.25.4
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+ jsesc: 2.5.2
+
+ '@babel/helper-compilation-targets@7.25.2':
+ dependencies:
+ '@babel/compat-data': 7.25.4
+ '@babel/helper-validator-option': 7.24.8
+ browserslist: 4.23.3
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-module-imports@7.24.7':
+ dependencies:
+ '@babel/traverse': 7.25.4
+ '@babel/types': 7.25.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-module-imports': 7.24.7
+ '@babel/helper-simple-access': 7.24.7
+ '@babel/helper-validator-identifier': 7.24.7
+ '@babel/traverse': 7.25.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-simple-access@7.24.7':
+ dependencies:
+ '@babel/traverse': 7.25.4
+ '@babel/types': 7.25.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.24.8': {}
+
+ '@babel/helper-validator-identifier@7.24.7': {}
+
+ '@babel/helper-validator-option@7.24.8': {}
+
+ '@babel/helpers@7.25.0':
+ dependencies:
+ '@babel/template': 7.25.0
+ '@babel/types': 7.25.4
+
+ '@babel/highlight@7.24.7':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.24.7
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ picocolors: 1.0.1
+
+ '@babel/parser@7.25.4':
+ dependencies:
+ '@babel/types': 7.25.4
+
+ '@babel/template@7.25.0':
+ dependencies:
+ '@babel/code-frame': 7.24.7
+ '@babel/parser': 7.25.4
+ '@babel/types': 7.25.4
+
+ '@babel/traverse@7.25.4':
+ dependencies:
+ '@babel/code-frame': 7.24.7
+ '@babel/generator': 7.25.5
+ '@babel/parser': 7.25.4
+ '@babel/template': 7.25.0
+ '@babel/types': 7.25.4
+ debug: 4.3.6(supports-color@8.1.1)
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.25.4':
+ dependencies:
+ '@babel/helper-string-parser': 7.24.8
+ '@babel/helper-validator-identifier': 7.24.7
+ to-fast-properties: 2.0.0
+
+ '@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)':
+ dependencies:
+ '@eth-optimism/contracts': 0.5.40(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)
+ '@openzeppelin/contracts': 4.3.3
+ '@openzeppelin/contracts-upgradeable-4.7.3': '@openzeppelin/contracts-upgradeable@4.7.3'
+ '@openzeppelin/contracts-v0.7': '@openzeppelin/contracts@3.4.2'
+ transitivePeerDependencies:
+ - bufferutil
+ - ethers
+ - utf-8-validate
+
+ '@colors/colors@1.5.0':
+ optional: true
+
+ '@colors/colors@1.6.0': {}
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
+ '@dabh/diagnostics@2.0.3':
+ dependencies:
+ colorspace: 1.1.4
+ enabled: 2.0.0
+ kuler: 2.0.0
+
+ '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
+ dependencies:
+ eslint: 8.57.0
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.11.0': {}
+
+ '@eslint/eslintrc@2.1.4':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.6(supports-color@8.1.1)
+ espree: 9.6.1
+ globals: 13.24.0
+ ignore: 5.3.2
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@8.57.0': {}
+
+ '@eth-optimism/contracts@0.5.40(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)':
+ dependencies:
+ '@eth-optimism/core-utils': 0.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)':
+ dependencies:
+ '@eth-optimism/core-utils': 0.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@eth-optimism/core-utils@0.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@ethersproject/abstract-provider': 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/hash': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@ethersproject/rlp': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/web': 5.7.1
+ bufio: 1.2.1
+ chai: 4.5.0
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@ethereumjs/common@2.6.5':
+ dependencies:
+ crc-32: 1.2.2
+ ethereumjs-util: 7.1.5
+
+ '@ethereumjs/rlp@4.0.1': {}
+
+ '@ethereumjs/tx@3.5.2':
+ dependencies:
+ '@ethereumjs/common': 2.6.5
+ ethereumjs-util: 7.1.5
+
+ '@ethereumjs/util@8.1.0':
+ dependencies:
+ '@ethereumjs/rlp': 4.0.1
+ ethereum-cryptography: 2.2.1
+ micro-ftch: 0.3.1
+
+ '@ethersproject/abi@5.7.0':
+ 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':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/networks': 5.7.1
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/web': 5.7.1
+
+ '@ethersproject/abstract-signer@5.7.0':
+ 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':
+ 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':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+
+ '@ethersproject/basex@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/properties': 5.7.0
+
+ '@ethersproject/bignumber@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ bn.js: 5.2.1
+
+ '@ethersproject/bytes@5.7.0':
+ dependencies:
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/constants@5.7.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+
+ '@ethersproject/contracts@5.7.0':
+ 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':
+ 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':
+ 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':
+ 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':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ js-sha3: 0.8.0
+
+ '@ethersproject/logger@5.7.0': {}
+
+ '@ethersproject/networks@5.7.1':
+ dependencies:
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/pbkdf2@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+
+ '@ethersproject/properties@5.7.0':
+ dependencies:
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/basex': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/networks': 5.7.1
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/web': 5.7.1
+ bech32: 1.1.4
+ ws: 7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@ethersproject/random@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/rlp@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/sha2@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ hash.js: 1.1.7
+
+ '@ethersproject/signing-key@5.7.0':
+ 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':
+ 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':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/transactions@5.7.0':
+ 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':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/wallet@5.7.0':
+ 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':
+ 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':
+ 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.1.1': {}
+
+ '@humanwhocodes/config-array@0.11.14':
+ dependencies:
+ '@humanwhocodes/object-schema': 2.0.3
+ debug: 4.3.6(supports-color@8.1.1)
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/object-schema@2.0.3': {}
+
+ '@jridgewell/gen-mapping@0.3.5':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@layerzerolabs/devtools-evm-hardhat@1.1.0(5eplbhqkmr4ft6444bdwdnhg2y)':
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/contracts': 5.7.0
+ '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@layerzerolabs/devtools': 0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ '@layerzerolabs/devtools-evm': 0.4.1(2r7ft22zawgnxzihoucwo7zmpm)
+ '@layerzerolabs/export-deployments': 0.0.11
+ '@layerzerolabs/io-devtools': 0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8)
+ '@layerzerolabs/lz-definitions': 2.3.38
+ '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))
+ '@safe-global/protocol-kit': 1.3.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)
+ fp-ts: 2.16.9
+ hardhat: 2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)
+ hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ micro-memoize: 4.1.2
+ p-memoize: 4.0.4
+ zod: 3.23.8
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - ethers
+ - supports-color
+ - utf-8-validate
+
+ '@layerzerolabs/devtools-evm@0.4.1(2r7ft22zawgnxzihoucwo7zmpm)':
+ 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/constants': 5.7.0
+ '@ethersproject/contracts': 5.7.0
+ '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@layerzerolabs/devtools': 0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ '@layerzerolabs/io-devtools': 0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8)
+ '@layerzerolabs/lz-definitions': 2.3.38
+ '@safe-global/api-kit': 1.3.1
+ '@safe-global/protocol-kit': 1.3.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ fp-ts: 2.16.9
+ p-memoize: 4.0.4
+ zod: 3.23.8
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@layerzerolabs/devtools@0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@layerzerolabs/io-devtools': 0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8)
+ '@layerzerolabs/lz-definitions': 2.3.38
+ bs58: 6.0.0
+ exponential-backoff: 3.1.1
+ js-yaml: 4.1.0
+ zod: 3.23.8
+
+ '@layerzerolabs/eslint-config-next@2.3.38(typescript@5.5.4)':
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
+ '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
+ eslint: 8.57.0
+ eslint-config-prettier: 9.1.0(eslint@8.57.0)
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
+ eslint-plugin-autofix: 2.1.0(eslint@8.57.0)
+ eslint-plugin-compat: 4.2.0(eslint@8.57.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ eslint-plugin-prettier: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3)
+ eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)
+ prettier: 3.3.3
+ transitivePeerDependencies:
+ - '@types/eslint'
+ - eslint-import-resolver-node
+ - eslint-import-resolver-webpack
+ - eslint-plugin-import-x
+ - supports-color
+ - typescript
+
+ '@layerzerolabs/evm-sdks-core@2.3.38(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@layerzerolabs/export-deployments@0.0.11':
+ dependencies:
+ typescript: 5.5.4
+
+ '@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8)':
+ dependencies:
+ chalk: 4.1.2
+ logform: 2.6.1
+ prompts: 2.4.2
+ table: 6.8.2
+ winston: 3.14.2
+ zod: 3.23.8
+ optionalDependencies:
+ ink: 3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10)
+ ink-gradient: 2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)
+ ink-table: 3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)
+ react: 17.0.2
+ yoga-layout-prebuilt: 1.10.0
+
+ '@layerzerolabs/lz-definitions@2.3.38':
+ dependencies:
+ tiny-invariant: 1.3.3
+
+ '@layerzerolabs/lz-evm-messagelib-v2@2.3.38(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@layerzerolabs/lz-evm-protocol-v2@2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2))(@layerzerolabs/lz-evm-v1-0.7@2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)':
+ dependencies:
+ '@axelar-network/axelar-gmp-sdk-solidity': 5.10.0
+ '@chainlink/contracts-ccip': 0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)
+ '@eth-optimism/contracts': 0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)
+ '@layerzerolabs/lz-evm-protocol-v2': 2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-v1-0.7': 2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@openzeppelin/contracts': 5.0.2
+ '@openzeppelin/contracts-upgradeable': 5.0.2(@openzeppelin/contracts@5.0.2)
+ hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ solidity-bytes-utils: 0.8.2
+
+ '@layerzerolabs/lz-evm-protocol-v2@2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)':
+ dependencies:
+ '@openzeppelin/contracts': 5.0.2
+ '@openzeppelin/contracts-upgradeable': 5.0.2(@openzeppelin/contracts@5.0.2)
+ hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ solidity-bytes-utils: 0.8.2
+
+ '@layerzerolabs/lz-evm-sdk-v1@2.3.38(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@layerzerolabs/evm-sdks-core': 2.3.38(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@layerzerolabs/lz-evm-sdk-v2@2.3.38(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@layerzerolabs/evm-sdks-core': 2.3.38(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@layerzerolabs/lz-evm-v1-0.7@2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@openzeppelin/contracts': 5.0.2
+ '@openzeppelin/contracts-upgradeable': 5.0.2(@openzeppelin/contracts@5.0.2)
+ hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ '@layerzerolabs/lz-v2-utilities@2.3.38':
+ 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.3
+
+ '@layerzerolabs/oapp-evm@0.0.3(rzjgcitmshqiknfnsxwkpnnicm)':
+ dependencies:
+ '@layerzerolabs/lz-evm-messagelib-v2': 2.3.38(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@layerzerolabs/lz-evm-protocol-v2@2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2))(@layerzerolabs/lz-evm-v1-0.7@2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-protocol-v2': 2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-v1-0.7': 2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@openzeppelin/contracts': 5.0.2
+ '@openzeppelin/contracts-upgradeable': 5.0.2(@openzeppelin/contracts@5.0.2)
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@layerzerolabs/oft-evm@0.0.10(4nefoeqpcdzybqt5d7v6gwybrm)':
+ dependencies:
+ '@layerzerolabs/lz-evm-messagelib-v2': 2.3.38(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@layerzerolabs/lz-evm-protocol-v2@2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2))(@layerzerolabs/lz-evm-v1-0.7@2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-protocol-v2': 2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-v1-0.7': 2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@layerzerolabs/oapp-evm': 0.0.3(rzjgcitmshqiknfnsxwkpnnicm)
+ '@openzeppelin/contracts': 5.0.2
+ '@openzeppelin/contracts-upgradeable': 5.0.2(@openzeppelin/contracts@5.0.2)
+
+ '@layerzerolabs/prettier-config-next@2.3.38':
+ dependencies:
+ prettier: 3.3.3
+ prettier-plugin-packagejson: 2.5.2(prettier@3.3.3)
+ prettier-plugin-solidity: 1.4.1(prettier@3.3.3)
+
+ '@layerzerolabs/protocol-devtools-evm@1.2.0(dak5dzz5rwnkirqgninuledy2i)':
+ dependencies:
+ '@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.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@layerzerolabs/devtools': 0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ '@layerzerolabs/devtools-evm': 0.4.1(2r7ft22zawgnxzihoucwo7zmpm)
+ '@layerzerolabs/io-devtools': 0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8)
+ '@layerzerolabs/lz-definitions': 2.3.38
+ '@layerzerolabs/protocol-devtools': 0.4.2(@layerzerolabs/devtools@0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ p-memoize: 4.0.4
+ zod: 3.23.8
+
+ '@layerzerolabs/protocol-devtools@0.4.2(@layerzerolabs/devtools@0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)':
+ dependencies:
+ '@layerzerolabs/devtools': 0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ '@layerzerolabs/lz-definitions': 2.3.38
+ zod: 3.23.8
+
+ '@layerzerolabs/solhint-config@2.3.38(typescript@5.5.4)':
+ dependencies:
+ solhint: 4.5.4(typescript@5.5.4)
+ transitivePeerDependencies:
+ - typescript
+
+ '@layerzerolabs/test-devtools-evm-foundry@0.2.11(jr4wkoefb5a2xvwxl6dcarsev4)':
+ dependencies:
+ '@layerzerolabs/lz-evm-messagelib-v2': 2.3.38(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@layerzerolabs/lz-evm-protocol-v2@2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2))(@layerzerolabs/lz-evm-v1-0.7@2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-protocol-v2': 2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-v1-0.7': 2.3.38(@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2))(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@layerzerolabs/oapp-evm': 0.0.3(rzjgcitmshqiknfnsxwkpnnicm)
+ '@layerzerolabs/oft-evm': 0.0.10(4nefoeqpcdzybqt5d7v6gwybrm)
+ '@openzeppelin/contracts': 5.0.2
+ '@openzeppelin/contracts-upgradeable': 5.0.2(@openzeppelin/contracts@5.0.2)
+
+ '@layerzerolabs/test-devtools-evm-hardhat@0.2.6(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)':
+ dependencies:
+ hardhat: 2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)
+ solidity-bytes-utils: 0.8.2
+
+ '@layerzerolabs/toolbox-foundry@0.1.9': {}
+
+ '@layerzerolabs/toolbox-hardhat@0.3.6(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@ethersproject/bignumber@5.7.0)(@ethersproject/constants@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@nomicfoundation/hardhat-ethers@3.0.7(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)))(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)(utf-8-validate@5.0.10)':
+ 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.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ '@layerzerolabs/devtools-evm': 0.4.1(2r7ft22zawgnxzihoucwo7zmpm)
+ '@layerzerolabs/devtools-evm-hardhat': 1.1.0(5eplbhqkmr4ft6444bdwdnhg2y)
+ '@layerzerolabs/io-devtools': 0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8)
+ '@layerzerolabs/lz-definitions': 2.3.38
+ '@layerzerolabs/lz-evm-sdk-v1': 2.3.38(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@layerzerolabs/lz-evm-sdk-v2': 2.3.38(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@layerzerolabs/lz-v2-utilities': 2.3.38
+ '@layerzerolabs/protocol-devtools': 0.4.2(@layerzerolabs/devtools@0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ '@layerzerolabs/protocol-devtools-evm': 1.2.0(dak5dzz5rwnkirqgninuledy2i)
+ '@layerzerolabs/test-devtools-evm-hardhat': 0.2.6(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/ua-devtools': 1.0.4(x34n35fepqsxdkxtzw6k3ez3tq)
+ '@layerzerolabs/ua-devtools-evm': 3.0.0(ae2nc37tjcrfrqskuqwsuwucpq)
+ '@layerzerolabs/ua-devtools-evm-hardhat': 3.0.0(tnfehutspvxgnr4pupv4sv4ydu)
+ '@nomicfoundation/hardhat-ethers': 3.0.7(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ fp-ts: 2.16.9
+ hardhat: 2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)
+ hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ink: 3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10)
+ ink-gradient: 2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)
+ ink-table: 3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)
+ react: 17.0.2
+ yoga-layout-prebuilt: 1.10.0
+ zod: 3.23.8
+ transitivePeerDependencies:
+ - '@ethersproject/abstract-provider'
+ - '@ethersproject/abstract-signer'
+ - '@ethersproject/bignumber'
+ - '@ethersproject/constants'
+ - '@ethersproject/providers'
+ - '@nomiclabs/hardhat-ethers'
+ - '@types/react'
+ - bufferutil
+ - encoding
+ - solidity-bytes-utils
+ - supports-color
+ - utf-8-validate
+
+ '@layerzerolabs/ua-devtools-evm-hardhat@3.0.0(tnfehutspvxgnr4pupv4sv4ydu)':
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/contracts': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@layerzerolabs/devtools': 0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ '@layerzerolabs/devtools-evm': 0.4.1(2r7ft22zawgnxzihoucwo7zmpm)
+ '@layerzerolabs/devtools-evm-hardhat': 1.1.0(5eplbhqkmr4ft6444bdwdnhg2y)
+ '@layerzerolabs/io-devtools': 0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8)
+ '@layerzerolabs/lz-definitions': 2.3.38
+ '@layerzerolabs/protocol-devtools': 0.4.2(@layerzerolabs/devtools@0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ '@layerzerolabs/protocol-devtools-evm': 1.2.0(dak5dzz5rwnkirqgninuledy2i)
+ '@layerzerolabs/ua-devtools': 1.0.4(x34n35fepqsxdkxtzw6k3ez3tq)
+ '@layerzerolabs/ua-devtools-evm': 3.0.0(ae2nc37tjcrfrqskuqwsuwucpq)
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ hardhat: 2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)
+ hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ p-memoize: 4.0.4
+ typescript: 5.5.4
+
+ '@layerzerolabs/ua-devtools-evm@3.0.0(ae2nc37tjcrfrqskuqwsuwucpq)':
+ dependencies:
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/contracts': 5.7.0
+ '@layerzerolabs/devtools': 0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ '@layerzerolabs/devtools-evm': 0.4.1(2r7ft22zawgnxzihoucwo7zmpm)
+ '@layerzerolabs/io-devtools': 0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8)
+ '@layerzerolabs/lz-definitions': 2.3.38
+ '@layerzerolabs/lz-v2-utilities': 2.3.38
+ '@layerzerolabs/protocol-devtools': 0.4.2(@layerzerolabs/devtools@0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ '@layerzerolabs/protocol-devtools-evm': 1.2.0(dak5dzz5rwnkirqgninuledy2i)
+ '@layerzerolabs/ua-devtools': 1.0.4(x34n35fepqsxdkxtzw6k3ez3tq)
+ p-memoize: 4.0.4
+ zod: 3.23.8
+
+ '@layerzerolabs/ua-devtools@1.0.4(x34n35fepqsxdkxtzw6k3ez3tq)':
+ dependencies:
+ '@layerzerolabs/devtools': 0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ '@layerzerolabs/io-devtools': 0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8)
+ '@layerzerolabs/lz-definitions': 2.3.38
+ '@layerzerolabs/lz-v2-utilities': 2.3.38
+ '@layerzerolabs/protocol-devtools': 0.4.2(@layerzerolabs/devtools@0.3.24(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.12(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.38)(zod@3.23.8)
+ zod: 3.23.8
+
+ '@mdn/browser-compat-data@5.5.49': {}
+
+ '@metamask/eth-sig-util@4.0.1':
+ 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.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.2.0': {}
+
+ '@noble/hashes@1.4.0': {}
+
+ '@noble/secp256k1@1.7.1': {}
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.17.1
+
+ '@nolyfill/is-core-module@1.0.39': {}
+
+ '@nomicfoundation/edr-darwin-arm64@0.5.2': {}
+
+ '@nomicfoundation/edr-darwin-x64@0.5.2': {}
+
+ '@nomicfoundation/edr-linux-arm64-gnu@0.5.2': {}
+
+ '@nomicfoundation/edr-linux-arm64-musl@0.5.2': {}
+
+ '@nomicfoundation/edr-linux-x64-gnu@0.5.2': {}
+
+ '@nomicfoundation/edr-linux-x64-musl@0.5.2': {}
+
+ '@nomicfoundation/edr-win32-x64-msvc@0.5.2': {}
+
+ '@nomicfoundation/edr@0.5.2':
+ dependencies:
+ '@nomicfoundation/edr-darwin-arm64': 0.5.2
+ '@nomicfoundation/edr-darwin-x64': 0.5.2
+ '@nomicfoundation/edr-linux-arm64-gnu': 0.5.2
+ '@nomicfoundation/edr-linux-arm64-musl': 0.5.2
+ '@nomicfoundation/edr-linux-x64-gnu': 0.5.2
+ '@nomicfoundation/edr-linux-x64-musl': 0.5.2
+ '@nomicfoundation/edr-win32-x64-msvc': 0.5.2
+
+ '@nomicfoundation/ethereumjs-common@4.0.4':
+ dependencies:
+ '@nomicfoundation/ethereumjs-util': 9.0.4
+ transitivePeerDependencies:
+ - c-kzg
+
+ '@nomicfoundation/ethereumjs-rlp@5.0.4': {}
+
+ '@nomicfoundation/ethereumjs-tx@5.0.4':
+ 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':
+ dependencies:
+ '@nomicfoundation/ethereumjs-rlp': 5.0.4
+ ethereum-cryptography: 0.1.3
+
+ '@nomicfoundation/hardhat-ethers@3.0.7(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))':
+ dependencies:
+ debug: 4.3.6(supports-color@8.1.1)
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ hardhat: 2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)
+ lodash.isequal: 4.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2':
+ optional: true
+
+ '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2':
+ optional: true
+
+ '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2':
+ optional: true
+
+ '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2':
+ optional: true
+
+ '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2':
+ optional: true
+
+ '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2':
+ optional: true
+
+ '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2':
+ optional: true
+
+ '@nomicfoundation/solidity-analyzer@0.1.2':
+ 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(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))':
+ dependencies:
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ hardhat: 2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)
+
+ '@openzeppelin/contracts-upgradeable@4.7.3': {}
+
+ '@openzeppelin/contracts-upgradeable@5.0.2(@openzeppelin/contracts@5.0.2)':
+ dependencies:
+ '@openzeppelin/contracts': 5.0.2
+
+ '@openzeppelin/contracts@3.4.2': {}
+
+ '@openzeppelin/contracts@4.3.3': {}
+
+ '@openzeppelin/contracts@5.0.2': {}
+
+ '@pkgr/core@0.1.1': {}
+
+ '@pnpm/config.env-replace@1.1.0': {}
+
+ '@pnpm/network.ca-file@1.0.2':
+ dependencies:
+ graceful-fs: 4.2.10
+
+ '@pnpm/npm-conf@2.3.1':
+ dependencies:
+ '@pnpm/config.env-replace': 1.1.0
+ '@pnpm/network.ca-file': 1.0.2
+ config-chain: 1.1.13
+
+ '@rushstack/eslint-patch@1.10.4': {}
+
+ '@safe-global/api-kit@1.3.1':
+ dependencies:
+ '@ethersproject/abstract-signer': 5.7.0
+ '@safe-global/safe-core-sdk-types': 2.3.0
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ '@safe-global/protocol-kit@1.3.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)':
+ dependencies:
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/solidity': 5.7.0
+ '@safe-global/safe-deployments': 1.37.3
+ ethereumjs-util: 7.1.5
+ semver: 7.6.3
+ web3: 1.10.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ web3-core: 1.10.4
+ web3-utils: 1.10.4
+ zksync-web3: 0.14.4(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - ethers
+ - supports-color
+ - utf-8-validate
+
+ '@safe-global/safe-core-sdk-types@2.3.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/contracts': 5.7.0
+ '@safe-global/safe-deployments': 1.37.3
+ web3-core: 1.10.4
+ web3-utils: 1.10.4
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ '@safe-global/safe-deployments@1.37.3':
+ dependencies:
+ semver: 7.6.3
+
+ '@scure/base@1.1.7': {}
+
+ '@scure/bip32@1.1.5':
+ dependencies:
+ '@noble/hashes': 1.2.0
+ '@noble/secp256k1': 1.7.1
+ '@scure/base': 1.1.7
+
+ '@scure/bip32@1.4.0':
+ dependencies:
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@scure/base': 1.1.7
+
+ '@scure/bip39@1.1.1':
+ dependencies:
+ '@noble/hashes': 1.2.0
+ '@scure/base': 1.1.7
+
+ '@scure/bip39@1.3.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+ '@scure/base': 1.1.7
+
+ '@sentry/core@5.30.0':
+ dependencies:
+ '@sentry/hub': 5.30.0
+ '@sentry/minimal': 5.30.0
+ '@sentry/types': 5.30.0
+ '@sentry/utils': 5.30.0
+ tslib: 1.14.1
+
+ '@sentry/hub@5.30.0':
+ dependencies:
+ '@sentry/types': 5.30.0
+ '@sentry/utils': 5.30.0
+ tslib: 1.14.1
+
+ '@sentry/minimal@5.30.0':
+ dependencies:
+ '@sentry/hub': 5.30.0
+ '@sentry/types': 5.30.0
+ tslib: 1.14.1
+
+ '@sentry/node@5.30.0':
+ 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.2
+ https-proxy-agent: 5.0.1
+ lru_map: 0.3.3
+ tslib: 1.14.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@sentry/tracing@5.30.0':
+ dependencies:
+ '@sentry/hub': 5.30.0
+ '@sentry/minimal': 5.30.0
+ '@sentry/types': 5.30.0
+ '@sentry/utils': 5.30.0
+ tslib: 1.14.1
+
+ '@sentry/types@5.30.0': {}
+
+ '@sentry/utils@5.30.0':
+ dependencies:
+ '@sentry/types': 5.30.0
+ tslib: 1.14.1
+
+ '@sindresorhus/is@4.6.0': {}
+
+ '@sindresorhus/is@5.6.0': {}
+
+ '@solidity-parser/parser@0.18.0': {}
+
+ '@szmarczak/http-timer@4.0.6':
+ dependencies:
+ defer-to-connect: 2.0.1
+
+ '@szmarczak/http-timer@5.0.1':
+ dependencies:
+ defer-to-connect: 2.0.1
+
+ '@tsconfig/node10@1.0.11': {}
+
+ '@tsconfig/node12@1.0.11': {}
+
+ '@tsconfig/node14@1.0.3': {}
+
+ '@tsconfig/node16@1.0.4': {}
+
+ '@types/bn.js@4.11.6':
+ dependencies:
+ '@types/node': 18.18.14
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 18.18.14
+
+ '@types/cacheable-request@6.0.3':
+ dependencies:
+ '@types/http-cache-semantics': 4.0.4
+ '@types/keyv': 3.1.4
+ '@types/node': 18.18.14
+ '@types/responselike': 1.0.3
+
+ '@types/chai@4.3.18': {}
+
+ '@types/http-cache-semantics@4.0.4': {}
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/json5@0.0.29': {}
+
+ '@types/keyv@3.1.4':
+ dependencies:
+ '@types/node': 18.18.14
+
+ '@types/lru-cache@5.1.1': {}
+
+ '@types/mocha@10.0.7': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@18.18.14':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/pbkdf2@3.1.2':
+ dependencies:
+ '@types/node': 18.18.14
+
+ '@types/qs@6.9.15': {}
+
+ '@types/responselike@1.0.3':
+ dependencies:
+ '@types/node': 18.18.14
+
+ '@types/secp256k1@4.0.6':
+ dependencies:
+ '@types/node': 18.18.14
+
+ '@types/semver@7.5.8': {}
+
+ '@types/tinycolor2@1.4.6': {}
+
+ '@types/triple-beam@1.3.5': {}
+
+ '@types/yoga-layout@1.9.2': {}
+
+ '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)':
+ dependencies:
+ '@eslint-community/regexpp': 4.11.0
+ '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
+ '@typescript-eslint/scope-manager': 7.18.0
+ '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
+ '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
+ '@typescript-eslint/visitor-keys': 7.18.0
+ eslint: 8.57.0
+ graphemer: 1.4.0
+ ignore: 5.3.2
+ natural-compare: 1.4.0
+ ts-api-utils: 1.3.0(typescript@5.5.4)
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 7.18.0
+ '@typescript-eslint/types': 7.18.0
+ '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
+ '@typescript-eslint/visitor-keys': 7.18.0
+ debug: 4.3.6(supports-color@8.1.1)
+ eslint: 8.57.0
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@5.62.0':
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/visitor-keys': 5.62.0
+
+ '@typescript-eslint/scope-manager@7.18.0':
+ dependencies:
+ '@typescript-eslint/types': 7.18.0
+ '@typescript-eslint/visitor-keys': 7.18.0
+
+ '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
+ dependencies:
+ '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
+ '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
+ debug: 4.3.6(supports-color@8.1.1)
+ eslint: 8.57.0
+ ts-api-utils: 1.3.0(typescript@5.5.4)
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@5.62.0': {}
+
+ '@typescript-eslint/types@7.18.0': {}
+
+ '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4)':
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/visitor-keys': 5.62.0
+ debug: 4.3.6(supports-color@8.1.1)
+ globby: 11.1.0
+ is-glob: 4.0.3
+ semver: 7.6.3
+ tsutils: 3.21.0(typescript@5.5.4)
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)':
+ dependencies:
+ '@typescript-eslint/types': 7.18.0
+ '@typescript-eslint/visitor-keys': 7.18.0
+ debug: 4.3.6(supports-color@8.1.1)
+ globby: 11.1.0
+ is-glob: 4.0.3
+ minimatch: 9.0.5
+ semver: 7.6.3
+ ts-api-utils: 1.3.0(typescript@5.5.4)
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.5.8
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4)
+ eslint: 8.57.0
+ eslint-scope: 5.1.1
+ semver: 7.6.3
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@typescript-eslint/scope-manager': 7.18.0
+ '@typescript-eslint/types': 7.18.0
+ '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
+ eslint: 8.57.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ '@typescript-eslint/visitor-keys@5.62.0':
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ eslint-visitor-keys: 3.4.3
+
+ '@typescript-eslint/visitor-keys@7.18.0':
+ dependencies:
+ '@typescript-eslint/types': 7.18.0
+ eslint-visitor-keys: 3.4.3
+
+ '@ungap/structured-clone@1.2.0': {}
+
+ abortcontroller-polyfill@1.7.5: {}
+
+ accepts@1.3.8:
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ acorn-jsx@5.3.2(acorn@8.12.1):
+ dependencies:
+ acorn: 8.12.1
+
+ acorn-walk@8.3.3:
+ dependencies:
+ acorn: 8.12.1
+
+ acorn@8.12.1: {}
+
+ adm-zip@0.4.16: {}
+
+ aes-js@3.0.0: {}
+
+ agent-base@6.0.2:
+ dependencies:
+ debug: 4.3.6(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ aggregate-error@3.1.0:
+ dependencies:
+ clean-stack: 2.2.0
+ indent-string: 4.0.0
+
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ajv@8.17.1:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.0.1
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
+ ansi-align@3.0.1:
+ dependencies:
+ string-width: 4.2.3
+
+ ansi-colors@4.1.3: {}
+
+ ansi-escapes@4.3.2:
+ dependencies:
+ type-fest: 0.21.3
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ antlr4@4.13.2: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ arg@4.1.3: {}
+
+ argparse@2.0.1: {}
+
+ array-buffer-byte-length@1.0.1:
+ dependencies:
+ call-bind: 1.0.7
+ is-array-buffer: 3.0.4
+
+ array-flatten@1.1.1: {}
+
+ array-includes@3.1.8:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
+ get-intrinsic: 1.2.4
+ is-string: 1.0.7
+
+ array-union@2.1.0: {}
+
+ array.prototype.findlastindex@1.2.5:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ es-shim-unscopables: 1.0.2
+
+ array.prototype.flat@1.3.2:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-shim-unscopables: 1.0.2
+
+ array.prototype.flatmap@1.3.2:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-shim-unscopables: 1.0.2
+
+ arraybuffer.prototype.slice@1.0.3:
+ dependencies:
+ array-buffer-byte-length: 1.0.1
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ is-array-buffer: 3.0.4
+ is-shared-array-buffer: 1.0.3
+
+ asn1@0.2.6:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ assert-plus@1.0.0: {}
+
+ assertion-error@1.1.0: {}
+
+ ast-metadata-inferer@0.8.0:
+ dependencies:
+ '@mdn/browser-compat-data': 5.5.49
+
+ ast-parents@0.0.1: {}
+
+ astral-regex@2.0.0: {}
+
+ async-limiter@1.0.1: {}
+
+ async@3.2.6: {}
+
+ asynckit@0.4.0: {}
+
+ auto-bind@4.0.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.0.0
+
+ aws-sign2@0.7.0: {}
+
+ aws4@1.13.1: {}
+
+ axios@0.21.4(debug@4.3.6):
+ dependencies:
+ follow-redirects: 1.15.6(debug@4.3.6)
+ transitivePeerDependencies:
+ - debug
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base-x@4.0.0: {}
+
+ base-x@5.0.0: {}
+
+ base64-js@1.5.1: {}
+
+ bcrypt-pbkdf@1.0.2:
+ dependencies:
+ tweetnacl: 0.14.5
+
+ bech32@1.1.4: {}
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ blakejs@1.2.1: {}
+
+ bluebird@3.7.2: {}
+
+ bn.js@4.11.6: {}
+
+ bn.js@4.12.0: {}
+
+ bn.js@5.2.1: {}
+
+ body-parser@1.20.2:
+ 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.11.0
+ raw-body: 2.5.2
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ boxen@5.1.2:
+ dependencies:
+ ansi-align: 3.0.1
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ cli-boxes: 2.2.1
+ string-width: 4.2.3
+ type-fest: 0.20.2
+ widest-line: 3.1.0
+ wrap-ansi: 7.0.0
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ brorand@1.1.0: {}
+
+ browser-stdout@1.3.1: {}
+
+ browserify-aes@1.2.0:
+ dependencies:
+ buffer-xor: 1.0.3
+ cipher-base: 1.0.4
+ create-hash: 1.2.0
+ evp_bytestokey: 1.0.3
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ browserslist@4.23.3:
+ dependencies:
+ caniuse-lite: 1.0.30001653
+ electron-to-chromium: 1.5.13
+ node-releases: 2.0.18
+ update-browserslist-db: 1.1.0(browserslist@4.23.3)
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ bs58@5.0.0:
+ dependencies:
+ base-x: 4.0.0
+
+ bs58@6.0.0:
+ dependencies:
+ base-x: 5.0.0
+
+ bs58check@2.1.2:
+ dependencies:
+ bs58: 4.0.1
+ create-hash: 1.2.0
+ safe-buffer: 5.2.1
+
+ buffer-from@1.1.2: {}
+
+ buffer-to-arraybuffer@0.0.5: {}
+
+ buffer-xor@1.0.3: {}
+
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+
+ bufio@1.2.1: {}
+
+ bytes@3.1.2: {}
+
+ cacheable-lookup@5.0.4: {}
+
+ cacheable-lookup@6.1.0: {}
+
+ cacheable-lookup@7.0.0: {}
+
+ cacheable-request@10.2.14:
+ dependencies:
+ '@types/http-cache-semantics': 4.0.4
+ get-stream: 6.0.1
+ http-cache-semantics: 4.1.1
+ keyv: 4.5.4
+ mimic-response: 4.0.0
+ normalize-url: 8.0.1
+ responselike: 3.0.0
+
+ cacheable-request@7.0.4:
+ dependencies:
+ clone-response: 1.0.3
+ get-stream: 5.2.0
+ http-cache-semantics: 4.1.1
+ keyv: 4.5.4
+ lowercase-keys: 2.0.0
+ normalize-url: 6.1.0
+ responselike: 2.0.1
+
+ call-bind@1.0.7:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+
+ callsites@3.1.0: {}
+
+ camelcase@6.3.0: {}
+
+ caniuse-lite@1.0.30001653: {}
+
+ caseless@0.12.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@2.4.2:
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chownr@1.1.4: {}
+
+ ci-info@2.0.0: {}
+
+ cids@0.7.5:
+ dependencies:
+ buffer: 5.7.1
+ class-is: 1.1.0
+ multibase: 0.6.1
+ multicodec: 1.0.4
+ multihashes: 0.4.21
+
+ cipher-base@1.0.4:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ class-is@1.1.0: {}
+
+ clean-stack@2.2.0: {}
+
+ cli-boxes@2.2.1: {}
+
+ cli-cursor@3.1.0:
+ dependencies:
+ restore-cursor: 3.1.0
+
+ cli-table3@0.6.5:
+ dependencies:
+ string-width: 4.2.3
+ optionalDependencies:
+ '@colors/colors': 1.5.0
+
+ cli-truncate@2.1.0:
+ dependencies:
+ slice-ansi: 3.0.0
+ string-width: 4.2.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clone-response@1.0.3:
+ dependencies:
+ mimic-response: 1.0.1
+
+ code-excerpt@3.0.0:
+ dependencies:
+ convert-to-spaces: 1.0.2
+
+ color-convert@1.9.3:
+ dependencies:
+ color-name: 1.1.3
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.3: {}
+
+ color-name@1.1.4: {}
+
+ color-string@1.9.1:
+ dependencies:
+ color-name: 1.1.4
+ simple-swizzle: 0.2.2
+
+ color@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+ color-string: 1.9.1
+
+ colorspace@1.1.4:
+ dependencies:
+ color: 3.2.1
+ text-hex: 1.0.0
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ command-exists@1.2.9: {}
+
+ commander@10.0.1: {}
+
+ commander@8.3.0: {}
+
+ concat-map@0.0.1: {}
+
+ config-chain@1.1.13:
+ dependencies:
+ ini: 1.3.8
+ proto-list: 1.2.4
+
+ content-disposition@0.5.4:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ content-hash@2.5.2:
+ dependencies:
+ cids: 0.7.5
+ multicodec: 0.5.7
+ multihashes: 0.4.21
+
+ content-type@1.0.5: {}
+
+ convert-source-map@2.0.0: {}
+
+ convert-to-spaces@1.0.2: {}
+
+ cookie-signature@1.0.6: {}
+
+ cookie@0.4.2: {}
+
+ cookie@0.6.0: {}
+
+ core-util-is@1.0.2: {}
+
+ cors@2.8.5:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+
+ cosmiconfig@8.3.6(typescript@5.5.4):
+ dependencies:
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ optionalDependencies:
+ typescript: 5.5.4
+
+ crc-32@1.2.2: {}
+
+ create-hash@1.2.0:
+ dependencies:
+ cipher-base: 1.0.4
+ inherits: 2.0.4
+ md5.js: 1.3.5
+ ripemd160: 2.0.2
+ sha.js: 2.4.11
+
+ create-hmac@1.1.7:
+ dependencies:
+ cipher-base: 1.0.4
+ create-hash: 1.2.0
+ inherits: 2.0.4
+ ripemd160: 2.0.2
+ safe-buffer: 5.2.1
+ sha.js: 2.4.11
+
+ create-require@1.1.1: {}
+
+ cross-fetch@4.0.0:
+ dependencies:
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ cross-spawn@7.0.3:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ d@1.0.2:
+ dependencies:
+ es5-ext: 0.10.64
+ type: 2.7.3
+
+ dashdash@1.14.1:
+ dependencies:
+ assert-plus: 1.0.0
+
+ data-view-buffer@1.0.1:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+
+ data-view-byte-length@1.0.1:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+
+ data-view-byte-offset@1.0.0:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
+ debug@3.2.7:
+ dependencies:
+ ms: 2.1.3
+
+ debug@4.3.6(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ decode-uri-component@0.2.2: {}
+
+ decompress-response@3.3.0:
+ dependencies:
+ mimic-response: 1.0.1
+
+ decompress-response@6.0.0:
+ dependencies:
+ mimic-response: 3.1.0
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ deep-extend@0.6.0: {}
+
+ deep-is@0.1.4: {}
+
+ defer-to-connect@2.0.1: {}
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ delayed-stream@1.0.0: {}
+
+ depd@2.0.0: {}
+
+ destroy@1.2.0: {}
+
+ detect-indent@7.0.1: {}
+
+ detect-newline@4.0.1: {}
+
+ diff@4.0.2: {}
+
+ diff@5.2.0: {}
+
+ dir-glob@3.0.1:
+ dependencies:
+ path-type: 4.0.0
+
+ doctrine@2.1.0:
+ dependencies:
+ esutils: 2.0.3
+
+ doctrine@3.0.0:
+ dependencies:
+ esutils: 2.0.3
+
+ dom-walk@0.1.2: {}
+
+ dotenv@16.4.5: {}
+
+ ds-test@https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0: {}
+
+ ecc-jsbn@0.1.2:
+ dependencies:
+ jsbn: 0.1.1
+ safer-buffer: 2.1.2
+
+ ee-first@1.1.1: {}
+
+ electron-to-chromium@1.5.13: {}
+
+ elliptic@6.5.4:
+ dependencies:
+ bn.js: 4.12.0
+ brorand: 1.1.0
+ hash.js: 1.1.7
+ hmac-drbg: 1.0.1
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ elliptic@6.5.7:
+ dependencies:
+ bn.js: 4.12.0
+ brorand: 1.1.0
+ hash.js: 1.1.7
+ hmac-drbg: 1.0.1
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ emoji-regex@8.0.0: {}
+
+ enabled@2.0.0: {}
+
+ encode-utf8@1.0.3: {}
+
+ encodeurl@1.0.2: {}
+
+ end-of-stream@1.4.4:
+ dependencies:
+ once: 1.4.0
+
+ enhanced-resolve@5.17.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.2.1
+
+ enquirer@2.4.1:
+ dependencies:
+ ansi-colors: 4.1.3
+ strip-ansi: 6.0.1
+
+ env-paths@2.2.1: {}
+
+ error-ex@1.3.2:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ es-abstract@1.23.3:
+ 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.2
+ object-keys: 1.1.1
+ object.assign: 4.1.5
+ regexp.prototype.flags: 1.5.2
+ 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:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ es-errors@1.3.0: {}
+
+ es-object-atoms@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.0.3:
+ dependencies:
+ get-intrinsic: 1.2.4
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ es-shim-unscopables@1.0.2:
+ dependencies:
+ hasown: 2.0.2
+
+ es-to-primitive@1.2.1:
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.0.5
+ is-symbol: 1.0.4
+
+ es5-ext@0.10.64:
+ dependencies:
+ es6-iterator: 2.0.3
+ es6-symbol: 3.1.4
+ esniff: 2.0.1
+ next-tick: 1.1.0
+
+ es6-iterator@2.0.3:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ es6-symbol: 3.1.4
+
+ es6-promise@4.2.8: {}
+
+ es6-symbol@3.1.4:
+ dependencies:
+ d: 1.0.2
+ ext: 1.7.0
+
+ escalade@3.1.2: {}
+
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ escape-string-regexp@2.0.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eslint-config-prettier@9.1.0(eslint@8.57.0):
+ dependencies:
+ eslint: 8.57.0
+
+ eslint-import-resolver-node@0.3.9:
+ dependencies:
+ debug: 3.2.7
+ is-core-module: 2.15.1
+ resolve: 1.22.8
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0):
+ dependencies:
+ '@nolyfill/is-core-module': 1.0.39
+ debug: 4.3.6(supports-color@8.1.1)
+ enhanced-resolve: 5.17.1
+ eslint: 8.57.0
+ eslint-module-utils: 2.8.2(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)
+ fast-glob: 3.3.2
+ get-tsconfig: 4.7.6
+ is-bun-module: 1.1.0
+ is-glob: 4.0.3
+ optionalDependencies:
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ transitivePeerDependencies:
+ - '@typescript-eslint/parser'
+ - eslint-import-resolver-node
+ - eslint-import-resolver-webpack
+ - supports-color
+
+ eslint-module-utils@2.8.2(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0):
+ dependencies:
+ debug: 3.2.7
+ optionalDependencies:
+ '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
+ eslint: 8.57.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-plugin-autofix@2.1.0(eslint@8.57.0):
+ dependencies:
+ eslint: 8.57.0
+ eslint-rule-composer: 0.3.0
+ espree: 9.6.1
+ esutils: 2.0.3
+ lodash: 4.17.21
+ string-similarity: 4.0.4
+
+ eslint-plugin-compat@4.2.0(eslint@8.57.0):
+ dependencies:
+ '@mdn/browser-compat-data': 5.5.49
+ ast-metadata-inferer: 0.8.0
+ browserslist: 4.23.3
+ caniuse-lite: 1.0.30001653
+ eslint: 8.57.0
+ find-up: 5.0.0
+ lodash.memoize: 4.1.2
+ semver: 7.6.3
+
+ eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
+ dependencies:
+ 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: 8.57.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-module-utils: 2.8.2(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.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
+ tsconfig-paths: 3.15.0
+ optionalDependencies:
+ '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
+ transitivePeerDependencies:
+ - eslint-import-resolver-typescript
+ - eslint-import-resolver-webpack
+ - supports-color
+
+ eslint-plugin-jest-extended@2.0.3(eslint@8.57.0)(typescript@5.5.4):
+ dependencies:
+ '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4)
+ eslint: 8.57.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3):
+ dependencies:
+ eslint: 8.57.0
+ prettier: 3.3.3
+ prettier-linter-helpers: 1.0.0
+ synckit: 0.9.1
+ optionalDependencies:
+ eslint-config-prettier: 9.1.0(eslint@8.57.0)
+
+ eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0):
+ dependencies:
+ eslint: 8.57.0
+ eslint-rule-composer: 0.3.0
+ optionalDependencies:
+ '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
+
+ eslint-rule-composer@0.3.0: {}
+
+ eslint-scope@5.1.1:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+
+ eslint-scope@7.2.2:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint@8.57.0:
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@eslint-community/regexpp': 4.11.0
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.57.0
+ '@humanwhocodes/config-array': 0.11.14
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
+ '@ungap/structured-clone': 1.2.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.6(supports-color@8.1.1)
+ 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.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.24.0
+ graphemer: 1.4.0
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ 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.4
+ strip-ansi: 6.0.1
+ text-table: 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ esniff@2.0.1:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ event-emitter: 0.3.5
+ type: 2.7.3
+
+ espree@9.6.1:
+ dependencies:
+ acorn: 8.12.1
+ acorn-jsx: 5.3.2(acorn@8.12.1)
+ eslint-visitor-keys: 3.4.3
+
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@4.3.0: {}
+
+ estraverse@5.3.0: {}
+
+ esutils@2.0.3: {}
+
+ etag@1.8.1: {}
+
+ eth-ens-namehash@2.0.8:
+ dependencies:
+ idna-uts46-hx: 2.3.1
+ js-sha3: 0.5.7
+
+ eth-lib@0.1.29(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ bn.js: 4.12.0
+ elliptic: 6.5.7
+ nano-json-stream-parser: 0.1.2
+ servify: 0.1.12
+ ws: 3.3.3(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ xhr-request-promise: 0.1.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ eth-lib@0.2.8:
+ dependencies:
+ bn.js: 4.12.0
+ elliptic: 6.5.7
+ xhr-request-promise: 0.1.3
+
+ ethereum-bloom-filters@1.2.0:
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ ethereum-cryptography@0.1.3:
+ dependencies:
+ '@types/pbkdf2': 3.1.2
+ '@types/secp256k1': 4.0.6
+ blakejs: 1.2.1
+ 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.4
+ pbkdf2: 3.1.2
+ randombytes: 2.1.0
+ safe-buffer: 5.2.1
+ scrypt-js: 3.0.1
+ secp256k1: 4.0.3
+ setimmediate: 1.0.5
+
+ ethereum-cryptography@1.2.0:
+ dependencies:
+ '@noble/hashes': 1.2.0
+ '@noble/secp256k1': 1.7.1
+ '@scure/bip32': 1.1.5
+ '@scure/bip39': 1.1.1
+
+ ethereum-cryptography@2.2.1:
+ 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:
+ dependencies:
+ bn.js: 4.12.0
+ ethereumjs-util: 6.2.1
+
+ ethereumjs-util@6.2.1:
+ dependencies:
+ '@types/bn.js': 4.11.6
+ bn.js: 4.12.0
+ create-hash: 1.2.0
+ elliptic: 6.5.7
+ ethereum-cryptography: 0.1.3
+ ethjs-util: 0.1.6
+ rlp: 2.2.7
+
+ ethereumjs-util@7.1.5:
+ dependencies:
+ '@types/bn.js': 5.1.5
+ bn.js: 5.2.1
+ create-hash: 1.2.0
+ ethereum-cryptography: 0.1.3
+ rlp: 2.2.7
+
+ ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ 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(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@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
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ ethjs-unit@0.1.6:
+ dependencies:
+ bn.js: 4.11.6
+ number-to-bn: 1.7.0
+
+ ethjs-util@0.1.6:
+ dependencies:
+ is-hex-prefixed: 1.0.0
+ strip-hex-prefix: 1.0.0
+
+ event-emitter@0.3.5:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+
+ eventemitter3@4.0.4: {}
+
+ evp_bytestokey@1.0.3:
+ dependencies:
+ md5.js: 1.3.5
+ safe-buffer: 5.2.1
+
+ exponential-backoff@3.1.1: {}
+
+ express@4.19.2:
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.2
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.6.0
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.2.0
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.1
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.7
+ proxy-addr: 2.0.7
+ qs: 6.11.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.18.0
+ serve-static: 1.15.0
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ ext@1.7.0:
+ dependencies:
+ type: 2.7.3
+
+ extend@3.0.2: {}
+
+ extsprintf@1.3.0: {}
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-diff@1.3.0: {}
+
+ fast-glob@3.3.2:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fast-uri@3.0.1: {}
+
+ fastq@1.17.1:
+ dependencies:
+ reusify: 1.0.4
+
+ fecha@4.2.3: {}
+
+ file-entry-cache@6.0.1:
+ dependencies:
+ flat-cache: 3.2.0
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ finalhandler@1.2.0:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ find-up@2.1.0:
+ dependencies:
+ locate-path: 2.0.0
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat-cache@3.2.0:
+ dependencies:
+ flatted: 3.3.1
+ keyv: 4.5.4
+ rimraf: 3.0.2
+
+ flat@5.0.2: {}
+
+ flatted@3.3.1: {}
+
+ fmix@0.1.0:
+ dependencies:
+ imul: 1.0.1
+
+ fn.name@1.1.0: {}
+
+ follow-redirects@1.15.6(debug@4.3.6):
+ optionalDependencies:
+ debug: 4.3.6(supports-color@8.1.1)
+
+ for-each@0.3.3:
+ dependencies:
+ is-callable: 1.2.7
+
+ forever-agent@0.6.1: {}
+
+ forge-std@1.1.2: {}
+
+ form-data-encoder@1.7.1: {}
+
+ form-data-encoder@2.1.4: {}
+
+ form-data@2.3.3:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
+ form-data@4.0.0:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
+ forwarded@0.2.0: {}
+
+ fp-ts@1.19.3: {}
+
+ fp-ts@2.16.9: {}
+
+ fresh@0.5.2: {}
+
+ fs-extra@10.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+
+ fs-extra@4.0.3:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+
+ fs-extra@7.0.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+
+ fs-minipass@1.2.7:
+ dependencies:
+ minipass: 2.9.0
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ function.prototype.name@1.1.6:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ functions-have-names: 1.2.3
+
+ functions-have-names@1.2.3: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ get-intrinsic@1.2.4:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+
+ get-stdin@9.0.0: {}
+
+ get-stream@5.2.0:
+ dependencies:
+ pump: 3.0.0
+
+ get-stream@6.0.1: {}
+
+ get-symbol-description@1.0.2:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+
+ get-tsconfig@4.7.6:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
+ getpass@0.1.7:
+ dependencies:
+ assert-plus: 1.0.0
+
+ git-hooks-list@3.1.0: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ global@4.4.0:
+ dependencies:
+ min-document: 2.19.0
+ process: 0.11.10
+
+ globals@11.12.0: {}
+
+ globals@13.24.0:
+ dependencies:
+ type-fest: 0.20.2
+
+ globalthis@1.0.4:
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.0.1
+
+ globby@11.1.0:
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ ignore: 5.3.2
+ merge2: 1.4.1
+ slash: 3.0.0
+
+ globby@13.2.2:
+ dependencies:
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ ignore: 5.3.2
+ merge2: 1.4.1
+ slash: 4.0.0
+
+ gopd@1.0.1:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ got@11.8.6:
+ dependencies:
+ '@sindresorhus/is': 4.6.0
+ '@szmarczak/http-timer': 4.0.6
+ '@types/cacheable-request': 6.0.3
+ '@types/responselike': 1.0.3
+ cacheable-lookup: 5.0.4
+ cacheable-request: 7.0.4
+ decompress-response: 6.0.0
+ http2-wrapper: 1.0.3
+ lowercase-keys: 2.0.0
+ p-cancelable: 2.1.1
+ responselike: 2.0.1
+
+ got@12.1.0:
+ dependencies:
+ '@sindresorhus/is': 4.6.0
+ '@szmarczak/http-timer': 5.0.1
+ '@types/cacheable-request': 6.0.3
+ '@types/responselike': 1.0.3
+ cacheable-lookup: 6.1.0
+ cacheable-request: 7.0.4
+ decompress-response: 6.0.0
+ form-data-encoder: 1.7.1
+ get-stream: 6.0.1
+ http2-wrapper: 2.2.1
+ lowercase-keys: 3.0.0
+ p-cancelable: 3.0.0
+ responselike: 2.0.1
+
+ got@12.6.1:
+ dependencies:
+ '@sindresorhus/is': 5.6.0
+ '@szmarczak/http-timer': 5.0.1
+ cacheable-lookup: 7.0.0
+ cacheable-request: 10.2.14
+ decompress-response: 6.0.0
+ form-data-encoder: 2.1.4
+ get-stream: 6.0.1
+ http2-wrapper: 2.2.1
+ lowercase-keys: 3.0.0
+ p-cancelable: 3.0.0
+ responselike: 3.0.0
+
+ graceful-fs@4.2.10: {}
+
+ graceful-fs@4.2.11: {}
+
+ gradient-string@1.2.0:
+ dependencies:
+ chalk: 2.4.2
+ tinygradient: 0.4.3
+
+ graphemer@1.4.0: {}
+
+ har-schema@2.0.0: {}
+
+ har-validator@5.1.5:
+ dependencies:
+ ajv: 6.12.6
+ har-schema: 2.0.0
+
+ hardhat-contract-sizer@2.10.0(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)):
+ dependencies:
+ chalk: 4.1.2
+ cli-table3: 0.6.5
+ hardhat: 2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)
+ strip-ansi: 6.0.1
+
+ hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ 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(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@ethersproject/solidity': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/wallet': 5.7.0
+ '@types/qs': 6.9.15
+ axios: 0.21.4(debug@4.3.6)
+ chalk: 4.1.2
+ chokidar: 3.6.0
+ debug: 4.3.6(supports-color@8.1.1)
+ enquirer: 2.4.1
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ form-data: 4.0.0
+ fs-extra: 10.1.0
+ match-all: 1.2.6
+ murmur-128: 0.2.1
+ qs: 6.13.0
+ zksync-ethers: 5.9.2(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10):
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@metamask/eth-sig-util': 4.0.1
+ '@nomicfoundation/edr': 0.5.2
+ '@nomicfoundation/ethereumjs-common': 4.0.4
+ '@nomicfoundation/ethereumjs-tx': 5.0.4
+ '@nomicfoundation/ethereumjs-util': 9.0.4
+ '@nomicfoundation/solidity-analyzer': 0.1.2
+ '@sentry/node': 5.30.0
+ '@types/bn.js': 5.1.5
+ '@types/lru-cache': 5.1.1
+ adm-zip: 0.4.16
+ aggregate-error: 3.1.0
+ ansi-escapes: 4.3.2
+ boxen: 5.1.2
+ chalk: 2.4.2
+ chokidar: 3.6.0
+ ci-info: 2.0.0
+ debug: 4.3.6(supports-color@8.1.1)
+ enquirer: 2.4.1
+ env-paths: 2.2.1
+ ethereum-cryptography: 1.2.0
+ 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.3.7
+ io-ts: 1.10.4
+ keccak: 3.0.4
+ lodash: 4.17.21
+ mnemonist: 0.38.5
+ mocha: 10.7.3
+ p-map: 4.0.0
+ raw-body: 2.5.2
+ resolve: 1.17.0
+ semver: 6.3.1
+ solc: 0.8.26(debug@4.3.6)
+ source-map-support: 0.5.21
+ stacktrace-parser: 0.1.10
+ tsort: 0.0.1
+ undici: 5.28.4
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ ts-node: 10.9.2(@types/node@18.18.14)(typescript@5.5.4)
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - bufferutil
+ - c-kzg
+ - supports-color
+ - utf-8-validate
+
+ has-bigints@1.0.2: {}
+
+ has-flag@3.0.0: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.0
+
+ has-proto@1.0.3: {}
+
+ has-symbols@1.0.3: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.0.3
+
+ hash-base@3.1.0:
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ safe-buffer: 5.2.1
+
+ hash.js@1.1.7:
+ dependencies:
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
+ hmac-drbg@1.0.1:
+ dependencies:
+ hash.js: 1.1.7
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ http-cache-semantics@4.1.1: {}
+
+ http-errors@2.0.0:
+ 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: {}
+
+ http-signature@1.2.0:
+ dependencies:
+ assert-plus: 1.0.0
+ jsprim: 1.4.2
+ sshpk: 1.18.0
+
+ http2-wrapper@1.0.3:
+ dependencies:
+ quick-lru: 5.1.1
+ resolve-alpn: 1.2.1
+
+ http2-wrapper@2.2.1:
+ dependencies:
+ quick-lru: 5.1.1
+ resolve-alpn: 1.2.1
+
+ https-proxy-agent@5.0.1:
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.3.6(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ idna-uts46-hx@2.3.1:
+ dependencies:
+ punycode: 2.1.0
+
+ ieee754@1.2.1: {}
+
+ ignore@5.3.2: {}
+
+ immutable@4.3.7: {}
+
+ import-fresh@3.3.0:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ imul@1.0.1: {}
+
+ imurmurhash@0.1.4: {}
+
+ indent-string@4.0.0: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ ini@1.3.8: {}
+
+ ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2):
+ dependencies:
+ gradient-string: 1.2.0
+ ink: 3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10)
+ prop-types: 15.8.1
+ react: 17.0.2
+ strip-ansi: 6.0.1
+
+ ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2):
+ dependencies:
+ ink: 3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10)
+ object-hash: 2.2.0
+ react: 17.0.2
+
+ ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10):
+ dependencies:
+ ansi-escapes: 4.3.2
+ auto-bind: 4.0.0
+ chalk: 4.1.2
+ cli-boxes: 2.2.1
+ 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.21
+ patch-console: 1.0.0
+ react: 17.0.2
+ react-devtools-core: 4.28.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ react-reconciler: 0.26.2(react@17.0.2)
+ scheduler: 0.20.2
+ signal-exit: 3.0.7
+ slice-ansi: 3.0.0
+ stack-utils: 2.0.6
+ string-width: 4.2.3
+ type-fest: 0.12.0
+ widest-line: 3.1.0
+ wrap-ansi: 6.2.0
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ yoga-layout-prebuilt: 1.10.0
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ internal-slot@1.0.7:
+ dependencies:
+ es-errors: 1.3.0
+ hasown: 2.0.2
+ side-channel: 1.0.6
+
+ io-ts@1.10.4:
+ dependencies:
+ fp-ts: 1.19.3
+
+ ipaddr.js@1.9.1: {}
+
+ is-arguments@1.1.1:
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+
+ is-array-buffer@3.0.4:
+ dependencies:
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
+
+ is-arrayish@0.2.1: {}
+
+ is-arrayish@0.3.2: {}
+
+ is-bigint@1.0.4:
+ dependencies:
+ has-bigints: 1.0.2
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-boolean-object@1.1.2:
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+
+ is-bun-module@1.1.0:
+ dependencies:
+ semver: 7.6.3
+
+ is-callable@1.2.7: {}
+
+ is-ci@2.0.0:
+ dependencies:
+ ci-info: 2.0.0
+
+ is-core-module@2.15.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-data-view@1.0.1:
+ dependencies:
+ is-typed-array: 1.1.13
+
+ is-date-object@1.0.5:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-function@1.0.2: {}
+
+ is-generator-function@1.0.10:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-hex-prefixed@1.0.0: {}
+
+ is-negative-zero@2.0.3: {}
+
+ is-number-object@1.0.7:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-number@7.0.0: {}
+
+ is-path-inside@3.0.3: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-plain-obj@4.1.0: {}
+
+ is-regex@1.1.4:
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+
+ is-shared-array-buffer@1.0.3:
+ dependencies:
+ call-bind: 1.0.7
+
+ is-stream@2.0.1: {}
+
+ is-string@1.0.7:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-symbol@1.0.4:
+ dependencies:
+ has-symbols: 1.0.3
+
+ is-typed-array@1.1.13:
+ dependencies:
+ which-typed-array: 1.1.15
+
+ is-typedarray@1.0.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ is-weakref@1.0.2:
+ dependencies:
+ call-bind: 1.0.7
+
+ isarray@2.0.5: {}
+
+ isexe@2.0.0: {}
+
+ isstream@0.1.2: {}
+
+ js-sha3@0.5.7: {}
+
+ js-sha3@0.8.0: {}
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ jsbn@0.1.1: {}
+
+ jsesc@2.5.2: {}
+
+ json-buffer@3.0.1: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-schema-traverse@1.0.0: {}
+
+ json-schema@0.4.0: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+
+ json5@2.2.3: {}
+
+ jsonfile@4.0.0:
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ jsonfile@6.1.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ jsprim@1.4.2:
+ dependencies:
+ assert-plus: 1.0.0
+ extsprintf: 1.3.0
+ json-schema: 0.4.0
+ verror: 1.10.0
+
+ keccak@3.0.4:
+ dependencies:
+ node-addon-api: 2.0.2
+ node-gyp-build: 4.8.1
+ readable-stream: 3.6.2
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ kleur@3.0.3: {}
+
+ kuler@2.0.0: {}
+
+ latest-version@7.0.0:
+ dependencies:
+ package-json: 8.1.1
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ lines-and-columns@1.2.4: {}
+
+ locate-path@2.0.0:
+ dependencies:
+ p-locate: 2.0.0
+ path-exists: 3.0.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash.isequal@4.5.0: {}
+
+ lodash.memoize@4.1.2: {}
+
+ lodash.merge@4.6.2: {}
+
+ lodash.truncate@4.4.2: {}
+
+ lodash@4.17.21: {}
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ logform@2.6.1:
+ dependencies:
+ '@colors/colors': 1.6.0
+ '@types/triple-beam': 1.3.5
+ fecha: 4.2.3
+ ms: 2.1.3
+ safe-stable-stringify: 2.5.0
+ triple-beam: 1.4.1
+
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ lowercase-keys@2.0.0: {}
+
+ lowercase-keys@3.0.0: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lru_map@0.3.3: {}
+
+ make-error@1.3.6: {}
+
+ map-age-cleaner@0.1.3:
+ dependencies:
+ p-defer: 1.0.0
+
+ match-all@1.2.6: {}
+
+ md5.js@1.3.5:
+ dependencies:
+ hash-base: 3.1.0
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ media-typer@0.3.0: {}
+
+ memorystream@0.3.1: {}
+
+ merge-descriptors@1.0.1: {}
+
+ merge2@1.4.1: {}
+
+ methods@1.1.2: {}
+
+ micro-ftch@0.3.1: {}
+
+ micro-memoize@4.1.2: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime@1.6.0: {}
+
+ mimic-fn@2.1.0: {}
+
+ mimic-fn@3.1.0: {}
+
+ mimic-response@1.0.1: {}
+
+ mimic-response@3.1.0: {}
+
+ mimic-response@4.0.0: {}
+
+ min-document@2.19.0:
+ dependencies:
+ dom-walk: 0.1.2
+
+ minimalistic-assert@1.0.1: {}
+
+ minimalistic-crypto-utils@1.0.1: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ minipass@2.9.0:
+ dependencies:
+ safe-buffer: 5.2.1
+ yallist: 3.1.1
+
+ minizlib@1.3.3:
+ dependencies:
+ minipass: 2.9.0
+
+ mkdirp-promise@5.0.1:
+ dependencies:
+ mkdirp: 3.0.1
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mkdirp@3.0.1: {}
+
+ mnemonist@0.38.5:
+ dependencies:
+ obliterator: 2.0.4
+
+ mocha@10.7.3:
+ dependencies:
+ ansi-colors: 4.1.3
+ browser-stdout: 1.3.1
+ chokidar: 3.6.0
+ debug: 4.3.6(supports-color@8.1.1)
+ 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.14.0: {}
+
+ ms@2.0.0: {}
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ multibase@0.6.1:
+ dependencies:
+ base-x: 3.0.10
+ buffer: 5.7.1
+
+ multibase@0.7.0:
+ dependencies:
+ base-x: 3.0.10
+ buffer: 5.7.1
+
+ multicodec@0.5.7:
+ dependencies:
+ varint: 5.0.2
+
+ multicodec@1.0.4:
+ dependencies:
+ buffer: 5.7.1
+ varint: 5.0.2
+
+ multihashes@0.4.21:
+ dependencies:
+ buffer: 5.7.1
+ multibase: 0.7.0
+ varint: 5.0.2
+
+ murmur-128@0.2.1:
+ dependencies:
+ encode-utf8: 1.0.3
+ fmix: 0.1.0
+ imul: 1.0.1
+
+ nano-json-stream-parser@0.1.2: {}
+
+ natural-compare@1.4.0: {}
+
+ negotiator@0.6.3: {}
+
+ next-tick@1.1.0: {}
+
+ node-addon-api@2.0.2: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.1: {}
+
+ node-releases@2.0.18: {}
+
+ normalize-path@3.0.0: {}
+
+ normalize-url@6.1.0: {}
+
+ normalize-url@8.0.1: {}
+
+ number-to-bn@1.7.0:
+ dependencies:
+ bn.js: 4.11.6
+ strip-hex-prefix: 1.0.0
+
+ oauth-sign@0.9.0: {}
+
+ object-assign@4.1.1: {}
+
+ object-hash@2.2.0: {}
+
+ object-inspect@1.13.2: {}
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.5:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+
+ object.fromentries@2.0.8:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
+
+ object.groupby@1.0.3:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+
+ object.values@1.2.0:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
+
+ obliterator@2.0.4: {}
+
+ oboe@2.1.5:
+ dependencies:
+ http-https: 1.0.0
+
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ one-time@1.0.0:
+ dependencies:
+ fn.name: 1.1.0
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ os-tmpdir@1.0.2: {}
+
+ p-cancelable@2.1.1: {}
+
+ p-cancelable@3.0.0: {}
+
+ p-defer@1.0.0: {}
+
+ p-limit@1.3.0:
+ dependencies:
+ p-try: 1.0.0
+
+ p-limit@2.3.0:
+ dependencies:
+ p-try: 2.2.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@2.0.0:
+ dependencies:
+ p-limit: 1.3.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ p-map@4.0.0:
+ dependencies:
+ aggregate-error: 3.1.0
+
+ p-memoize@4.0.4:
+ dependencies:
+ map-age-cleaner: 0.1.3
+ mimic-fn: 3.1.0
+ p-settle: 4.1.1
+
+ p-reflect@2.1.0: {}
+
+ p-settle@4.1.1:
+ dependencies:
+ p-limit: 2.3.0
+ p-reflect: 2.1.0
+
+ p-try@1.0.0: {}
+
+ p-try@2.2.0: {}
+
+ package-json@8.1.1:
+ dependencies:
+ got: 12.6.1
+ registry-auth-token: 5.0.2
+ registry-url: 6.0.1
+ semver: 7.6.3
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-headers@2.0.5: {}
+
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.24.7
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ parseurl@1.3.3: {}
+
+ patch-console@1.0.0: {}
+
+ path-exists@3.0.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ path-to-regexp@0.1.7: {}
+
+ path-type@4.0.0: {}
+
+ pathval@1.1.1: {}
+
+ pbkdf2@3.1.2:
+ dependencies:
+ create-hash: 1.2.0
+ create-hmac: 1.1.7
+ ripemd160: 2.0.2
+ safe-buffer: 5.2.1
+ sha.js: 2.4.11
+
+ performance-now@2.1.0: {}
+
+ picocolors@1.0.1: {}
+
+ picomatch@2.3.1: {}
+
+ pluralize@8.0.0: {}
+
+ possible-typed-array-names@1.0.0: {}
+
+ prelude-ls@1.2.1: {}
+
+ prettier-linter-helpers@1.0.0:
+ dependencies:
+ fast-diff: 1.3.0
+
+ prettier-plugin-packagejson@2.5.2(prettier@3.3.3):
+ dependencies:
+ sort-package-json: 2.10.1
+ synckit: 0.9.1
+ optionalDependencies:
+ prettier: 3.3.3
+
+ prettier-plugin-solidity@1.4.1(prettier@3.3.3):
+ dependencies:
+ '@solidity-parser/parser': 0.18.0
+ prettier: 3.3.3
+ semver: 7.6.3
+
+ prettier@2.8.8:
+ optional: true
+
+ prettier@3.3.3: {}
+
+ process@0.11.10: {}
+
+ prompts@2.4.2:
+ dependencies:
+ kleur: 3.0.3
+ sisteransi: 1.0.5
+
+ prop-types@15.8.1:
+ dependencies:
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+ react-is: 16.13.1
+
+ proto-list@1.2.4: {}
+
+ proxy-addr@2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+
+ psl@1.9.0: {}
+
+ pump@3.0.0:
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+
+ punycode@2.1.0: {}
+
+ punycode@2.3.1: {}
+
+ qs@6.11.0:
+ dependencies:
+ side-channel: 1.0.6
+
+ qs@6.13.0:
+ dependencies:
+ side-channel: 1.0.6
+
+ qs@6.5.3: {}
+
+ query-string@5.1.1:
+ dependencies:
+ decode-uri-component: 0.2.2
+ object-assign: 4.1.1
+ strict-uri-encode: 1.1.0
+
+ queue-microtask@1.2.3: {}
+
+ quick-lru@5.1.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ range-parser@1.2.1: {}
+
+ raw-body@2.5.2:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+
+ rc@1.2.8:
+ dependencies:
+ deep-extend: 0.6.0
+ ini: 1.3.8
+ minimist: 1.2.8
+ strip-json-comments: 2.0.1
+
+ react-devtools-core@4.28.5(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ shell-quote: 1.8.1
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ react-is@16.13.1: {}
+
+ react-reconciler@0.26.2(react@17.0.2):
+ dependencies:
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+ react: 17.0.2
+ scheduler: 0.20.2
+
+ react@17.0.2:
+ dependencies:
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regexp.prototype.flags@1.5.2:
+ 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.2:
+ dependencies:
+ '@pnpm/npm-conf': 2.3.1
+
+ registry-url@6.0.1:
+ dependencies:
+ rc: 1.2.8
+
+ request@2.88.2:
+ dependencies:
+ aws-sign2: 0.7.0
+ aws4: 1.13.1
+ caseless: 0.12.0
+ combined-stream: 1.0.8
+ extend: 3.0.2
+ forever-agent: 0.6.1
+ form-data: 2.3.3
+ har-validator: 5.1.5
+ http-signature: 1.2.0
+ is-typedarray: 1.0.0
+ isstream: 0.1.2
+ json-stringify-safe: 5.0.1
+ mime-types: 2.1.35
+ oauth-sign: 0.9.0
+ performance-now: 2.1.0
+ qs: 6.5.3
+ safe-buffer: 5.2.1
+ tough-cookie: 2.5.0
+ tunnel-agent: 0.6.0
+ uuid: 3.4.0
+
+ require-directory@2.1.1: {}
+
+ require-from-string@2.0.2: {}
+
+ resolve-alpn@1.2.1: {}
+
+ resolve-from@4.0.0: {}
+
+ resolve-pkg-maps@1.0.0: {}
+
+ resolve@1.17.0:
+ dependencies:
+ path-parse: 1.0.7
+
+ resolve@1.22.8:
+ dependencies:
+ is-core-module: 2.15.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ responselike@2.0.1:
+ dependencies:
+ lowercase-keys: 2.0.0
+
+ responselike@3.0.0:
+ dependencies:
+ lowercase-keys: 3.0.0
+
+ restore-cursor@3.1.0:
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+
+ reusify@1.0.4: {}
+
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+
+ ripemd160@2.0.2:
+ dependencies:
+ hash-base: 3.1.0
+ inherits: 2.0.4
+
+ rlp@2.2.7:
+ dependencies:
+ bn.js: 5.2.1
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ safe-array-concat@1.1.2:
+ dependencies:
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
+ has-symbols: 1.0.3
+ isarray: 2.0.5
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
+ safe-regex-test@1.0.3:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-regex: 1.1.4
+
+ safe-stable-stringify@2.5.0: {}
+
+ safer-buffer@2.1.2: {}
+
+ scheduler@0.20.2:
+ dependencies:
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+
+ scrypt-js@3.0.1: {}
+
+ secp256k1@4.0.3:
+ dependencies:
+ elliptic: 6.5.7
+ node-addon-api: 2.0.2
+ node-gyp-build: 4.8.1
+
+ semver@5.7.2: {}
+
+ semver@6.3.1: {}
+
+ semver@7.6.3: {}
+
+ send@0.18.0:
+ 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
+ transitivePeerDependencies:
+ - supports-color
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ serve-static@1.15.0:
+ dependencies:
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.18.0
+ transitivePeerDependencies:
+ - supports-color
+
+ servify@0.1.12:
+ dependencies:
+ body-parser: 1.20.2
+ cors: 2.8.5
+ express: 4.19.2
+ request: 2.88.2
+ xhr: 2.6.0
+ transitivePeerDependencies:
+ - supports-color
+
+ set-function-length@1.2.2:
+ 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:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+
+ setimmediate@1.0.5: {}
+
+ setprototypeof@1.2.0: {}
+
+ sha.js@2.4.11:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ shell-quote@1.8.1: {}
+
+ side-channel@1.0.6:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ object-inspect: 1.13.2
+
+ signal-exit@3.0.7: {}
+
+ simple-concat@1.0.1: {}
+
+ simple-get@2.8.2:
+ dependencies:
+ decompress-response: 3.3.0
+ once: 1.4.0
+ simple-concat: 1.0.1
+
+ simple-swizzle@0.2.2:
+ dependencies:
+ is-arrayish: 0.3.2
+
+ sisteransi@1.0.5: {}
+
+ slash@3.0.0: {}
+
+ slash@4.0.0: {}
+
+ slice-ansi@3.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+
+ slice-ansi@4.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+
+ solc@0.8.26(debug@4.3.6):
+ dependencies:
+ command-exists: 1.2.9
+ commander: 8.3.0
+ follow-redirects: 1.15.6(debug@4.3.6)
+ js-sha3: 0.8.0
+ memorystream: 0.3.1
+ semver: 5.7.2
+ tmp: 0.0.33
+ transitivePeerDependencies:
+ - debug
+
+ solhint@4.5.4(typescript@5.5.4):
+ dependencies:
+ '@solidity-parser/parser': 0.18.0
+ ajv: 6.12.6
+ antlr4: 4.13.2
+ ast-parents: 0.0.1
+ chalk: 4.1.2
+ commander: 10.0.1
+ cosmiconfig: 8.3.6(typescript@5.5.4)
+ fast-diff: 1.3.0
+ glob: 8.1.0
+ ignore: 5.3.2
+ js-yaml: 4.1.0
+ latest-version: 7.0.0
+ lodash: 4.17.21
+ pluralize: 8.0.0
+ semver: 7.6.3
+ strip-ansi: 6.0.1
+ table: 6.8.2
+ text-table: 0.2.0
+ optionalDependencies:
+ prettier: 2.8.8
+ transitivePeerDependencies:
+ - typescript
+
+ solidity-bytes-utils@0.8.2:
+ dependencies:
+ ds-test: https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0
+ forge-std: 1.1.2
+
+ sort-object-keys@1.1.3: {}
+
+ sort-package-json@2.10.1:
+ dependencies:
+ detect-indent: 7.0.1
+ detect-newline: 4.0.1
+ get-stdin: 9.0.0
+ git-hooks-list: 3.1.0
+ globby: 13.2.2
+ is-plain-obj: 4.1.0
+ semver: 7.6.3
+ sort-object-keys: 1.1.3
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ sshpk@1.18.0:
+ dependencies:
+ asn1: 0.2.6
+ assert-plus: 1.0.0
+ bcrypt-pbkdf: 1.0.2
+ dashdash: 1.14.1
+ ecc-jsbn: 0.1.2
+ getpass: 0.1.7
+ jsbn: 0.1.1
+ safer-buffer: 2.1.2
+ tweetnacl: 0.14.5
+
+ stack-trace@0.0.10: {}
+
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
+ stacktrace-parser@0.1.10:
+ dependencies:
+ type-fest: 0.7.1
+
+ statuses@2.0.1: {}
+
+ strict-uri-encode@1.1.0: {}
+
+ string-similarity@4.0.4: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string.prototype.trim@1.2.9:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
+
+ string.prototype.trimend@1.0.8:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
+
+ string.prototype.trimstart@1.0.8:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0: {}
+
+ strip-hex-prefix@1.0.0:
+ dependencies:
+ is-hex-prefixed: 1.0.0
+
+ strip-json-comments@2.0.1: {}
+
+ strip-json-comments@3.1.1: {}
+
+ supports-color@5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ swarm-js@0.1.42(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ bluebird: 3.7.2
+ buffer: 5.7.1
+ eth-lib: 0.1.29(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ fs-extra: 4.0.3
+ got: 11.8.6
+ mime-types: 2.1.35
+ mkdirp-promise: 5.0.1
+ mock-fs: 4.14.0
+ setimmediate: 1.0.5
+ tar: 4.4.19
+ xhr-request: 1.1.0
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ synckit@0.9.1:
+ dependencies:
+ '@pkgr/core': 0.1.1
+ tslib: 2.7.0
+
+ table@6.8.2:
+ dependencies:
+ ajv: 8.17.1
+ lodash.truncate: 4.4.2
+ slice-ansi: 4.0.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ tapable@2.2.1: {}
+
+ tar@4.4.19:
+ dependencies:
+ chownr: 1.1.4
+ fs-minipass: 1.2.7
+ minipass: 2.9.0
+ minizlib: 1.3.3
+ mkdirp: 0.5.6
+ safe-buffer: 5.2.1
+ yallist: 3.1.1
+
+ text-hex@1.0.0: {}
+
+ text-table@0.2.0: {}
+
+ timed-out@4.0.1: {}
+
+ tiny-invariant@1.3.3: {}
+
+ tinycolor2@1.6.0: {}
+
+ tinygradient@0.4.3:
+ dependencies:
+ '@types/tinycolor2': 1.4.6
+ tinycolor2: 1.6.0
+
+ tmp@0.0.33:
+ dependencies:
+ os-tmpdir: 1.0.2
+
+ to-fast-properties@2.0.0: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toidentifier@1.0.1: {}
+
+ tough-cookie@2.5.0:
+ dependencies:
+ psl: 1.9.0
+ punycode: 2.3.1
+
+ tr46@0.0.3: {}
+
+ triple-beam@1.4.1: {}
+
+ ts-api-utils@1.3.0(typescript@5.5.4):
+ dependencies:
+ typescript: 5.5.4
+
+ ts-node@10.9.2(@types/node@18.18.14)(typescript@5.5.4):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.11
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 18.18.14
+ acorn: 8.12.1
+ acorn-walk: 8.3.3
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.5.4
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+
+ tslib@1.14.1: {}
+
+ tslib@2.7.0: {}
+
+ tsort@0.0.1: {}
+
+ tsutils@3.21.0(typescript@5.5.4):
+ dependencies:
+ tslib: 1.14.1
+ typescript: 5.5.4
+
+ tunnel-agent@0.6.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ tweetnacl-util@0.15.1: {}
+
+ tweetnacl@0.14.5: {}
+
+ tweetnacl@1.0.3: {}
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ type-detect@4.1.0: {}
+
+ type-fest@0.12.0: {}
+
+ type-fest@0.20.2: {}
+
+ type-fest@0.21.3: {}
+
+ type-fest@0.7.1: {}
+
+ type-is@1.6.18:
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ type@2.7.3: {}
+
+ typed-array-buffer@1.0.2:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-typed-array: 1.1.13
+
+ typed-array-byte-length@1.0.1:
+ 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:
+ 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
+
+ typed-array-length@1.0.6:
+ 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
+ possible-typed-array-names: 1.0.0
+
+ typedarray-to-buffer@3.1.5:
+ dependencies:
+ is-typedarray: 1.0.0
+
+ typescript@5.5.4: {}
+
+ ultron@1.1.1: {}
+
+ unbox-primitive@1.0.2:
+ dependencies:
+ call-bind: 1.0.7
+ has-bigints: 1.0.2
+ has-symbols: 1.0.3
+ which-boxed-primitive: 1.0.2
+
+ undici-types@5.26.5: {}
+
+ undici@5.28.4:
+ dependencies:
+ '@fastify/busboy': 2.1.1
+
+ universalify@0.1.2: {}
+
+ universalify@2.0.1: {}
+
+ unpipe@1.0.0: {}
+
+ update-browserslist-db@1.1.0(browserslist@4.23.3):
+ dependencies:
+ browserslist: 4.23.3
+ escalade: 3.1.2
+ picocolors: 1.0.1
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ url-set-query@1.0.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+
+ utf8@3.0.0: {}
+
+ util-deprecate@1.0.2: {}
+
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.1.1
+ is-generator-function: 1.0.10
+ is-typed-array: 1.1.13
+ which-typed-array: 1.1.15
+
+ utils-merge@1.0.1: {}
+
+ uuid@3.4.0: {}
+
+ uuid@8.3.2: {}
+
+ uuid@9.0.1: {}
+
+ v8-compile-cache-lib@3.0.1: {}
+
+ varint@5.0.2: {}
+
+ vary@1.1.2: {}
+
+ verror@1.10.0:
+ dependencies:
+ assert-plus: 1.0.0
+ core-util-is: 1.0.2
+ extsprintf: 1.3.0
+
+ web3-bzz@1.10.4(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/node': 12.20.55
+ got: 12.1.0
+ swarm-js: 0.1.42(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ web3-core-helpers@1.10.4:
+ dependencies:
+ web3-eth-iban: 1.10.4
+ web3-utils: 1.10.4
+
+ web3-core-method@1.10.4:
+ dependencies:
+ '@ethersproject/transactions': 5.7.0
+ 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:
+ dependencies:
+ eventemitter3: 4.0.4
+
+ web3-core-requestmanager@1.10.4:
+ 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
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ web3-core-subscriptions@1.10.4:
+ dependencies:
+ eventemitter3: 4.0.4
+ web3-core-helpers: 1.10.4
+
+ web3-core@1.10.4:
+ dependencies:
+ '@types/bn.js': 5.1.5
+ '@types/node': 12.20.55
+ bignumber.js: 9.1.2
+ web3-core-helpers: 1.10.4
+ web3-core-method: 1.10.4
+ web3-core-requestmanager: 1.10.4
+ web3-utils: 1.10.4
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ web3-eth-abi@1.10.4:
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ web3-utils: 1.10.4
+
+ web3-eth-accounts@1.10.4:
+ 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.1
+ web3-core: 1.10.4
+ web3-core-helpers: 1.10.4
+ web3-core-method: 1.10.4
+ web3-utils: 1.10.4
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ web3-eth-contract@1.10.4:
+ dependencies:
+ '@types/bn.js': 5.1.5
+ 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
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ web3-eth-ens@1.10.4:
+ 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
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ web3-eth-iban@1.10.4:
+ dependencies:
+ bn.js: 5.2.1
+ web3-utils: 1.10.4
+
+ web3-eth-personal@1.10.4:
+ dependencies:
+ '@types/node': 12.20.55
+ 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
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ web3-eth@1.10.4:
+ 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
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ web3-net@1.10.4:
+ dependencies:
+ web3-core: 1.10.4
+ web3-core-method: 1.10.4
+ web3-utils: 1.10.4
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ web3-providers-http@1.10.4:
+ dependencies:
+ abortcontroller-polyfill: 1.7.5
+ cross-fetch: 4.0.0
+ es6-promise: 4.2.8
+ web3-core-helpers: 1.10.4
+ transitivePeerDependencies:
+ - encoding
+
+ web3-providers-ipc@1.10.4:
+ dependencies:
+ oboe: 2.1.5
+ web3-core-helpers: 1.10.4
+
+ web3-providers-ws@1.10.4:
+ dependencies:
+ eventemitter3: 4.0.4
+ web3-core-helpers: 1.10.4
+ websocket: 1.0.35
+ transitivePeerDependencies:
+ - supports-color
+
+ web3-shh@1.10.4:
+ dependencies:
+ web3-core: 1.10.4
+ web3-core-method: 1.10.4
+ web3-core-subscriptions: 1.10.4
+ web3-net: 1.10.4
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ web3-utils@1.10.4:
+ dependencies:
+ '@ethereumjs/util': 8.1.0
+ bn.js: 5.2.1
+ ethereum-bloom-filters: 1.2.0
+ ethereum-cryptography: 2.2.1
+ ethjs-unit: 0.1.6
+ number-to-bn: 1.7.0
+ randombytes: 2.1.0
+ utf8: 3.0.0
+
+ web3@1.10.4(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ web3-bzz: 1.10.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ 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
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ webidl-conversions@3.0.1: {}
+
+ websocket@1.0.35:
+ dependencies:
+ bufferutil: 4.0.8
+ debug: 2.6.9
+ es5-ext: 0.10.64
+ typedarray-to-buffer: 3.1.5
+ utf-8-validate: 5.0.10
+ yaeti: 0.0.6
+ transitivePeerDependencies:
+ - supports-color
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which-boxed-primitive@1.0.2:
+ dependencies:
+ is-bigint: 1.0.4
+ is-boolean-object: 1.1.2
+ is-number-object: 1.0.7
+ is-string: 1.0.7
+ is-symbol: 1.0.4
+
+ which-typed-array@1.1.15:
+ 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@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ widest-line@3.1.0:
+ dependencies:
+ string-width: 4.2.3
+
+ winston-transport@4.7.1:
+ dependencies:
+ logform: 2.6.1
+ readable-stream: 3.6.2
+ triple-beam: 1.4.1
+
+ winston@3.14.2:
+ dependencies:
+ '@colors/colors': 1.6.0
+ '@dabh/diagnostics': 2.0.3
+ async: 3.2.6
+ is-stream: 2.0.1
+ logform: 2.6.1
+ one-time: 1.0.0
+ readable-stream: 3.6.2
+ safe-stable-stringify: 2.5.0
+ stack-trace: 0.0.10
+ triple-beam: 1.4.1
+ winston-transport: 4.7.1
+
+ word-wrap@1.2.5: {}
+
+ workerpool@6.5.1: {}
+
+ wrap-ansi@6.2.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@3.3.3(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ async-limiter: 1.0.1
+ safe-buffer: 5.1.2
+ ultron: 1.1.1
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ xhr-request-promise@0.1.3:
+ dependencies:
+ xhr-request: 1.1.0
+
+ xhr-request@1.1.0:
+ dependencies:
+ buffer-to-arraybuffer: 0.0.5
+ object-assign: 4.1.1
+ query-string: 5.1.1
+ simple-get: 2.8.2
+ timed-out: 4.0.1
+ url-set-query: 1.0.0
+ xhr: 2.6.0
+
+ xhr@2.6.0:
+ dependencies:
+ global: 4.4.0
+ is-function: 1.0.2
+ parse-headers: 2.0.5
+ xtend: 4.0.2
+
+ xtend@4.0.2: {}
+
+ y18n@5.0.8: {}
+
+ yaeti@0.0.6: {}
+
+ yallist@3.1.1: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yn@3.1.1: {}
+
+ yocto-queue@0.1.0: {}
+
+ yoga-layout-prebuilt@1.10.0:
+ dependencies:
+ '@types/yoga-layout': 1.9.2
+
+ zksync-ethers@5.9.2(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ zksync-web3@0.14.4(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ zod@3.23.8: {}
diff --git a/endpoint/solhint.config.js b/endpoint/solhint.config.js
new file mode 100644
index 0000000..52efe62
--- /dev/null
+++ b/endpoint/solhint.config.js
@@ -0,0 +1 @@
+module.exports = require('@layerzerolabs/solhint-config');
diff --git a/endpoint/tsconfig.json b/endpoint/tsconfig.json
new file mode 100644
index 0000000..21d541f
--- /dev/null
+++ b/endpoint/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"]
+ }
+}