diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..4687fcf
Binary files /dev/null and b/.DS_Store differ
diff --git a/.gitignore b/.gitignore
index 769b47c..600e365 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,18 +1 @@
-# directories
-cache
-coverage
-node_modules
-out
-
-# files
-*.env
-*.log
-.DS_Store
-.pnp.*
-lcov.info
-yarn.lock
-
-# broadcasts
-!broadcast
-broadcast/*
-broadcast/*/31337/
+**/node_modules
\ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
index ea5e34f..46d85ac 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,24 +1,24 @@
-[submodule "lib/forge-std"]
+[submodule "packages/contracts/lib/forge-std"]
branch = "v1"
- path = "lib/forge-std"
+ path = "packages/contracts/lib/forge-std"
url = "https://github.com/foundry-rs/forge-std"
-[submodule "lib/prb-test"]
+[submodule "packages/contracts/lib/prb-test"]
branch = "release-v0"
- path = "lib/prb-test"
+ path = "packages/contracts/lib/prb-test"
url = "https://github.com/PaulRBerg/prb-test"
-[submodule "lib/openzeppelin-contracts"]
- path = lib/openzeppelin-contracts
+[submodule "packages/contracts/lib/openzeppelin-contracts"]
+ path = packages/contracts/lib/openzeppelin-contracts
url = https://github.com/OpenZeppelin/openzeppelin-contracts
-[submodule "lib/osx"]
- path = lib/osx
+[submodule "packages/contracts/lib/osx"]
+ path = packages/contracts/lib/osx
url = https://github.com/aragon/osx
-[submodule "lib/openzeppelin-contracts-upgradeable"]
+[submodule "packages/contracts/lib/openzeppelin-contracts-upgradeable"]
branch = "release-v4.9"
- path = lib/openzeppelin-contracts-upgradeable
+ path = packages/contracts/lib/openzeppelin-contracts-upgradeable
url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable
-[submodule "lib/ens-contracts"]
- path = lib/ens-contracts
+[submodule "packages/contracts/lib/ens-contracts"]
+ path = packages/contracts/lib/ens-contracts
url = https://github.com/ensdomains/ens-contracts
-[submodule "lib/BokkyPooBahsDateTimeLibrary"]
- path = lib/BokkyPooBahsDateTimeLibrary
+[submodule "packages/contracts/lib/BokkyPooBahsDateTimeLibrary"]
+ path = packages/contracts/lib/BokkyPooBahsDateTimeLibrary
url = https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary
diff --git a/.vscode/settings.json b/.vscode/settings.json
index c6fd597..adf5afe 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -2,9 +2,28 @@
"[solidity]": {
"editor.defaultFormatter": "NomicFoundation.hardhat-solidity"
},
- "[toml]": {
- "editor.defaultFormatter": "tamasfe.even-better-toml"
- },
"npm.exclude": "**/lib/**",
- "solidity.formatter": "forge"
-}
+ "solidity.formatter": "forge",
+ "conventionalCommits.scopes": [
+ "hooks"
+ ],
+ "detectedConfig": {
+ "typescript": false,
+ "naming": "Pascal Case",
+ "unit": "rem",
+ "framework": "nextjs",
+ "styling": "Tailwind"
+ },
+ "locofyConfig": {
+ "project_name": "budget2",
+ "id": "6550a1218cd0bab876c5d4ce",
+ "framework": "react",
+ "typescript": true,
+ "path": "public/",
+ "componentsPath": "/Users/abuusama/repos/daobox/budget/packages/dapp/components",
+ "screensPath": "/Users/abuusama/repos/daobox/budget/frontend-v2/pages",
+ "styling": "Tailwind",
+ "unit": "rem",
+ "naming": "Pascal Case"
+ }
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index be6cf28..15c6b20 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,35 @@
+<<<<<<< HEAD
DAOBox - Budget
+=======
+# budget2
+>>>>>>> Incoming
+
+<<<<<<< HEAD
DAOBox - Budget is an Aragon OSx Plugin that allows the execution of payments bypassing the need for regular voting.
+=======
+Note: Please ensure you have installed nodejs
+
+>>>>>>> Incoming
+<<<<<<< HEAD
+=======
+To preview and run the project on your device:
+>>>>>>> Incoming
+
+<<<<<<< HEAD
@@ -230,3 +246,38 @@ constraints of this system, this is a non-issue:
## License
This project is licensed under AGPL-3.0-or-later
+
+---
+
+```
+[submodule "lib/forge-std"]
+ branch = "v1"
+ path = "lib/forge-std"
+ url = "https://github.com/foundry-rs/forge-std"
+[submodule "lib/prb-test"]
+ branch = "release-v0"
+ path = "lib/prb-test"
+ url = "https://github.com/PaulRBerg/prb-test"
+[submodule "lib/openzeppelin-contracts"]
+ path = lib/openzeppelin-contracts
+ url = https://github.com/OpenZeppelin/openzeppelin-contracts
+[submodule "lib/osx"]
+ path = lib/osx
+ url = https://github.com/aragon/osx
+[submodule "lib/openzeppelin-contracts-upgradeable"]
+ branch = "release-v4.9"
+ path = lib/openzeppelin-contracts-upgradeable
+ url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable
+[submodule "lib/ens-contracts"]
+ path = lib/ens-contracts
+ url = https://github.com/ensdomains/ens-contracts
+[submodule "lib/BokkyPooBahsDateTimeLibrary"]
+ path = lib/BokkyPooBahsDateTimeLibrary
+ url = https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary
+```
+=======
+1. Open project folder in Visual Studio Code
+2. In the terminal, run `npm install`
+3. Run `npm start` to view project in browser
+
+>>>>>>> Incoming
diff --git a/active_contracts.json b/active_contracts.json
new file mode 100644
index 0000000..61c7e20
--- /dev/null
+++ b/active_contracts.json
@@ -0,0 +1,9 @@
+{
+ "ens-domain": "budget.plugin.dao.eth",
+ "goerli": {
+ "BudgetSetup": "0x636Dc42B54029702ee5bDd39059bF8f75696B1C9",
+ "BudgetRepo": "0x9b72Af17B8aE55AE2F3C06E46A44D9bEaFb10801",
+ "dao": "0xce780fea1c950a29769b4f10817a9c51154d12af",
+ "budget": "0xfea7C89Ae8168f0f0FB9bA053b79C02819eC8C91"
+ }
+}
\ No newline at end of file
diff --git a/lib/forge-std b/lib/forge-std
deleted file mode 160000
index e8a047e..0000000
--- a/lib/forge-std
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit e8a047e3f40f13fa37af6fe14e6e06283d9a060e
diff --git a/lib/openzeppelin-contracts b/lib/openzeppelin-contracts
deleted file mode 160000
index 0457042..0000000
--- a/lib/openzeppelin-contracts
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 0457042d93d9dfd760dbaa06a4d2f1216fdbe297
diff --git a/lib/openzeppelin-contracts-upgradeable b/lib/openzeppelin-contracts-upgradeable
deleted file mode 160000
index 12ad9ea..0000000
--- a/lib/openzeppelin-contracts-upgradeable
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 12ad9ea7c8e8e78f6eba9ad71ad156645d3c5b4c
diff --git a/lib/osx b/lib/osx
deleted file mode 160000
index 1bf1798..0000000
--- a/lib/osx
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 1bf17984d1a1b569c3c4b1d86026d87f74f81402
diff --git a/lib/prb-test b/lib/prb-test
deleted file mode 160000
index 1e9ead2..0000000
--- a/lib/prb-test
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 1e9ead2f7bfaedda3038081c16484b0d7d0b2712
diff --git a/package.json b/package.json
index 5bf6c96..49b5322 100644
--- a/package.json
+++ b/package.json
@@ -1,39 +1,62 @@
{
- "name": "@daobox/budget",
- "description": "",
+<<<<<<< HEAD
+ "name": "budget-monorepo",
"version": "1.0.0",
- "author": {
- "name": "DAObox",
- "url": "https://github.com/DAObox"
+ "description": "",
+ "main": "index.js",
+=======
+ "name": "budget2",
+ "version": "0.1.0",
+ "private": true,
+ "dependencies": {
+ "@testing-library/jest-dom": "^5.16.5",
+ "@testing-library/react": "^13.4.0",
+ "@testing-library/user-event": "^13.5.0",
+ "@types/jest": "^29.5.0",
+ "@types/node": "^16.11.14",
+ "@types/react": "^18.0.28",
+ "@types/react-dom": "^18.0.11",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-scripts": "5.0.1",
+ "web-vitals": "^2.1.4",
+ "typescript": "^4.5.4",
+ "react-router-dom": "^6.2.1"
},
"devDependencies": {
- "prettier": "^3.0.0"
+ "autoprefixer": "^10.4.8",
+ "postcss": "^8.4.16",
+ "tailwindcss": "^3.1.8"
},
- "keywords": [
- "blockchain",
- "ethereum",
- "forge",
- "foundry",
- "smart-contracts",
- "solidity",
- "aragon",
- "osx",
- "dao",
- "daobox"
- ],
- "private": true,
+
+>>>>>>> Incoming
"scripts": {
- "clean": "rm -rf cache out",
- "build": "forge build",
- "lint": "pnpm lint:sol && pnpm prettier:check",
- "lint:sol": "forge fmt --check && pnpm solhint {script,src,test}/**/*.sol",
- "prettier:check": "prettier --check **/*.{json,md,yml} --ignore-path=.prettierignore",
- "prettier:write": "prettier --write **/*.{json,md,yml} --ignore-path=.prettierignore",
- "test": "forge test -vvv",
- "test:coverage": "forge coverage",
- "test:coverage:report": "forge coverage --report lcov && genhtml lcov.info --branch-coverage --output-dir coverage"
+<<<<<<< HEAD
+ "test": "echo \"Error: no test specified\" && exit 1"
+=======
+ "start": "react-scripts start",
+ "build": "react-scripts build",
+ "test": "react-scripts test",
+ "eject": "react-scripts eject"
+
+>>>>>>> Incoming
},
- "dependencies": {
- "solhint": "^3.6.2"
+<<<<<<< HEAD
+ "keywords": [],
+ "author": "pythonpete32",
+ "license": "ISC"
+=======
+ "eslintConfig": {
+ "root": true
+ },
+ "browserslist": {
+ "production": [">0.2%", "not dead", "not op_mini all"],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
}
+
+>>>>>>> Incoming
}
diff --git a/packages/.DS_Store b/packages/.DS_Store
new file mode 100644
index 0000000..44602d9
Binary files /dev/null and b/packages/.DS_Store differ
diff --git a/.env.example b/packages/contracts/.env.example
similarity index 100%
rename from .env.example
rename to packages/contracts/.env.example
diff --git a/.gitattributes b/packages/contracts/.gitattributes
similarity index 100%
rename from .gitattributes
rename to packages/contracts/.gitattributes
diff --git a/packages/contracts/.gitignore b/packages/contracts/.gitignore
new file mode 100644
index 0000000..769b47c
--- /dev/null
+++ b/packages/contracts/.gitignore
@@ -0,0 +1,18 @@
+# directories
+cache
+coverage
+node_modules
+out
+
+# files
+*.env
+*.log
+.DS_Store
+.pnp.*
+lcov.info
+yarn.lock
+
+# broadcasts
+!broadcast
+broadcast/*
+broadcast/*/31337/
diff --git a/.prettierignore b/packages/contracts/.prettierignore
similarity index 100%
rename from .prettierignore
rename to packages/contracts/.prettierignore
diff --git a/.prettierrc.yml b/packages/contracts/.prettierrc.yml
similarity index 100%
rename from .prettierrc.yml
rename to packages/contracts/.prettierrc.yml
diff --git a/.solhint.json b/packages/contracts/.solhint.json
similarity index 100%
rename from .solhint.json
rename to packages/contracts/.solhint.json
diff --git a/foundry.toml b/packages/contracts/foundry.toml
similarity index 100%
rename from foundry.toml
rename to packages/contracts/foundry.toml
diff --git a/lib/BokkyPooBahsDateTimeLibrary b/packages/contracts/lib/BokkyPooBahsDateTimeLibrary
similarity index 100%
rename from lib/BokkyPooBahsDateTimeLibrary
rename to packages/contracts/lib/BokkyPooBahsDateTimeLibrary
diff --git a/lib/ens-contracts b/packages/contracts/lib/ens-contracts
similarity index 100%
rename from lib/ens-contracts
rename to packages/contracts/lib/ens-contracts
diff --git a/packages/contracts/lib/forge-std b/packages/contracts/lib/forge-std
new file mode 160000
index 0000000..f73c73d
--- /dev/null
+++ b/packages/contracts/lib/forge-std
@@ -0,0 +1 @@
+Subproject commit f73c73d2018eb6a111f35e4dae7b4f27401e9421
diff --git a/packages/contracts/lib/openzeppelin-contracts b/packages/contracts/lib/openzeppelin-contracts
new file mode 160000
index 0000000..fd81a96
--- /dev/null
+++ b/packages/contracts/lib/openzeppelin-contracts
@@ -0,0 +1 @@
+Subproject commit fd81a96f01cc42ef1c9a5399364968d0e07e9e90
diff --git a/packages/contracts/lib/openzeppelin-contracts-upgradeable b/packages/contracts/lib/openzeppelin-contracts-upgradeable
new file mode 160000
index 0000000..3d4c0d5
--- /dev/null
+++ b/packages/contracts/lib/openzeppelin-contracts-upgradeable
@@ -0,0 +1 @@
+Subproject commit 3d4c0d5741b131c231e558d7a6213392ab3672a5
diff --git a/packages/contracts/lib/osx b/packages/contracts/lib/osx
new file mode 160000
index 0000000..c2be413
--- /dev/null
+++ b/packages/contracts/lib/osx
@@ -0,0 +1 @@
+Subproject commit c2be413a998c2995f4ed36ca648a5fd9b4284e77
diff --git a/packages/contracts/lib/prb-test b/packages/contracts/lib/prb-test
new file mode 160000
index 0000000..2ece875
--- /dev/null
+++ b/packages/contracts/lib/prb-test
@@ -0,0 +1 @@
+Subproject commit 2ece8755d9afe7d66440ef9ca19b8a9dab40164b
diff --git a/packages/contracts/out.sol b/packages/contracts/out.sol
new file mode 100644
index 0000000..eb5ffd5
--- /dev/null
+++ b/packages/contracts/out.sol
@@ -0,0 +1,2716 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+pragma solidity >=0.8.17;
+
+// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/UUPSUpgradeable.sol)
+
+// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)
+
+/**
+ * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified
+ * proxy whose upgrades are fully controlled by the current implementation.
+ */
+interface IERC1822ProxiableUpgradeable {
+ /**
+ * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation
+ * address.
+ *
+ * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks
+ * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this
+ * function revert if invoked through a proxy.
+ */
+ function proxiableUUID() external view returns (bytes32);
+}
+
+// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)
+
+// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)
+
+/**
+ * @dev This is the interface that {BeaconProxy} expects of its beacon.
+ */
+interface IBeaconUpgradeable {
+ /**
+ * @dev Must return an address that can be used as a delegate call target.
+ *
+ * {BeaconProxy} will check that this address is a contract.
+ */
+ function implementation() external view returns (address);
+}
+
+// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)
+
+/**
+ * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.
+ *
+ * _Available since v4.8.3._
+ */
+interface IERC1967Upgradeable {
+ /**
+ * @dev Emitted when the implementation is upgraded.
+ */
+ event Upgraded(address indexed implementation);
+
+ /**
+ * @dev Emitted when the admin account has changed.
+ */
+ event AdminChanged(address previousAdmin, address newAdmin);
+
+ /**
+ * @dev Emitted when the beacon is changed.
+ */
+ event BeaconUpgraded(address indexed beacon);
+}
+
+// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
+
+/**
+ * @dev Collection of functions related to the address type
+ */
+library AddressUpgradeable {
+ /**
+ * @dev Returns true if `account` is a contract.
+ *
+ * [IMPORTANT]
+ * ====
+ * It is unsafe to assume that an address for which this function returns
+ * false is an externally-owned account (EOA) and not a contract.
+ *
+ * Among others, `isContract` will return false for the following
+ * types of addresses:
+ *
+ * - an externally-owned account
+ * - a contract in construction
+ * - an address where a contract will be created
+ * - an address where a contract lived, but was destroyed
+ *
+ * Furthermore, `isContract` will also return true if the target contract within
+ * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
+ * which only has an effect at the end of a transaction.
+ * ====
+ *
+ * [IMPORTANT]
+ * ====
+ * You shouldn't rely on `isContract` to protect against flash loan attacks!
+ *
+ * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
+ * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
+ * constructor.
+ * ====
+ */
+ function isContract(address account) internal view returns (bool) {
+ // This method relies on extcodesize/address.code.length, which returns 0
+ // for contracts in construction, since the code is only stored at the end
+ // of the constructor execution.
+
+ return account.code.length > 0;
+ }
+
+ /**
+ * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
+ * `recipient`, forwarding all available gas and reverting on errors.
+ *
+ * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
+ * of certain opcodes, possibly making contracts go over the 2300 gas limit
+ * imposed by `transfer`, making them unable to receive funds via
+ * `transfer`. {sendValue} removes this limitation.
+ *
+ * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
+ *
+ * IMPORTANT: because control is transferred to `recipient`, care must be
+ * taken to not create reentrancy vulnerabilities. Consider using
+ * {ReentrancyGuard} or the
+ * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
+ */
+ function sendValue(address payable recipient, uint256 amount) internal {
+ require(address(this).balance >= amount, "Address: insufficient balance");
+
+ (bool success, ) = recipient.call{value: amount}("");
+ require(success, "Address: unable to send value, recipient may have reverted");
+ }
+
+ /**
+ * @dev Performs a Solidity function call using a low level `call`. A
+ * plain `call` is an unsafe replacement for a function call: use this
+ * function instead.
+ *
+ * If `target` reverts with a revert reason, it is bubbled up by this
+ * function (like regular Solidity function calls).
+ *
+ * Returns the raw returned data. To convert to the expected return value,
+ * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
+ *
+ * Requirements:
+ *
+ * - `target` must be a contract.
+ * - calling `target` with `data` must not revert.
+ *
+ * _Available since v3.1._
+ */
+ function functionCall(address target, bytes memory data) internal returns (bytes memory) {
+ return functionCallWithValue(target, data, 0, "Address: low-level call failed");
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
+ * `errorMessage` as a fallback revert reason when `target` reverts.
+ *
+ * _Available since v3.1._
+ */
+ function functionCall(
+ address target,
+ bytes memory data,
+ string memory errorMessage
+ ) internal returns (bytes memory) {
+ return functionCallWithValue(target, data, 0, errorMessage);
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
+ * but also transferring `value` wei to `target`.
+ *
+ * Requirements:
+ *
+ * - the calling contract must have an ETH balance of at least `value`.
+ * - the called Solidity function must be `payable`.
+ *
+ * _Available since v3.1._
+ */
+ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
+ return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
+ * with `errorMessage` as a fallback revert reason when `target` reverts.
+ *
+ * _Available since v3.1._
+ */
+ function functionCallWithValue(
+ address target,
+ bytes memory data,
+ uint256 value,
+ string memory errorMessage
+ ) internal returns (bytes memory) {
+ require(address(this).balance >= value, "Address: insufficient balance for call");
+ (bool success, bytes memory returndata) = target.call{value: value}(data);
+ return verifyCallResultFromTarget(target, success, returndata, errorMessage);
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
+ * but performing a static call.
+ *
+ * _Available since v3.3._
+ */
+ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
+ return functionStaticCall(target, data, "Address: low-level static call failed");
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
+ * but performing a static call.
+ *
+ * _Available since v3.3._
+ */
+ function functionStaticCall(
+ address target,
+ bytes memory data,
+ string memory errorMessage
+ ) internal view returns (bytes memory) {
+ (bool success, bytes memory returndata) = target.staticcall(data);
+ return verifyCallResultFromTarget(target, success, returndata, errorMessage);
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
+ * but performing a delegate call.
+ *
+ * _Available since v3.4._
+ */
+ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
+ return functionDelegateCall(target, data, "Address: low-level delegate call failed");
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
+ * but performing a delegate call.
+ *
+ * _Available since v3.4._
+ */
+ function functionDelegateCall(
+ address target,
+ bytes memory data,
+ string memory errorMessage
+ ) internal returns (bytes memory) {
+ (bool success, bytes memory returndata) = target.delegatecall(data);
+ return verifyCallResultFromTarget(target, success, returndata, errorMessage);
+ }
+
+ /**
+ * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
+ * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
+ *
+ * _Available since v4.8._
+ */
+ function verifyCallResultFromTarget(
+ address target,
+ bool success,
+ bytes memory returndata,
+ string memory errorMessage
+ ) internal view returns (bytes memory) {
+ if (success) {
+ if (returndata.length == 0) {
+ // only check isContract if the call was successful and the return data is empty
+ // otherwise we already know that it was a contract
+ require(isContract(target), "Address: call to non-contract");
+ }
+ return returndata;
+ } else {
+ _revert(returndata, errorMessage);
+ }
+ }
+
+ /**
+ * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
+ * revert reason or using the provided one.
+ *
+ * _Available since v4.3._
+ */
+ function verifyCallResult(
+ bool success,
+ bytes memory returndata,
+ string memory errorMessage
+ ) internal pure returns (bytes memory) {
+ if (success) {
+ return returndata;
+ } else {
+ _revert(returndata, errorMessage);
+ }
+ }
+
+ function _revert(bytes memory returndata, string memory errorMessage) private pure {
+ // Look for revert reason and bubble it up if present
+ if (returndata.length > 0) {
+ // The easiest way to bubble the revert reason is using memory via assembly
+ /// @solidity memory-safe-assembly
+ assembly {
+ let returndata_size := mload(returndata)
+ revert(add(32, returndata), returndata_size)
+ }
+ } else {
+ revert(errorMessage);
+ }
+ }
+}
+
+// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)
+// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.
+
+/**
+ * @dev Library for reading and writing primitive types to specific storage slots.
+ *
+ * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
+ * This library helps with reading and writing to such slots without the need for inline assembly.
+ *
+ * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
+ *
+ * Example usage to set ERC1967 implementation slot:
+ * ```solidity
+ * contract ERC1967 {
+ * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
+ *
+ * function _getImplementation() internal view returns (address) {
+ * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
+ * }
+ *
+ * function _setImplementation(address newImplementation) internal {
+ * require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
+ * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
+ * }
+ * }
+ * ```
+ *
+ * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._
+ * _Available since v4.9 for `string`, `bytes`._
+ */
+library StorageSlotUpgradeable {
+ struct AddressSlot {
+ address value;
+ }
+
+ struct BooleanSlot {
+ bool value;
+ }
+
+ struct Bytes32Slot {
+ bytes32 value;
+ }
+
+ struct Uint256Slot {
+ uint256 value;
+ }
+
+ struct StringSlot {
+ string value;
+ }
+
+ struct BytesSlot {
+ bytes value;
+ }
+
+ /**
+ * @dev Returns an `AddressSlot` with member `value` located at `slot`.
+ */
+ function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
+ /// @solidity memory-safe-assembly
+ assembly {
+ r.slot := slot
+ }
+ }
+
+ /**
+ * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
+ */
+ function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
+ /// @solidity memory-safe-assembly
+ assembly {
+ r.slot := slot
+ }
+ }
+
+ /**
+ * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
+ */
+ function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
+ /// @solidity memory-safe-assembly
+ assembly {
+ r.slot := slot
+ }
+ }
+
+ /**
+ * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
+ */
+ function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
+ /// @solidity memory-safe-assembly
+ assembly {
+ r.slot := slot
+ }
+ }
+
+ /**
+ * @dev Returns an `StringSlot` with member `value` located at `slot`.
+ */
+ function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {
+ /// @solidity memory-safe-assembly
+ assembly {
+ r.slot := slot
+ }
+ }
+
+ /**
+ * @dev Returns an `StringSlot` representation of the string storage pointer `store`.
+ */
+ function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {
+ /// @solidity memory-safe-assembly
+ assembly {
+ r.slot := store.slot
+ }
+ }
+
+ /**
+ * @dev Returns an `BytesSlot` with member `value` located at `slot`.
+ */
+ function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {
+ /// @solidity memory-safe-assembly
+ assembly {
+ r.slot := slot
+ }
+ }
+
+ /**
+ * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.
+ */
+ function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {
+ /// @solidity memory-safe-assembly
+ assembly {
+ r.slot := store.slot
+ }
+ }
+}
+
+// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)
+
+/**
+ * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
+ * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
+ * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
+ * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
+ *
+ * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
+ * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
+ * case an upgrade adds a module that needs to be initialized.
+ *
+ * For example:
+ *
+ * [.hljs-theme-light.nopadding]
+ * ```solidity
+ * contract MyToken is ERC20Upgradeable {
+ * function initialize() initializer public {
+ * __ERC20_init("MyToken", "MTK");
+ * }
+ * }
+ *
+ * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
+ * function initializeV2() reinitializer(2) public {
+ * __ERC20Permit_init("MyToken");
+ * }
+ * }
+ * ```
+ *
+ * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
+ * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
+ *
+ * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
+ * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
+ *
+ * [CAUTION]
+ * ====
+ * Avoid leaving a contract uninitialized.
+ *
+ * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation
+ * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke
+ * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:
+ *
+ * [.hljs-theme-light.nopadding]
+ * ```
+ * /// @custom:oz-upgrades-unsafe-allow constructor
+ * constructor() {
+ * _disableInitializers();
+ * }
+ * ```
+ * ====
+ */
+abstract contract Initializable {
+ /**
+ * @dev Indicates that the contract has been initialized.
+ * @custom:oz-retyped-from bool
+ */
+ uint8 private _initialized;
+
+ /**
+ * @dev Indicates that the contract is in the process of being initialized.
+ */
+ bool private _initializing;
+
+ /**
+ * @dev Triggered when the contract has been initialized or reinitialized.
+ */
+ event Initialized(uint8 version);
+
+ /**
+ * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,
+ * `onlyInitializing` functions can be used to initialize parent contracts.
+ *
+ * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a
+ * constructor.
+ *
+ * Emits an {Initialized} event.
+ */
+ modifier initializer() {
+ bool isTopLevelCall = !_initializing;
+ require(
+ (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),
+ "Initializable: contract is already initialized"
+ );
+ _initialized = 1;
+ if (isTopLevelCall) {
+ _initializing = true;
+ }
+ _;
+ if (isTopLevelCall) {
+ _initializing = false;
+ emit Initialized(1);
+ }
+ }
+
+ /**
+ * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the
+ * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be
+ * used to initialize parent contracts.
+ *
+ * A reinitializer may be used after the original initialization step. This is essential to configure modules that
+ * are added through upgrades and that require initialization.
+ *
+ * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`
+ * cannot be nested. If one is invoked in the context of another, execution will revert.
+ *
+ * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in
+ * a contract, executing them in the right order is up to the developer or operator.
+ *
+ * WARNING: setting the version to 255 will prevent any future reinitialization.
+ *
+ * Emits an {Initialized} event.
+ */
+ modifier reinitializer(uint8 version) {
+ require(!_initializing && _initialized < version, "Initializable: contract is already initialized");
+ _initialized = version;
+ _initializing = true;
+ _;
+ _initializing = false;
+ emit Initialized(version);
+ }
+
+ /**
+ * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
+ * {initializer} and {reinitializer} modifiers, directly or indirectly.
+ */
+ modifier onlyInitializing() {
+ require(_initializing, "Initializable: contract is not initializing");
+ _;
+ }
+
+ /**
+ * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
+ * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
+ * to any version. It is recommended to use this to lock implementation contracts that are designed to be called
+ * through proxies.
+ *
+ * Emits an {Initialized} event the first time it is successfully executed.
+ */
+ function _disableInitializers() internal virtual {
+ require(!_initializing, "Initializable: contract is initializing");
+ if (_initialized != type(uint8).max) {
+ _initialized = type(uint8).max;
+ emit Initialized(type(uint8).max);
+ }
+ }
+
+ /**
+ * @dev Returns the highest version that has been initialized. See {reinitializer}.
+ */
+ function _getInitializedVersion() internal view returns (uint8) {
+ return _initialized;
+ }
+
+ /**
+ * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.
+ */
+ function _isInitializing() internal view returns (bool) {
+ return _initializing;
+ }
+}
+
+/**
+ * @dev This abstract contract provides getters and event emitting update functions for
+ * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.
+ *
+ * _Available since v4.1._
+ */
+abstract contract ERC1967UpgradeUpgradeable is Initializable, IERC1967Upgradeable {
+ function __ERC1967Upgrade_init() internal onlyInitializing {
+ }
+
+ function __ERC1967Upgrade_init_unchained() internal onlyInitializing {
+ }
+ // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1
+ bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;
+
+ /**
+ * @dev Storage slot with the address of the current implementation.
+ * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
+ * validated in the constructor.
+ */
+ bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
+
+ /**
+ * @dev Returns the current implementation address.
+ */
+ function _getImplementation() internal view returns (address) {
+ return StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value;
+ }
+
+ /**
+ * @dev Stores a new address in the EIP1967 implementation slot.
+ */
+ function _setImplementation(address newImplementation) private {
+ require(AddressUpgradeable.isContract(newImplementation), "ERC1967: new implementation is not a contract");
+ StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
+ }
+
+ /**
+ * @dev Perform implementation upgrade
+ *
+ * Emits an {Upgraded} event.
+ */
+ function _upgradeTo(address newImplementation) internal {
+ _setImplementation(newImplementation);
+ emit Upgraded(newImplementation);
+ }
+
+ /**
+ * @dev Perform implementation upgrade with additional setup call.
+ *
+ * Emits an {Upgraded} event.
+ */
+ function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {
+ _upgradeTo(newImplementation);
+ if (data.length > 0 || forceCall) {
+ AddressUpgradeable.functionDelegateCall(newImplementation, data);
+ }
+ }
+
+ /**
+ * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.
+ *
+ * Emits an {Upgraded} event.
+ */
+ function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {
+ // Upgrades from old implementations will perform a rollback test. This test requires the new
+ // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing
+ // this special case will break upgrade paths from old UUPS implementation to new ones.
+ if (StorageSlotUpgradeable.getBooleanSlot(_ROLLBACK_SLOT).value) {
+ _setImplementation(newImplementation);
+ } else {
+ try IERC1822ProxiableUpgradeable(newImplementation).proxiableUUID() returns (bytes32 slot) {
+ require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID");
+ } catch {
+ revert("ERC1967Upgrade: new implementation is not UUPS");
+ }
+ _upgradeToAndCall(newImplementation, data, forceCall);
+ }
+ }
+
+ /**
+ * @dev Storage slot with the admin of the contract.
+ * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is
+ * validated in the constructor.
+ */
+ bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;
+
+ /**
+ * @dev Returns the current admin.
+ */
+ function _getAdmin() internal view returns (address) {
+ return StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value;
+ }
+
+ /**
+ * @dev Stores a new address in the EIP1967 admin slot.
+ */
+ function _setAdmin(address newAdmin) private {
+ require(newAdmin != address(0), "ERC1967: new admin is the zero address");
+ StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value = newAdmin;
+ }
+
+ /**
+ * @dev Changes the admin of the proxy.
+ *
+ * Emits an {AdminChanged} event.
+ */
+ function _changeAdmin(address newAdmin) internal {
+ emit AdminChanged(_getAdmin(), newAdmin);
+ _setAdmin(newAdmin);
+ }
+
+ /**
+ * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.
+ * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.
+ */
+ bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;
+
+ /**
+ * @dev Returns the current beacon.
+ */
+ function _getBeacon() internal view returns (address) {
+ return StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value;
+ }
+
+ /**
+ * @dev Stores a new beacon in the EIP1967 beacon slot.
+ */
+ function _setBeacon(address newBeacon) private {
+ require(AddressUpgradeable.isContract(newBeacon), "ERC1967: new beacon is not a contract");
+ require(
+ AddressUpgradeable.isContract(IBeaconUpgradeable(newBeacon).implementation()),
+ "ERC1967: beacon implementation is not a contract"
+ );
+ StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value = newBeacon;
+ }
+
+ /**
+ * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does
+ * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).
+ *
+ * Emits a {BeaconUpgraded} event.
+ */
+ function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {
+ _setBeacon(newBeacon);
+ emit BeaconUpgraded(newBeacon);
+ if (data.length > 0 || forceCall) {
+ AddressUpgradeable.functionDelegateCall(IBeaconUpgradeable(newBeacon).implementation(), data);
+ }
+ }
+
+ /**
+ * @dev This empty reserved space is put in place to allow future versions to add new
+ * variables without shifting down storage in the inheritance chain.
+ * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
+ */
+ uint256[50] private __gap;
+}
+
+/**
+ * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an
+ * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.
+ *
+ * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is
+ * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing
+ * `UUPSUpgradeable` with a custom implementation of upgrades.
+ *
+ * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.
+ *
+ * _Available since v4.1._
+ */
+abstract contract UUPSUpgradeable is Initializable, IERC1822ProxiableUpgradeable, ERC1967UpgradeUpgradeable {
+ function __UUPSUpgradeable_init() internal onlyInitializing {
+ }
+
+ function __UUPSUpgradeable_init_unchained() internal onlyInitializing {
+ }
+ /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment
+ address private immutable __self = address(this);
+
+ /**
+ * @dev Check that the execution is being performed through a delegatecall call and that the execution context is
+ * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case
+ * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a
+ * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to
+ * fail.
+ */
+ modifier onlyProxy() {
+ require(address(this) != __self, "Function must be called through delegatecall");
+ require(_getImplementation() == __self, "Function must be called through active proxy");
+ _;
+ }
+
+ /**
+ * @dev Check that the execution is not being performed through a delegate call. This allows a function to be
+ * callable on the implementing contract but not through proxies.
+ */
+ modifier notDelegated() {
+ require(address(this) == __self, "UUPSUpgradeable: must not be called through delegatecall");
+ _;
+ }
+
+ /**
+ * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the
+ * implementation. It is used to validate the implementation's compatibility when performing an upgrade.
+ *
+ * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks
+ * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this
+ * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.
+ */
+ function proxiableUUID() external view virtual override notDelegated returns (bytes32) {
+ return _IMPLEMENTATION_SLOT;
+ }
+
+ /**
+ * @dev Upgrade the implementation of the proxy to `newImplementation`.
+ *
+ * Calls {_authorizeUpgrade}.
+ *
+ * Emits an {Upgraded} event.
+ *
+ * @custom:oz-upgrades-unsafe-allow-reachable delegatecall
+ */
+ function upgradeTo(address newImplementation) public virtual onlyProxy {
+ _authorizeUpgrade(newImplementation);
+ _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);
+ }
+
+ /**
+ * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call
+ * encoded in `data`.
+ *
+ * Calls {_authorizeUpgrade}.
+ *
+ * Emits an {Upgraded} event.
+ *
+ * @custom:oz-upgrades-unsafe-allow-reachable delegatecall
+ */
+ function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy {
+ _authorizeUpgrade(newImplementation);
+ _upgradeToAndCallUUPS(newImplementation, data, true);
+ }
+
+ /**
+ * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by
+ * {upgradeTo} and {upgradeToAndCall}.
+ *
+ * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.
+ *
+ * ```solidity
+ * function _authorizeUpgrade(address) internal override onlyOwner {}
+ * ```
+ */
+ function _authorizeUpgrade(address newImplementation) internal virtual;
+
+ /**
+ * @dev This empty reserved space is put in place to allow future versions to add new
+ * variables without shifting down storage in the inheritance chain.
+ * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
+ */
+ uint256[50] private __gap;
+}
+
+// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
+
+// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
+
+/**
+ * @dev Interface of the ERC165 standard, as defined in the
+ * https://eips.ethereum.org/EIPS/eip-165[EIP].
+ *
+ * Implementers can declare support of contract interfaces, which can then be
+ * queried by others ({ERC165Checker}).
+ *
+ * For an implementation, see {ERC165}.
+ */
+interface IERC165Upgradeable {
+ /**
+ * @dev Returns true if this contract implements the interface defined by
+ * `interfaceId`. See the corresponding
+ * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
+ * to learn more about how these ids are created.
+ *
+ * This function call must use less than 30 000 gas.
+ */
+ function supportsInterface(bytes4 interfaceId) external view returns (bool);
+}
+
+/**
+ * @dev Implementation of the {IERC165} interface.
+ *
+ * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
+ * for the additional interface id that will be supported. For example:
+ *
+ * ```solidity
+ * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
+ * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
+ * }
+ * ```
+ *
+ * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
+ */
+abstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {
+ function __ERC165_init() internal onlyInitializing {
+ }
+
+ function __ERC165_init_unchained() internal onlyInitializing {
+ }
+ /**
+ * @dev See {IERC165-supportsInterface}.
+ */
+ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
+ return interfaceId == type(IERC165Upgradeable).interfaceId;
+ }
+
+ /**
+ * @dev This empty reserved space is put in place to allow future versions to add new
+ * variables without shifting down storage in the inheritance chain.
+ * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
+ */
+ uint256[50] private __gap;
+}
+
+/// @title IProtocolVersion
+/// @author Aragon Association - 2022-2023
+/// @notice An interface defining the semantic Aragon OSx protocol version number.
+/// @custom:security-contact sirt@aragon.org
+interface IProtocolVersion {
+ /// @notice Returns the semantic Aragon OSx protocol version number that the implementing contract is associated with.
+ /// @return _version Returns the semantic Aragon OSx protocol version number.
+ /// @dev This version number is not to be confused with the `release` and `build` numbers found in the `Version.Tag` struct inside the `PluginRepo` contract being used to version plugin setup and associated plugin implementation contracts.
+ function protocolVersion() external view returns (uint8[3] memory _version);
+}
+
+/// @title ProtocolVersion
+/// @author Aragon Association - 2023
+/// @notice An abstract, stateless, non-upgradeable contract providing the current Aragon OSx protocol version number.
+/// @dev Do not add any new variables to this contract that would shift down storage in the inheritance chain.
+/// @custom:security-contact sirt@aragon.org
+abstract contract ProtocolVersion is IProtocolVersion {
+ // IMPORTANT: Do not add any storage variable, see the above notice.
+
+ /// @inheritdoc IProtocolVersion
+ function protocolVersion() public pure returns (uint8[3] memory) {
+ return [1, 4, 0];
+ }
+}
+
+/// @title IDAO
+/// @author Aragon Association - 2022-2023
+/// @notice The interface required for DAOs within the Aragon App DAO framework.
+/// @custom:security-contact sirt@aragon.org
+interface IDAO {
+ /// @notice The action struct to be consumed by the DAO's `execute` function resulting in an external call.
+ /// @param to The address to call.
+ /// @param value The native token value to be sent with the call.
+ /// @param data The bytes-encoded function selector and calldata for the call.
+ struct Action {
+ address to;
+ uint256 value;
+ bytes data;
+ }
+
+ /// @notice Checks if an address has permission on a contract via a permission identifier and considers if `ANY_ADDRESS` was used in the granting process.
+ /// @param _where The address of the contract.
+ /// @param _who The address of a EOA or contract to give the permissions.
+ /// @param _permissionId The permission identifier.
+ /// @param _data The optional data passed to the `PermissionCondition` registered.
+ /// @return Returns true if the address has permission, false if not.
+ function hasPermission(
+ address _where,
+ address _who,
+ bytes32 _permissionId,
+ bytes memory _data
+ ) external view returns (bool);
+
+ /// @notice Updates the DAO metadata (e.g., an IPFS hash).
+ /// @param _metadata The IPFS hash of the new metadata object.
+ function setMetadata(bytes calldata _metadata) external;
+
+ /// @notice Emitted when the DAO metadata is updated.
+ /// @param metadata The IPFS hash of the new metadata object.
+ event MetadataSet(bytes metadata);
+
+ /// @notice Executes a list of actions. If a zero allow-failure map is provided, a failing action reverts the entire execution. If a non-zero allow-failure map is provided, allowed actions can fail without the entire call being reverted.
+ /// @param _callId The ID of the call. The definition of the value of `callId` is up to the calling contract and can be used, e.g., as a nonce.
+ /// @param _actions The array of actions.
+ /// @param _allowFailureMap A bitmap allowing execution to succeed, even if individual actions might revert. If the bit at index `i` is 1, the execution succeeds even if the `i`th action reverts. A failure map value of 0 requires every action to not revert.
+ /// @return The array of results obtained from the executed actions in `bytes`.
+ /// @return The resulting failure map containing the actions have actually failed.
+ function execute(
+ bytes32 _callId,
+ Action[] memory _actions,
+ uint256 _allowFailureMap
+ ) external returns (bytes[] memory, uint256);
+
+ /// @notice Emitted when a proposal is executed.
+ /// @param actor The address of the caller.
+ /// @param callId The ID of the call.
+ /// @param actions The array of actions executed.
+ /// @param allowFailureMap The allow failure map encoding which actions are allowed to fail.
+ /// @param failureMap The failure map encoding which actions have failed.
+ /// @param execResults The array with the results of the executed actions.
+ /// @dev The value of `callId` is defined by the component/contract calling the execute function. A `Plugin` implementation can use it, for example, as a nonce.
+ event Executed(
+ address indexed actor,
+ bytes32 callId,
+ Action[] actions,
+ uint256 allowFailureMap,
+ uint256 failureMap,
+ bytes[] execResults
+ );
+
+ /// @notice Emitted when a standard callback is registered.
+ /// @param interfaceId The ID of the interface.
+ /// @param callbackSelector The selector of the callback function.
+ /// @param magicNumber The magic number to be registered for the callback function selector.
+ event StandardCallbackRegistered(
+ bytes4 interfaceId,
+ bytes4 callbackSelector,
+ bytes4 magicNumber
+ );
+
+ /// @notice Deposits (native) tokens to the DAO contract with a reference string.
+ /// @param _token The address of the token or address(0) in case of the native token.
+ /// @param _amount The amount of tokens to deposit.
+ /// @param _reference The reference describing the deposit reason.
+ function deposit(address _token, uint256 _amount, string calldata _reference) external payable;
+
+ /// @notice Emitted when a token deposit has been made to the DAO.
+ /// @param sender The address of the sender.
+ /// @param token The address of the deposited token.
+ /// @param amount The amount of tokens deposited.
+ /// @param _reference The reference describing the deposit reason.
+ event Deposited(
+ address indexed sender,
+ address indexed token,
+ uint256 amount,
+ string _reference
+ );
+
+ /// @notice Emitted when a native token deposit has been made to the DAO.
+ /// @dev This event is intended to be emitted in the `receive` function and is therefore bound by the gas limitations for `send`/`transfer` calls introduced by [ERC-2929](https://eips.ethereum.org/EIPS/eip-2929).
+ /// @param sender The address of the sender.
+ /// @param amount The amount of native tokens deposited.
+ event NativeTokenDeposited(address sender, uint256 amount);
+
+ /// @notice Setter for the trusted forwarder verifying the meta transaction.
+ /// @param _trustedForwarder The trusted forwarder address.
+ function setTrustedForwarder(address _trustedForwarder) external;
+
+ /// @notice Getter for the trusted forwarder verifying the meta transaction.
+ /// @return The trusted forwarder address.
+ function getTrustedForwarder() external view returns (address);
+
+ /// @notice Emitted when a new TrustedForwarder is set on the DAO.
+ /// @param forwarder the new forwarder address.
+ event TrustedForwarderSet(address forwarder);
+
+ /// @notice Checks whether a signature is valid for a provided hash according to [ERC-1271](https://eips.ethereum.org/EIPS/eip-1271).
+ /// @param _hash The hash of the data to be signed.
+ /// @param _signature The signature byte array associated with `_hash`.
+ /// @return Returns the `bytes4` magic value `0x1626ba7e` if the signature is valid and `0xffffffff` if not.
+ function isValidSignature(bytes32 _hash, bytes memory _signature) external returns (bytes4);
+
+ /// @notice Registers an ERC standard having a callback by registering its [ERC-165](https://eips.ethereum.org/EIPS/eip-165) interface ID and callback function signature.
+ /// @param _interfaceId The ID of the interface.
+ /// @param _callbackSelector The selector of the callback function.
+ /// @param _magicNumber The magic number to be registered for the function signature.
+ function registerStandardCallback(
+ bytes4 _interfaceId,
+ bytes4 _callbackSelector,
+ bytes4 _magicNumber
+ ) external;
+
+ /// @notice Removed function being left here to not corrupt the IDAO interface ID. Any call will revert.
+ /// @dev Introduced in v1.0.0. Removed in v1.4.0.
+ function setSignatureValidator(address) external;
+}
+
+// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
+
+/**
+ * @dev Provides information about the current execution context, including the
+ * sender of the transaction and its data. While these are generally available
+ * via msg.sender and msg.data, they should not be accessed in such a direct
+ * manner, since when dealing with meta-transactions the account sending and
+ * paying for execution may not be the actual sender (as far as an application
+ * is concerned).
+ *
+ * This contract is only required for intermediate, library-like contracts.
+ */
+abstract contract ContextUpgradeable is Initializable {
+ function __Context_init() internal onlyInitializing {
+ }
+
+ function __Context_init_unchained() internal onlyInitializing {
+ }
+ function _msgSender() internal view virtual returns (address) {
+ return msg.sender;
+ }
+
+ function _msgData() internal view virtual returns (bytes calldata) {
+ return msg.data;
+ }
+
+ /**
+ * @dev This empty reserved space is put in place to allow future versions to add new
+ * variables without shifting down storage in the inheritance chain.
+ * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
+ */
+ uint256[50] private __gap;
+}
+
+/// @notice Thrown if a call is unauthorized in the associated DAO.
+/// @param dao The associated DAO.
+/// @param where The context in which the authorization reverted.
+/// @param who The address (EOA or contract) missing the permission.
+/// @param permissionId The permission identifier.
+error DaoUnauthorized(address dao, address where, address who, bytes32 permissionId);
+
+/// @notice A free function checking if a caller is granted permissions on a target contract via a permission identifier that redirects the approval to a `PermissionCondition` if this was specified in the setup.
+/// @param _where The address of the target contract for which `who` receives permission.
+/// @param _who The address (EOA or contract) owning the permission.
+/// @param _permissionId The permission identifier.
+/// @param _data The optional data passed to the `PermissionCondition` registered.
+/// @custom:security-contact sirt@aragon.org
+function _auth(
+ IDAO _dao,
+ address _where,
+ address _who,
+ bytes32 _permissionId,
+ bytes calldata _data
+) view {
+ if (!_dao.hasPermission(_where, _who, _permissionId, _data))
+ revert DaoUnauthorized({
+ dao: address(_dao),
+ where: _where,
+ who: _who,
+ permissionId: _permissionId
+ });
+}
+
+/// @title DaoAuthorizableUpgradeable
+/// @author Aragon Association - 2022-2023
+/// @notice An abstract contract providing a meta-transaction compatible modifier for upgradeable or cloneable contracts to authorize function calls through an associated DAO.
+/// @dev Make sure to call `__DaoAuthorizableUpgradeable_init` during initialization of the inheriting contract.
+/// @custom:security-contact sirt@aragon.org
+abstract contract DaoAuthorizableUpgradeable is ContextUpgradeable {
+ /// @notice The associated DAO managing the permissions of inheriting contracts.
+ IDAO private dao_;
+
+ /// @notice Initializes the contract by setting the associated DAO.
+ /// @param _dao The associated DAO address.
+ function __DaoAuthorizableUpgradeable_init(IDAO _dao) internal onlyInitializing {
+ dao_ = _dao;
+ }
+
+ /// @notice Returns the DAO contract.
+ /// @return The DAO contract.
+ function dao() public view returns (IDAO) {
+ return dao_;
+ }
+
+ /// @notice A modifier to make functions on inheriting contracts authorized. Permissions to call the function are checked through the associated DAO's permission manager.
+ /// @param _permissionId The permission identifier required to call the method this modifier is applied to.
+ modifier auth(bytes32 _permissionId) {
+ _auth(dao_, address(this), _msgSender(), _permissionId, _msgData());
+ _;
+ }
+
+ /// @notice This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain (see [OpenZeppelin's guide about storage gaps](https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps)).
+ uint256[49] private __gap;
+}
+
+/// @title IPlugin
+/// @author Aragon Association - 2022-2023
+/// @notice An interface defining the traits of a plugin.
+/// @custom:security-contact sirt@aragon.org
+interface IPlugin {
+ enum PluginType {
+ UUPS,
+ Cloneable,
+ Constructable
+ }
+
+ /// @notice Returns the plugin's type
+ function pluginType() external view returns (PluginType);
+}
+
+/// @title PluginUUPSUpgradeable
+/// @author Aragon Association - 2022-2023
+/// @notice An abstract, upgradeable contract to inherit from when creating a plugin being deployed via the UUPS pattern (see [ERC-1822](https://eips.ethereum.org/EIPS/eip-1822)).
+/// @custom:security-contact sirt@aragon.org
+abstract contract PluginUUPSUpgradeable is
+ IPlugin,
+ ERC165Upgradeable,
+ UUPSUpgradeable,
+ DaoAuthorizableUpgradeable,
+ ProtocolVersion
+{
+ // NOTE: When adding new state variables to the contract, the size of `_gap` has to be adapted below as well.
+
+ /// @notice Disables the initializers on the implementation contract to prevent it from being left uninitialized.
+ /// @custom:oz-upgrades-unsafe-allow constructor
+ constructor() {
+ _disableInitializers();
+ }
+
+ /// @inheritdoc IPlugin
+ function pluginType() public pure override returns (PluginType) {
+ return PluginType.UUPS;
+ }
+
+ /// @notice The ID of the permission required to call the `_authorizeUpgrade` function.
+ bytes32 public constant UPGRADE_PLUGIN_PERMISSION_ID = keccak256("UPGRADE_PLUGIN_PERMISSION");
+
+ /// @notice Initializes the plugin by storing the associated DAO.
+ /// @param _dao The DAO contract.
+ function __PluginUUPSUpgradeable_init(IDAO _dao) internal virtual onlyInitializing {
+ __DaoAuthorizableUpgradeable_init(_dao);
+ }
+
+ /// @notice Checks if an interface is supported by this or its parent contract.
+ /// @param _interfaceId The ID of the interface.
+ /// @return Returns `true` if the interface is supported.
+ function supportsInterface(bytes4 _interfaceId) public view virtual override returns (bool) {
+ return
+ _interfaceId == type(IPlugin).interfaceId ||
+ _interfaceId == type(IProtocolVersion).interfaceId ||
+ _interfaceId == type(IERC1822ProxiableUpgradeable).interfaceId ||
+ super.supportsInterface(_interfaceId);
+ }
+
+ /// @notice Returns the address of the implementation contract in the [proxy storage slot](https://eips.ethereum.org/EIPS/eip-1967) slot the [UUPS proxy](https://eips.ethereum.org/EIPS/eip-1822) is pointing to.
+ /// @return The address of the implementation contract.
+ function implementation() public view returns (address) {
+ return _getImplementation();
+ }
+
+ /// @notice Internal method authorizing the upgrade of the contract via the [upgradeability mechanism for UUPS proxies](https://docs.openzeppelin.com/contracts/4.x/api/proxy#UUPSUpgradeable) (see [ERC-1822](https://eips.ethereum.org/EIPS/eip-1822)).
+ /// @dev The caller must have the `UPGRADE_PLUGIN_PERMISSION_ID` permission.
+ function _authorizeUpgrade(
+ address
+ ) internal virtual override auth(UPGRADE_PLUGIN_PERMISSION_ID) {}
+
+ /// @notice This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain (see [OpenZeppelin's guide about storage gaps](https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps)).
+ uint256[50] private __gap;
+}
+
+// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)
+
+// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
+
+/**
+ * @dev Interface of the ERC20 standard as defined in the EIP.
+ */
+interface IERC20 {
+ /**
+ * @dev Emitted when `value` tokens are moved from one account (`from`) to
+ * another (`to`).
+ *
+ * Note that `value` may be zero.
+ */
+ event Transfer(address indexed from, address indexed to, uint256 value);
+
+ /**
+ * @dev Emitted when the allowance of a `spender` for an `owner` is set by
+ * a call to {approve}. `value` is the new allowance.
+ */
+ event Approval(address indexed owner, address indexed spender, uint256 value);
+
+ /**
+ * @dev Returns the amount of tokens in existence.
+ */
+ function totalSupply() external view returns (uint256);
+
+ /**
+ * @dev Returns the amount of tokens owned by `account`.
+ */
+ function balanceOf(address account) external view returns (uint256);
+
+ /**
+ * @dev Moves `amount` tokens from the caller's account to `to`.
+ *
+ * Returns a boolean value indicating whether the operation succeeded.
+ *
+ * Emits a {Transfer} event.
+ */
+ function transfer(address to, uint256 amount) external returns (bool);
+
+ /**
+ * @dev Returns the remaining number of tokens that `spender` will be
+ * allowed to spend on behalf of `owner` through {transferFrom}. This is
+ * zero by default.
+ *
+ * This value changes when {approve} or {transferFrom} are called.
+ */
+ function allowance(address owner, address spender) external view returns (uint256);
+
+ /**
+ * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
+ *
+ * Returns a boolean value indicating whether the operation succeeded.
+ *
+ * IMPORTANT: Beware that changing an allowance with this method brings the risk
+ * that someone may use both the old and the new allowance by unfortunate
+ * transaction ordering. One possible solution to mitigate this race
+ * condition is to first reduce the spender's allowance to 0 and set the
+ * desired value afterwards:
+ * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
+ *
+ * Emits an {Approval} event.
+ */
+ function approve(address spender, uint256 amount) external returns (bool);
+
+ /**
+ * @dev Moves `amount` tokens from `from` to `to` using the
+ * allowance mechanism. `amount` is then deducted from the caller's
+ * allowance.
+ *
+ * Returns a boolean value indicating whether the operation succeeded.
+ *
+ * Emits a {Transfer} event.
+ */
+ function transferFrom(address from, address to, uint256 amount) external returns (bool);
+}
+
+// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)
+
+// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/IERC20Permit.sol)
+
+/**
+ * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
+ * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
+ *
+ * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
+ * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
+ * need to send a transaction, and thus is not required to hold Ether at all.
+ */
+interface IERC20Permit {
+ /**
+ * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
+ * given ``owner``'s signed approval.
+ *
+ * IMPORTANT: The same issues {IERC20-approve} has related to transaction
+ * ordering also apply here.
+ *
+ * Emits an {Approval} event.
+ *
+ * Requirements:
+ *
+ * - `spender` cannot be the zero address.
+ * - `deadline` must be a timestamp in the future.
+ * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
+ * over the EIP712-formatted function arguments.
+ * - the signature must use ``owner``'s current nonce (see {nonces}).
+ *
+ * For more information on the signature format, see the
+ * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
+ * section].
+ */
+ function permit(
+ address owner,
+ address spender,
+ uint256 value,
+ uint256 deadline,
+ uint8 v,
+ bytes32 r,
+ bytes32 s
+ ) external;
+
+ /**
+ * @dev Returns the current nonce for `owner`. This value must be
+ * included whenever a signature is generated for {permit}.
+ *
+ * Every successful call to {permit} increases ``owner``'s nonce by one. This
+ * prevents a signature from being used multiple times.
+ */
+ function nonces(address owner) external view returns (uint256);
+
+ /**
+ * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
+ */
+ // solhint-disable-next-line func-name-mixedcase
+ function DOMAIN_SEPARATOR() external view returns (bytes32);
+}
+
+// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
+
+/**
+ * @dev Collection of functions related to the address type
+ */
+library Address {
+ /**
+ * @dev Returns true if `account` is a contract.
+ *
+ * [IMPORTANT]
+ * ====
+ * It is unsafe to assume that an address for which this function returns
+ * false is an externally-owned account (EOA) and not a contract.
+ *
+ * Among others, `isContract` will return false for the following
+ * types of addresses:
+ *
+ * - an externally-owned account
+ * - a contract in construction
+ * - an address where a contract will be created
+ * - an address where a contract lived, but was destroyed
+ *
+ * Furthermore, `isContract` will also return true if the target contract within
+ * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
+ * which only has an effect at the end of a transaction.
+ * ====
+ *
+ * [IMPORTANT]
+ * ====
+ * You shouldn't rely on `isContract` to protect against flash loan attacks!
+ *
+ * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
+ * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
+ * constructor.
+ * ====
+ */
+ function isContract(address account) internal view returns (bool) {
+ // This method relies on extcodesize/address.code.length, which returns 0
+ // for contracts in construction, since the code is only stored at the end
+ // of the constructor execution.
+
+ return account.code.length > 0;
+ }
+
+ /**
+ * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
+ * `recipient`, forwarding all available gas and reverting on errors.
+ *
+ * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
+ * of certain opcodes, possibly making contracts go over the 2300 gas limit
+ * imposed by `transfer`, making them unable to receive funds via
+ * `transfer`. {sendValue} removes this limitation.
+ *
+ * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
+ *
+ * IMPORTANT: because control is transferred to `recipient`, care must be
+ * taken to not create reentrancy vulnerabilities. Consider using
+ * {ReentrancyGuard} or the
+ * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
+ */
+ function sendValue(address payable recipient, uint256 amount) internal {
+ require(address(this).balance >= amount, "Address: insufficient balance");
+
+ (bool success, ) = recipient.call{value: amount}("");
+ require(success, "Address: unable to send value, recipient may have reverted");
+ }
+
+ /**
+ * @dev Performs a Solidity function call using a low level `call`. A
+ * plain `call` is an unsafe replacement for a function call: use this
+ * function instead.
+ *
+ * If `target` reverts with a revert reason, it is bubbled up by this
+ * function (like regular Solidity function calls).
+ *
+ * Returns the raw returned data. To convert to the expected return value,
+ * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
+ *
+ * Requirements:
+ *
+ * - `target` must be a contract.
+ * - calling `target` with `data` must not revert.
+ *
+ * _Available since v3.1._
+ */
+ function functionCall(address target, bytes memory data) internal returns (bytes memory) {
+ return functionCallWithValue(target, data, 0, "Address: low-level call failed");
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
+ * `errorMessage` as a fallback revert reason when `target` reverts.
+ *
+ * _Available since v3.1._
+ */
+ function functionCall(
+ address target,
+ bytes memory data,
+ string memory errorMessage
+ ) internal returns (bytes memory) {
+ return functionCallWithValue(target, data, 0, errorMessage);
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
+ * but also transferring `value` wei to `target`.
+ *
+ * Requirements:
+ *
+ * - the calling contract must have an ETH balance of at least `value`.
+ * - the called Solidity function must be `payable`.
+ *
+ * _Available since v3.1._
+ */
+ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
+ return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
+ * with `errorMessage` as a fallback revert reason when `target` reverts.
+ *
+ * _Available since v3.1._
+ */
+ function functionCallWithValue(
+ address target,
+ bytes memory data,
+ uint256 value,
+ string memory errorMessage
+ ) internal returns (bytes memory) {
+ require(address(this).balance >= value, "Address: insufficient balance for call");
+ (bool success, bytes memory returndata) = target.call{value: value}(data);
+ return verifyCallResultFromTarget(target, success, returndata, errorMessage);
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
+ * but performing a static call.
+ *
+ * _Available since v3.3._
+ */
+ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
+ return functionStaticCall(target, data, "Address: low-level static call failed");
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
+ * but performing a static call.
+ *
+ * _Available since v3.3._
+ */
+ function functionStaticCall(
+ address target,
+ bytes memory data,
+ string memory errorMessage
+ ) internal view returns (bytes memory) {
+ (bool success, bytes memory returndata) = target.staticcall(data);
+ return verifyCallResultFromTarget(target, success, returndata, errorMessage);
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
+ * but performing a delegate call.
+ *
+ * _Available since v3.4._
+ */
+ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
+ return functionDelegateCall(target, data, "Address: low-level delegate call failed");
+ }
+
+ /**
+ * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
+ * but performing a delegate call.
+ *
+ * _Available since v3.4._
+ */
+ function functionDelegateCall(
+ address target,
+ bytes memory data,
+ string memory errorMessage
+ ) internal returns (bytes memory) {
+ (bool success, bytes memory returndata) = target.delegatecall(data);
+ return verifyCallResultFromTarget(target, success, returndata, errorMessage);
+ }
+
+ /**
+ * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
+ * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
+ *
+ * _Available since v4.8._
+ */
+ function verifyCallResultFromTarget(
+ address target,
+ bool success,
+ bytes memory returndata,
+ string memory errorMessage
+ ) internal view returns (bytes memory) {
+ if (success) {
+ if (returndata.length == 0) {
+ // only check isContract if the call was successful and the return data is empty
+ // otherwise we already know that it was a contract
+ require(isContract(target), "Address: call to non-contract");
+ }
+ return returndata;
+ } else {
+ _revert(returndata, errorMessage);
+ }
+ }
+
+ /**
+ * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
+ * revert reason or using the provided one.
+ *
+ * _Available since v4.3._
+ */
+ function verifyCallResult(
+ bool success,
+ bytes memory returndata,
+ string memory errorMessage
+ ) internal pure returns (bytes memory) {
+ if (success) {
+ return returndata;
+ } else {
+ _revert(returndata, errorMessage);
+ }
+ }
+
+ function _revert(bytes memory returndata, string memory errorMessage) private pure {
+ // Look for revert reason and bubble it up if present
+ if (returndata.length > 0) {
+ // The easiest way to bubble the revert reason is using memory via assembly
+ /// @solidity memory-safe-assembly
+ assembly {
+ let returndata_size := mload(returndata)
+ revert(add(32, returndata), returndata_size)
+ }
+ } else {
+ revert(errorMessage);
+ }
+ }
+}
+
+/**
+ * @title SafeERC20
+ * @dev Wrappers around ERC20 operations that throw on failure (when the token
+ * contract returns false). Tokens that return no value (and instead revert or
+ * throw on failure) are also supported, non-reverting calls are assumed to be
+ * successful.
+ * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
+ * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
+ */
+library SafeERC20 {
+ using Address for address;
+
+ /**
+ * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
+ * non-reverting calls are assumed to be successful.
+ */
+ function safeTransfer(IERC20 token, address to, uint256 value) internal {
+ _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
+ }
+
+ /**
+ * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
+ * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
+ */
+ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
+ _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
+ }
+
+ /**
+ * @dev Deprecated. This function has issues similar to the ones found in
+ * {IERC20-approve}, and its usage is discouraged.
+ *
+ * Whenever possible, use {safeIncreaseAllowance} and
+ * {safeDecreaseAllowance} instead.
+ */
+ function safeApprove(IERC20 token, address spender, uint256 value) internal {
+ // safeApprove should only be called when setting an initial allowance,
+ // or when resetting it to zero. To increase and decrease it, use
+ // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
+ require(
+ (value == 0) || (token.allowance(address(this), spender) == 0),
+ "SafeERC20: approve from non-zero to non-zero allowance"
+ );
+ _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
+ }
+
+ /**
+ * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
+ * non-reverting calls are assumed to be successful.
+ */
+ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
+ uint256 oldAllowance = token.allowance(address(this), spender);
+ _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));
+ }
+
+ /**
+ * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
+ * non-reverting calls are assumed to be successful.
+ */
+ function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
+ unchecked {
+ uint256 oldAllowance = token.allowance(address(this), spender);
+ require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
+ _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));
+ }
+ }
+
+ /**
+ * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
+ * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
+ * to be set to zero before setting it to a non-zero value, such as USDT.
+ */
+ function forceApprove(IERC20 token, address spender, uint256 value) internal {
+ bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);
+
+ if (!_callOptionalReturnBool(token, approvalCall)) {
+ _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
+ _callOptionalReturn(token, approvalCall);
+ }
+ }
+
+ /**
+ * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.
+ * Revert on invalid signature.
+ */
+ function safePermit(
+ IERC20Permit token,
+ address owner,
+ address spender,
+ uint256 value,
+ uint256 deadline,
+ uint8 v,
+ bytes32 r,
+ bytes32 s
+ ) internal {
+ uint256 nonceBefore = token.nonces(owner);
+ token.permit(owner, spender, value, deadline, v, r, s);
+ uint256 nonceAfter = token.nonces(owner);
+ require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
+ }
+
+ /**
+ * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
+ * on the return value: the return value is optional (but if data is returned, it must not be false).
+ * @param token The token targeted by the call.
+ * @param data The call data (encoded using abi.encode or one of its variants).
+ */
+ function _callOptionalReturn(IERC20 token, bytes memory data) private {
+ // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
+ // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
+ // the target address contains contract code and also asserts for success in the low-level call.
+
+ bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
+ require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
+ }
+
+ /**
+ * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
+ * on the return value: the return value is optional (but if data is returned, it must not be false).
+ * @param token The token targeted by the call.
+ * @param data The call data (encoded using abi.encode or one of its variants).
+ *
+ * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.
+ */
+ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
+ // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
+ // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false
+ // and not revert is the subcall reverts.
+
+ (bool success, bytes memory returndata) = address(token).call(data);
+ return
+ success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token));
+ }
+}
+
+// Formal verification for library and formula: https://twitter.com/Zellic_io/status/1510341868021854209
+
+// ----------------------------------------------------------------------------
+// BokkyPooBah's DateTime Library v1.01
+//
+// A gas-efficient Solidity date and time library
+//
+// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary
+//
+// Tested date range 1970/01/01 to 2345/12/31
+//
+// Conventions:
+// Unit | Range | Notes
+// :-------- |:-------------:|:-----
+// timestamp | >= 0 | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC
+// year | 1970 ... 2345 |
+// month | 1 ... 12 |
+// day | 1 ... 31 |
+// hour | 0 ... 23 |
+// minute | 0 ... 59 |
+// second | 0 ... 59 |
+// dayOfWeek | 1 ... 7 | 1 = Monday, ..., 7 = Sunday
+//
+//
+// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.
+// ----------------------------------------------------------------------------
+
+library BokkyPooBahsDateTimeLibrary {
+
+ uint constant SECONDS_PER_DAY = 24 * 60 * 60;
+ uint constant SECONDS_PER_HOUR = 60 * 60;
+ uint constant SECONDS_PER_MINUTE = 60;
+ int constant OFFSET19700101 = 2440588;
+
+ uint constant DOW_MON = 1;
+ uint constant DOW_TUE = 2;
+ uint constant DOW_WED = 3;
+ uint constant DOW_THU = 4;
+ uint constant DOW_FRI = 5;
+ uint constant DOW_SAT = 6;
+ uint constant DOW_SUN = 7;
+
+ // ------------------------------------------------------------------------
+ // Calculate the number of days from 1970/01/01 to year/month/day using
+ // the date conversion algorithm from
+ // https://aa.usno.navy.mil/faq/JD_formula.html
+ // and subtracting the offset 2440588 so that 1970/01/01 is day 0
+ //
+ // days = day
+ // - 32075
+ // + 1461 * (year + 4800 + (month - 14) / 12) / 4
+ // + 367 * (month - 2 - (month - 14) / 12 * 12) / 12
+ // - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4
+ // - offset
+ // ------------------------------------------------------------------------
+ function _daysFromDate(uint year, uint month, uint day) internal pure returns (uint _days) {
+ require(year >= 1970);
+ int _year = int(year);
+ int _month = int(month);
+ int _day = int(day);
+
+ int __days = _day
+ - 32075
+ + 1461 * (_year + 4800 + (_month - 14) / 12) / 4
+ + 367 * (_month - 2 - (_month - 14) / 12 * 12) / 12
+ - 3 * ((_year + 4900 + (_month - 14) / 12) / 100) / 4
+ - OFFSET19700101;
+
+ _days = uint(__days);
+ }
+
+ // ------------------------------------------------------------------------
+ // Calculate year/month/day from the number of days since 1970/01/01 using
+ // the date conversion algorithm from
+ // http://aa.usno.navy.mil/faq/docs/JD_Formula.php
+ // and adding the offset 2440588 so that 1970/01/01 is day 0
+ //
+ // int L = days + 68569 + offset
+ // int N = 4 * L / 146097
+ // L = L - (146097 * N + 3) / 4
+ // year = 4000 * (L + 1) / 1461001
+ // L = L - 1461 * year / 4 + 31
+ // month = 80 * L / 2447
+ // dd = L - 2447 * month / 80
+ // L = month / 11
+ // month = month + 2 - 12 * L
+ // year = 100 * (N - 49) + year + L
+ // ------------------------------------------------------------------------
+ function _daysToDate(uint _days) internal pure returns (uint year, uint month, uint day) {
+ int __days = int(_days);
+
+ int L = __days + 68569 + OFFSET19700101;
+ int N = 4 * L / 146097;
+ L = L - (146097 * N + 3) / 4;
+ int _year = 4000 * (L + 1) / 1461001;
+ L = L - 1461 * _year / 4 + 31;
+ int _month = 80 * L / 2447;
+ int _day = L - 2447 * _month / 80;
+ L = _month / 11;
+ _month = _month + 2 - 12 * L;
+ _year = 100 * (N - 49) + _year + L;
+
+ year = uint(_year);
+ month = uint(_month);
+ day = uint(_day);
+ }
+
+ function timestampFromDate(uint year, uint month, uint day) internal pure returns (uint timestamp) {
+ timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY;
+ }
+ function timestampFromDateTime(uint year, uint month, uint day, uint hour, uint minute, uint second) internal pure returns (uint timestamp) {
+ timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR + minute * SECONDS_PER_MINUTE + second;
+ }
+ function timestampToDate(uint timestamp) internal pure returns (uint year, uint month, uint day) {
+ (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
+ }
+ function timestampToDateTime(uint timestamp) internal pure returns (uint year, uint month, uint day, uint hour, uint minute, uint second) {
+ (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
+ uint secs = timestamp % SECONDS_PER_DAY;
+ hour = secs / SECONDS_PER_HOUR;
+ secs = secs % SECONDS_PER_HOUR;
+ minute = secs / SECONDS_PER_MINUTE;
+ second = secs % SECONDS_PER_MINUTE;
+ }
+
+ function isValidDate(uint year, uint month, uint day) internal pure returns (bool valid) {
+ if (year >= 1970 && month > 0 && month <= 12) {
+ uint daysInMonth = _getDaysInMonth(year, month);
+ if (day > 0 && day <= daysInMonth) {
+ valid = true;
+ }
+ }
+ }
+ function isValidDateTime(uint year, uint month, uint day, uint hour, uint minute, uint second) internal pure returns (bool valid) {
+ if (isValidDate(year, month, day)) {
+ if (hour < 24 && minute < 60 && second < 60) {
+ valid = true;
+ }
+ }
+ }
+ function isLeapYear(uint timestamp) internal pure returns (bool leapYear) {
+ (uint year,,) = _daysToDate(timestamp / SECONDS_PER_DAY);
+ leapYear = _isLeapYear(year);
+ }
+ function _isLeapYear(uint year) internal pure returns (bool leapYear) {
+ leapYear = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
+ }
+ function isWeekDay(uint timestamp) internal pure returns (bool weekDay) {
+ weekDay = getDayOfWeek(timestamp) <= DOW_FRI;
+ }
+ function isWeekEnd(uint timestamp) internal pure returns (bool weekEnd) {
+ weekEnd = getDayOfWeek(timestamp) >= DOW_SAT;
+ }
+ function getDaysInMonth(uint timestamp) internal pure returns (uint daysInMonth) {
+ (uint year, uint month,) = _daysToDate(timestamp / SECONDS_PER_DAY);
+ daysInMonth = _getDaysInMonth(year, month);
+ }
+ function _getDaysInMonth(uint year, uint month) internal pure returns (uint daysInMonth) {
+ if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
+ daysInMonth = 31;
+ } else if (month != 2) {
+ daysInMonth = 30;
+ } else {
+ daysInMonth = _isLeapYear(year) ? 29 : 28;
+ }
+ }
+ // 1 = Monday, 7 = Sunday
+ function getDayOfWeek(uint timestamp) internal pure returns (uint dayOfWeek) {
+ uint _days = timestamp / SECONDS_PER_DAY;
+ dayOfWeek = (_days + 3) % 7 + 1;
+ }
+
+ function getYear(uint timestamp) internal pure returns (uint year) {
+ (year,,) = _daysToDate(timestamp / SECONDS_PER_DAY);
+ }
+ function getMonth(uint timestamp) internal pure returns (uint month) {
+ (,month,) = _daysToDate(timestamp / SECONDS_PER_DAY);
+ }
+ function getDay(uint timestamp) internal pure returns (uint day) {
+ (,,day) = _daysToDate(timestamp / SECONDS_PER_DAY);
+ }
+ function getHour(uint timestamp) internal pure returns (uint hour) {
+ uint secs = timestamp % SECONDS_PER_DAY;
+ hour = secs / SECONDS_PER_HOUR;
+ }
+ function getMinute(uint timestamp) internal pure returns (uint minute) {
+ uint secs = timestamp % SECONDS_PER_HOUR;
+ minute = secs / SECONDS_PER_MINUTE;
+ }
+ function getSecond(uint timestamp) internal pure returns (uint second) {
+ second = timestamp % SECONDS_PER_MINUTE;
+ }
+
+ function addYears(uint timestamp, uint _years) internal pure returns (uint newTimestamp) {
+ (uint year, uint month, uint day) = _daysToDate(timestamp / SECONDS_PER_DAY);
+ year += _years;
+ uint daysInMonth = _getDaysInMonth(year, month);
+ if (day > daysInMonth) {
+ day = daysInMonth;
+ }
+ newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY;
+ require(newTimestamp >= timestamp);
+ }
+ function addMonths(uint timestamp, uint _months) internal pure returns (uint newTimestamp) {
+ (uint year, uint month, uint day) = _daysToDate(timestamp / SECONDS_PER_DAY);
+ month += _months;
+ year += (month - 1) / 12;
+ month = (month - 1) % 12 + 1;
+ uint daysInMonth = _getDaysInMonth(year, month);
+ if (day > daysInMonth) {
+ day = daysInMonth;
+ }
+ newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY;
+ require(newTimestamp >= timestamp);
+ }
+ function addDays(uint timestamp, uint _days) internal pure returns (uint newTimestamp) {
+ newTimestamp = timestamp + _days * SECONDS_PER_DAY;
+ require(newTimestamp >= timestamp);
+ }
+ function addHours(uint timestamp, uint _hours) internal pure returns (uint newTimestamp) {
+ newTimestamp = timestamp + _hours * SECONDS_PER_HOUR;
+ require(newTimestamp >= timestamp);
+ }
+ function addMinutes(uint timestamp, uint _minutes) internal pure returns (uint newTimestamp) {
+ newTimestamp = timestamp + _minutes * SECONDS_PER_MINUTE;
+ require(newTimestamp >= timestamp);
+ }
+ function addSeconds(uint timestamp, uint _seconds) internal pure returns (uint newTimestamp) {
+ newTimestamp = timestamp + _seconds;
+ require(newTimestamp >= timestamp);
+ }
+
+ function subYears(uint timestamp, uint _years) internal pure returns (uint newTimestamp) {
+ (uint year, uint month, uint day) = _daysToDate(timestamp / SECONDS_PER_DAY);
+ year -= _years;
+ uint daysInMonth = _getDaysInMonth(year, month);
+ if (day > daysInMonth) {
+ day = daysInMonth;
+ }
+ newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY;
+ require(newTimestamp <= timestamp);
+ }
+ function subMonths(uint timestamp, uint _months) internal pure returns (uint newTimestamp) {
+ (uint year, uint month, uint day) = _daysToDate(timestamp / SECONDS_PER_DAY);
+ uint yearMonth = year * 12 + (month - 1) - _months;
+ year = yearMonth / 12;
+ month = yearMonth % 12 + 1;
+ uint daysInMonth = _getDaysInMonth(year, month);
+ if (day > daysInMonth) {
+ day = daysInMonth;
+ }
+ newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY;
+ require(newTimestamp <= timestamp);
+ }
+ function subDays(uint timestamp, uint _days) internal pure returns (uint newTimestamp) {
+ newTimestamp = timestamp - _days * SECONDS_PER_DAY;
+ require(newTimestamp <= timestamp);
+ }
+ function subHours(uint timestamp, uint _hours) internal pure returns (uint newTimestamp) {
+ newTimestamp = timestamp - _hours * SECONDS_PER_HOUR;
+ require(newTimestamp <= timestamp);
+ }
+ function subMinutes(uint timestamp, uint _minutes) internal pure returns (uint newTimestamp) {
+ newTimestamp = timestamp - _minutes * SECONDS_PER_MINUTE;
+ require(newTimestamp <= timestamp);
+ }
+ function subSeconds(uint timestamp, uint _seconds) internal pure returns (uint newTimestamp) {
+ newTimestamp = timestamp - _seconds;
+ require(newTimestamp <= timestamp);
+ }
+
+ function diffYears(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _years) {
+ require(fromTimestamp <= toTimestamp);
+ (uint fromYear,,) = _daysToDate(fromTimestamp / SECONDS_PER_DAY);
+ (uint toYear,,) = _daysToDate(toTimestamp / SECONDS_PER_DAY);
+ _years = toYear - fromYear;
+ }
+ function diffMonths(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _months) {
+ require(fromTimestamp <= toTimestamp);
+ (uint fromYear, uint fromMonth,) = _daysToDate(fromTimestamp / SECONDS_PER_DAY);
+ (uint toYear, uint toMonth,) = _daysToDate(toTimestamp / SECONDS_PER_DAY);
+ _months = toYear * 12 + toMonth - fromYear * 12 - fromMonth;
+ }
+ function diffDays(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _days) {
+ require(fromTimestamp <= toTimestamp);
+ _days = (toTimestamp - fromTimestamp) / SECONDS_PER_DAY;
+ }
+ function diffHours(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _hours) {
+ require(fromTimestamp <= toTimestamp);
+ _hours = (toTimestamp - fromTimestamp) / SECONDS_PER_HOUR;
+ }
+ function diffMinutes(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _minutes) {
+ require(fromTimestamp <= toTimestamp);
+ _minutes = (toTimestamp - fromTimestamp) / SECONDS_PER_MINUTE;
+ }
+ function diffSeconds(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _seconds) {
+ require(fromTimestamp <= toTimestamp);
+ _seconds = toTimestamp - fromTimestamp;
+ }
+}
+
+type EncodedTimeShift is bytes6;
+
+struct TimeShift {
+ TimeShiftLib.TimeUnit unit;
+ int40 offset;
+}
+
+function encode(TimeShift memory shift) pure returns (EncodedTimeShift) {
+ return EncodedTimeShift.wrap(bytes6(abi.encodePacked(uint8(shift.unit), shift.offset)));
+}
+
+function decode(EncodedTimeShift encoded) pure returns (TimeShiftLib.TimeUnit unit, int40 offset) {
+ uint48 encodedValue = uint48(EncodedTimeShift.unwrap(encoded));
+ unit = TimeShiftLib.TimeUnit(uint8(encodedValue >> 40));
+ offset = int40(uint40(uint48(encodedValue)));
+}
+
+// Note this is an efficient way to check for inherited time shifts
+// Even if an offset is specified, it will be ignored, but it is still
+// considered an inherited time shift
+function isInherited(EncodedTimeShift encoded) pure returns (bool) {
+ return EncodedTimeShift.unwrap(encoded) < 0x010000000000;
+}
+
+// Note this is an efficient way to check for non-recurrent time shifts
+// Any value lower than 0x070000000000 is a recurrent time shift
+function isNonRecurrent(EncodedTimeShift encoded) pure returns (bool) {
+ return EncodedTimeShift.unwrap(encoded) > 0x06ffffffffff;
+}
+
+using { decode, isInherited, isNonRecurrent } for EncodedTimeShift global;
+using { encode } for TimeShift global;
+
+library TimeShiftLib {
+ using TimeShiftLib for *;
+
+ enum TimeUnit {
+ Inherit,
+ Daily, // 1
+ Weekly, // 2
+ Monthly, // 3
+ Quarterly, // 4
+ Semiyearly, // 5
+ Yearly, // 6
+ NonRecurrent
+ }
+
+ error InvalidTimeShift();
+
+ // solhint-disable-next-line code-complexity
+ function applyShift(uint40 time, EncodedTimeShift shift) internal pure returns (uint40) {
+ (TimeUnit unit, int40 offset) = shift.decode();
+
+ if (unit == TimeUnit.NonRecurrent) {
+ // Ensure offset is positive and in the future
+ // (We cast to int48 so we don't overflow for any possible uint40 value)
+ if (int48(offset) > int48(uint48(time))) {
+ return uint40(offset);
+ } else {
+ revert InvalidTimeShift();
+ }
+ }
+
+ uint40 realTime = uint40(int40(time) + offset);
+ (uint256 y, uint256 m, uint256 d) = realTime.toDate();
+
+ // Gas opt: split branches for shorter paths and handle the most common cases first
+ if (uint8(unit) > 3) {
+ if (unit == TimeUnit.Yearly) {
+ (y, m, d) = (y + 1, 1, 1);
+ } else if (unit == TimeUnit.Quarterly) {
+ (y, m, d) = m < 10 ? (y, (1 + (m - 1) / 3) * 3 + 1, 1) : (y + 1, 1, 1);
+ } else if (unit == TimeUnit.Semiyearly) {
+ (y, m, d) = m < 7 ? (y, 7, 1) : (y + 1, 1, 1);
+ } else {
+ revert InvalidTimeShift();
+ }
+ } else {
+ if (unit == TimeUnit.Monthly) {
+ (y, m, d) = m < 12 ? (y, m + 1, 1) : (y + 1, 1, 1);
+ } else if (unit == TimeUnit.Weekly) {
+ (y, m, d) = addDays(y, m, d, 8 - BokkyPooBahsDateTimeLibrary.getDayOfWeek(realTime));
+ } else if (unit == TimeUnit.Daily) {
+ (y, m, d) = addDays(y, m, d, 1);
+ } else {
+ revert InvalidTimeShift();
+ }
+ }
+
+ // All time shifts are relative to the beginning of the day UTC before removing the offset
+ uint256 shiftedTs = BokkyPooBahsDateTimeLibrary.timestampFromDateTime(y, m, d, 0, 0, 0);
+ return uint40(int40(uint40(shiftedTs)) - offset);
+ }
+
+ /**
+ * @dev IT WILL ONLY TRANSITION ONE MONTH IF NECESSARY
+ */
+ function addDays(
+ uint256 y,
+ uint256 m,
+ uint256 d,
+ uint256 daysToAdd
+ )
+ private
+ pure
+ returns (uint256, uint256, uint256)
+ {
+ uint256 daysInMonth = BokkyPooBahsDateTimeLibrary._getDaysInMonth(y, m);
+ uint256 d2 = d + daysToAdd;
+
+ return d2 <= daysInMonth ? (y, m, d2) : m < 12 ? (y, m + 1, d2 - daysInMonth) : (y + 1, 1, d2 - daysInMonth);
+ }
+
+ function toDate(uint40 timestamp) internal pure returns (uint256 y, uint256 m, uint256 d) {
+ return BokkyPooBahsDateTimeLibrary._daysToDate(timestamp / 1 days);
+ }
+}
+
+address constant NATIVE_ASSET = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
+uint256 constant NO_PARENT_ID = 0;
+uint256 constant INHERITED_AMOUNT = 0;
+uint40 constant INHERITED_RESET_TIME = 0;
+string constant TRANSFER_SIG = "transfer(address,uint256)";
+
+/**
+ * @title Budget
+ * @author DAOBox (Security@DAOBox.app)
+ * @notice Budgeting module for efficient spending from an Aragon OSx DAO using allowance chains
+ * to delegate spending authority
+ */
+contract Budget is PluginUUPSUpgradeable {
+ bytes32 public constant ROOT_BUDGET_PERMISSION_ID = keccak256("ROOT_BUDGET_PERMISSION");
+
+ using TimeShiftLib for uint40;
+ using SafeERC20 for IERC20;
+
+ struct Allowance {
+ uint256 parentId;
+ uint256 amount;
+ uint256 spent;
+ address token;
+ uint40 nextResetTime;
+ address spender;
+ EncodedTimeShift recurrency;
+ bool isDisabled;
+ }
+
+ mapping(uint256 => Allowance) public allowances;
+ uint256 public allowancesCount;
+ uint256 private nonce;
+
+ event AllowanceCreated(
+ uint256 indexed allowanceId,
+ uint256 indexed parentAllowanceId,
+ address indexed spender,
+ address token,
+ uint256 amount,
+ EncodedTimeShift recurrency,
+ uint40 nextResetTime,
+ string name
+ );
+ event AllowanceStateChanged(uint256 indexed allowanceId, bool isEnabled);
+ event AllowanceAmountChanged(uint256 allowanceId, uint256 amount);
+ event AllowanceSpenderChanged(uint256 allowanceId, address spender);
+ event AllowanceNameChanged(uint256 allowanceId, string name);
+ event PaymentExecuted(
+ uint256 indexed allowanceId,
+ address indexed actor,
+ address token,
+ address indexed to,
+ uint256 amount,
+ uint40 nextResetTime,
+ string description
+ );
+ event MultiPaymentExecuted(
+ uint256 indexed allowanceId,
+ address indexed actor,
+ address token,
+ address[] tos,
+ uint256[] amounts,
+ uint40 nextResetTime,
+ string description
+ );
+ event AllowanceDebited(
+ uint256 indexed allowanceId,
+ address indexed actor,
+ address token,
+ uint256 amount,
+ uint40 nextResetTime,
+ bytes description
+ );
+
+ error UnexistentAllowance(uint256 allowanceId);
+ error DisabledAllowance(uint256 allowanceId);
+ error UnauthorizedNotAllowanceAdmin(uint256 allowanceId);
+ error TokenMismatch(address patentToken, address childToken);
+ error InheritedAmountNotAllowed();
+ error ZeroAmountPayment();
+ error BadInput();
+ error UnauthorizedPaymentExecution(uint256 allowanceId, address actor);
+ error Overbudget(uint256 allowanceId, uint256 amount, uint256 remainingBudget);
+ error PaymentExecutionFailed(uint256 allowanceId, address token, address to, uint256 amount);
+ error NativeValueMismatch();
+ error UnauthorizedNotDao();
+
+ constructor() {
+ _disableInitializers();
+ }
+
+ /// @notice Initializes the plugin when build 1 is installed.
+ function initialize(IDAO _dao) external initializer {
+ __PluginUUPSUpgradeable_init(_dao);
+ nonce = 0;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // ALLOWANCE MANAGEMENT
+ ////////////////////////////////////////////////////////////////////////////////
+
+ /**
+ * @notice Creates a new allowance giving permission to spend funds from the dao to a given address or addresses
+ * with a certain role
+ * @dev Note 1: that child allowances can be greater than the allowed amount of its parent budget and have different
+ * recurrency
+ * Note 2: It is possible to create child allowances for allowances that are disabled (either its parent disabled or
+ * any of its ancestors up to the top-level)
+ * @param parentAllowanceId ID for the parent allowance (value is 0 for top-level allowances without dependencies)
+ * @param spender Address or role identifier of the entities authorized to execute payments from this allowance
+ * @param token Address of the token (must be the same as the parent's token)
+ * @param amount Amount of token that can be spent per period
+ * @param recurrency Unit of time for the allowance spent amount to be reset (value is 0 for the allowance to
+ * inherit its parent's recurrency)
+ * @param name Name of the allowance being created
+ * @return allowanceId ID of the allowance created
+ */
+ // solhint-disable-next-line code-complexity
+ function createAllowance(
+ uint256 parentAllowanceId,
+ address spender,
+ address token,
+ uint256 amount,
+ EncodedTimeShift recurrency,
+ string memory name
+ )
+ public
+ returns (uint256 allowanceId)
+ {
+ uint40 nextResetTime;
+
+ if (spender == address(0) || token == address(0)) {
+ revert BadInput();
+ }
+
+ if (parentAllowanceId == NO_PARENT_ID) {
+ // Top-level allowances can only be created by the dao
+ if (_msgSender() != address(dao())) {
+ revert UnauthorizedNotDao();
+ }
+
+ // We don't allow setting inherited amounts on top-level allowances as
+ // it could be prone to a client-side mistake to send 0 as the amount which will
+ // create an allowance that allows completely wiping the dao (for the token)
+ if (amount == INHERITED_AMOUNT) {
+ revert InheritedAmountNotAllowed();
+ }
+
+ // For top-level allowances, recurrency needs to be set and cannot be zero (inherited)
+ // applyShift reverts with InvalidTimeShift if recurrency is unspecified
+ // Therefore, nextResetTime is always greater than the current time
+ nextResetTime = uint40(block.timestamp).applyShift(recurrency);
+ } else {
+ // Reverts if parentAllowanceId doesn't exist
+ Allowance storage parentAllowance = _getAllowance(parentAllowanceId);
+
+ // Not checking whether the parentAllowance is enabled is an explicit decision
+ // Disabling any allowance in a given allowance chain will result in all its
+ // children not being able to execute payments
+ // This allows for disabling a certain allowance to reconfigure the whole tree
+ // of sub-allowances below it, before enabling it again
+
+ // Sub-allowances can be created by entities authorized to spend from a particular allowance
+ if (_msgSender() != parentAllowance.spender) {
+ revert UnauthorizedNotAllowanceAdmin(parentAllowanceId);
+ }
+
+ if (token != parentAllowance.token) {
+ revert TokenMismatch(parentAllowance.token, token);
+ }
+ // Recurrency can be zero in sub-allowances and is inherited from the parent
+ if (!recurrency.isInherited()) {
+ // If recurrency is not inherited, amount cannot be inherited
+ if (amount == INHERITED_AMOUNT) {
+ revert InheritedAmountNotAllowed();
+ }
+
+ // Will revert with InvalidTimeShift if recurrency is invalid
+ nextResetTime = uint40(block.timestamp).applyShift(recurrency);
+ }
+ }
+
+ // TODO: Check if this is nessaary
+ // Checks that if it is a role flag, a roles instance has been set and the role exists
+ // _validateAuthorizedAddress(spender);
+
+ unchecked {
+ // The index of the first allowance is 1, so NO_PARENT_ID can be 0 (optimization)
+ allowanceId = ++allowancesCount;
+ }
+
+ Allowance storage allowance = allowances[allowanceId];
+ if (parentAllowanceId != NO_PARENT_ID) {
+ allowance.parentId = parentAllowanceId;
+ }
+ if (nextResetTime != INHERITED_RESET_TIME) {
+ allowance.recurrency = recurrency;
+ allowance.nextResetTime = nextResetTime;
+ }
+ allowance.spender = spender;
+ allowance.token = token;
+ allowance.amount = amount;
+
+ emit AllowanceCreated(allowanceId, parentAllowanceId, spender, token, amount, recurrency, nextResetTime, name);
+ }
+
+ /**
+ * @notice Changes the enabled/disabled state of the allowance
+ * @dev Note: Disabling an allowance will implicitly disable payments from all its descendant allowances
+ * @param allowanceId ID of the allowance whose state is being changed
+ * @param isEnabled Whether to enable or disable the allowance
+ */
+ function setAllowanceState(uint256 allowanceId, bool isEnabled) external {
+ Allowance storage allowance = _getAllowanceAndValidateAdmin(allowanceId);
+ allowance.isDisabled = !isEnabled;
+ emit AllowanceStateChanged(allowanceId, isEnabled);
+ }
+
+ /**
+ * @notice Changes the amount that an allowance can spend
+ * @dev Note: It is possible to decrease the amount in an allowance to a smaller amount of what's already been spent
+ * which will cause the allowance not to be able to execute any more payments until it resets (and the new amount
+ * will be enforced)
+ * @param allowanceId ID of the allowance whose amount is being changed
+ * @param amount New allowance amount to be set
+ */
+ function setAllowanceAmount(uint256 allowanceId, uint256 amount) external {
+ Allowance storage allowance = _getAllowanceAndValidateAdmin(allowanceId);
+
+ // Same checks for what allowances can have an inherited amount as in the creation
+ if (amount == INHERITED_AMOUNT && (allowance.parentId == NO_PARENT_ID || !allowance.recurrency.isInherited())) {
+ revert InheritedAmountNotAllowed();
+ }
+
+ allowance.amount = amount;
+ emit AllowanceAmountChanged(allowanceId, amount);
+ }
+
+ /**
+ * @notice Changes the spender of an allowance
+ * @dev Note: Changing the spender also changes who the admin is for all the sub-allowances
+ * @param allowanceId ID of the allowance whose spender is being changed
+ * @param spender New spender account for the allowance
+ */
+ function setAllowanceSpender(uint256 allowanceId, address spender) external {
+ if (spender == address(0)) {
+ revert BadInput();
+ }
+
+ // _validateAuthorizedAddress(spender);
+
+ Allowance storage allowance = _getAllowanceAndValidateAdmin(allowanceId);
+ allowance.spender = spender;
+ emit AllowanceSpenderChanged(allowanceId, spender);
+ }
+
+ /**
+ * @notice Changes the name of an allowance
+ * @dev Note: This has no on-chain side-effects and only emits an event for off-chain consumption
+ * @param allowanceId ID of the allowance whose name is being changed
+ * @param name New name for the allowance
+ */
+ function setAllowanceName(uint256 allowanceId, string memory name) external {
+ _getAllowanceAndValidateAdmin(allowanceId);
+ emit AllowanceNameChanged(allowanceId, name);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // PAYMENT EXECUTION
+ ////////////////////////////////////////////////////////////////////////////////
+
+ /**
+ * @notice Executes a payment from an allowance
+ * @param allowanceId ID of the allowance from which the payment is made
+ * @param to Address that will receive the payment
+ * @param amount Amount of the allowance's token being sent
+ * @param description Description of the payment
+ */
+ function executePayment(
+ uint256 allowanceId,
+ address to,
+ uint256 amount,
+ string memory description
+ )
+ external
+ returns (uint40 nextResetTime)
+ {
+ Allowance storage allowance = _getAllowance(allowanceId);
+
+ if (_msgSender() != allowance.spender) {
+ revert UnauthorizedPaymentExecution(allowanceId, _msgSender());
+ }
+
+ if (amount == 0) {
+ revert ZeroAmountPayment();
+ }
+
+ address token = allowance.token;
+
+ // Make sure the payment is within budget all the way up to its top-level budget
+ (nextResetTime,) = _checkAndUpdateAllowanceChain(allowanceId, amount, add);
+
+ if (!_performTransfer(token, to, amount)) {
+ revert PaymentExecutionFailed(allowanceId, token, to, amount);
+ }
+
+ emit PaymentExecuted(allowanceId, _msgSender(), token, to, amount, nextResetTime, description);
+ }
+
+ function _checkAndUpdateAllowanceChain(
+ uint256 allowanceId,
+ uint256 amount,
+ function(uint256, uint256) pure returns (uint256) op
+ )
+ internal
+ returns (uint40 nextResetTime, bool allowanceResets)
+ {
+ // Can do 'unsafely' as this function only used when allowanceId always points to an allowance which exists
+ // (checked through _getAllowance or a parentId which always exists)
+ Allowance storage allowance = allowances[allowanceId];
+
+ if (allowance.isDisabled) {
+ revert DisabledAllowance(allowanceId);
+ }
+
+ if (allowance.nextResetTime == INHERITED_RESET_TIME) {
+ // Note that since top-level allowances are not allowed to have an inherited reset time,
+ // this branch is only ever executed for sub-allowances (which always have a parentId)
+ (nextResetTime, allowanceResets) = _checkAndUpdateAllowanceChain(allowance.parentId, amount, op);
+ } else {
+ nextResetTime = allowance.nextResetTime;
+
+ // Reset time has past, so we need to reset the allowance
+ if (uint40(block.timestamp) >= nextResetTime) {
+ EncodedTimeShift recurrency = allowance.recurrency;
+ // For a non-recurrent allowance, after the reset time has passed,
+ // the allowance is disabled and cannot be used anymore
+ if (recurrency.isNonRecurrent()) {
+ revert DisabledAllowance(allowanceId);
+ } else {
+ allowanceResets = true;
+ nextResetTime = uint40(block.timestamp).applyShift(recurrency);
+ allowance.nextResetTime = nextResetTime;
+ }
+ }
+
+ // Recursively update all parent allowances before checking the amounts (inheritance forces this)
+ if (allowance.parentId != NO_PARENT_ID) {
+ _checkAndUpdateAllowanceChain(allowance.parentId, amount, op);
+ }
+ }
+
+ if (allowance.amount != INHERITED_AMOUNT) {
+ uint256 spentAfter = op(allowanceResets ? 0 : allowance.spent, amount);
+ if (spentAfter > allowance.amount) {
+ revert Overbudget(allowanceId, amount, allowance.amount - allowance.spent);
+ }
+
+ allowance.spent = spentAfter;
+ }
+ }
+
+ function _performTransfer(address token, address to, uint256 amount) internal returns (bool) {
+ if (token == NATIVE_ASSET) {
+ IDAO.Action[] memory actions = new IDAO.Action[](1);
+ actions[0] = IDAO.Action({ to: to, value: amount, data: "" });
+
+ (, uint256 failureMap) =
+ dao().execute({ _callId: bytes32(nonce++), _actions: actions, _allowFailureMap: 0 });
+ return failureMap == 0 ? true : false;
+ } else {
+ IDAO.Action[] memory actions = new IDAO.Action[](1);
+ bytes memory transferFunctionData = abi.encodeWithSignature(TRANSFER_SIG, to, amount);
+
+ actions[0] = IDAO.Action({ to: token, value: 0, data: transferFunctionData });
+
+ (, uint256 failureMap) =
+ dao().execute({ _callId: bytes32(nonce++), _actions: actions, _allowFailureMap: 0 });
+ return failureMap == 0 ? true : false;
+ }
+ }
+
+ /**
+ * @notice Executes multiple payments from an allowance
+ * @param allowanceId ID of the allowance from which payments are made
+ * @param tos Addresses that will receive the payment
+ * @param amounts Amounts of the allowance's token being sent
+ * @param description Description of the payments
+ */
+ function executeMultiPayment(
+ uint256 allowanceId,
+ address[] calldata tos,
+ uint256[] calldata amounts,
+ string memory description
+ )
+ external
+ returns (uint40 nextResetTime)
+ {
+ Allowance storage allowance = _getAllowance(allowanceId);
+
+ if (_msgSender() != allowance.spender) {
+ revert UnauthorizedPaymentExecution(allowanceId, _msgSender());
+ }
+
+ uint256 count = tos.length;
+ if (count == 0 || count != amounts.length) {
+ revert BadInput();
+ }
+
+ uint256 totalAmount = 0;
+ for (uint256 i = 0; i < count;) {
+ if (amounts[i] == 0) {
+ revert ZeroAmountPayment();
+ }
+
+ totalAmount += amounts[i];
+
+ unchecked {
+ i++;
+ }
+ }
+
+ (nextResetTime,) = _checkAndUpdateAllowanceChain(allowanceId, totalAmount, add);
+
+ address token = allowance.token;
+
+ for (uint256 i = 0; i < count; i++) {
+ if (!_performTransfer(token, tos[i], amounts[i])) {
+ revert PaymentExecutionFailed(allowanceId, token, tos[i], amounts[i]);
+ }
+ }
+
+ emit MultiPaymentExecuted(allowanceId, _msgSender(), token, tos, amounts, nextResetTime, description);
+ }
+
+ /**
+ * @notice Deposit funds into dao debiting funds into an allowance. Frequently used to return a payment
+ * @dev Anyone is allowed to perform this action, independently of whether they could have spent funds in the first
+ * place
+ * @param allowanceId ID of the allowance to be debited (along with its ancester tree)
+ * @param amount Amount being debited
+ * @param description Description of the debit
+ */
+ function debitAllowance(
+ uint256 allowanceId,
+ uint256 amount,
+ bytes calldata description
+ )
+ external
+ payable
+ returns (uint40 nextResetTime)
+ {
+ Allowance storage allowance = _getAllowance(allowanceId);
+ address actor = _msgSender();
+ address payable safeAddr = payable(address(dao()));
+ uint256 balanceDelta = 0;
+
+ // Since funds are going to the dao which is trusted we don't need to follow checks-effects-interactions
+ // A malicious token could re-enter, but it would only have effects in allowances for that bad token
+ // And we don't need to worry about 'callbacks' since the dao is always the receiver and shouldn't do it
+ if (allowance.token != NATIVE_ASSET) {
+ if (msg.value != 0) {
+ revert NativeValueMismatch();
+ }
+
+ IERC20 token = IERC20(allowance.token);
+ uint256 prevBalance = token.balanceOf(safeAddr);
+ token.safeTransferFrom(actor, safeAddr, amount);
+ balanceDelta = token.balanceOf(safeAddr) - prevBalance;
+ } else {
+ if (msg.value != amount) {
+ revert NativeValueMismatch();
+ }
+
+ safeAddr.transfer(amount);
+ balanceDelta = amount; // For native asset transfers, assume balance delta is the amount
+ }
+
+ (nextResetTime,) = _checkAndUpdateAllowanceChain(allowanceId, balanceDelta, zeroCappedSub);
+
+ emit AllowanceDebited(allowanceId, actor, allowance.token, amount, nextResetTime, description);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // INTERNAL FUNCTIONS
+ ////////////////////////////////////////////////////////////////////////////////
+
+ function _getAllowance(uint256 allowanceId) internal view returns (Allowance storage allowance) {
+ allowance = allowances[allowanceId];
+
+ if (allowance.spender == address(0)) {
+ revert UnexistentAllowance(allowanceId);
+ }
+ }
+
+ function _getAllowanceAndValidateAdmin(uint256 allowanceId) internal view returns (Allowance storage allowance) {
+ allowance = _getAllowance(allowanceId);
+ if (!_isAdminOnAllowance(allowance, _msgSender())) {
+ revert UnauthorizedNotAllowanceAdmin(allowance.parentId);
+ }
+ }
+
+ function isAdminOnAllowance(uint256 allowanceId, address actor) public view returns (bool) {
+ return _isAdminOnAllowance(_getAllowance(allowanceId), actor);
+ }
+
+ function _isAdminOnAllowance(Allowance storage allowance, address actor) internal view returns (bool) {
+ // Changes to the allowance state can be done by the same entity that could
+ // create that allowance in the first place (a spender of the parent allowance)
+ // In the case of top-level allowances, only the dao can enable/disable them
+ // For child allowances, spenders of the parent can change the state of the child
+ uint256 parentId = allowance.parentId;
+ return parentId == NO_PARENT_ID ? actor == address(dao()) : actor == allowances[parentId].spender;
+ }
+
+ function add(uint256 a, uint256 b) internal pure returns (uint256) {
+ return a + b;
+ }
+
+ function zeroCappedSub(uint256 a, uint256 b) internal pure returns (uint256) {
+ return a > b ? a - b : 0;
+ }
+
+ /// @notice This empty reserved space is put in place to allow future versions to add new variables without shifting
+ /// down storage in the inheritance chain (see [OpenZepplins guide about storage
+ /// gaps](https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps)).
+ uint256[50] private __gap;
+}
+
diff --git a/packages/contracts/package.json b/packages/contracts/package.json
new file mode 100644
index 0000000..5bf6c96
--- /dev/null
+++ b/packages/contracts/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "@daobox/budget",
+ "description": "",
+ "version": "1.0.0",
+ "author": {
+ "name": "DAObox",
+ "url": "https://github.com/DAObox"
+ },
+ "devDependencies": {
+ "prettier": "^3.0.0"
+ },
+ "keywords": [
+ "blockchain",
+ "ethereum",
+ "forge",
+ "foundry",
+ "smart-contracts",
+ "solidity",
+ "aragon",
+ "osx",
+ "dao",
+ "daobox"
+ ],
+ "private": true,
+ "scripts": {
+ "clean": "rm -rf cache out",
+ "build": "forge build",
+ "lint": "pnpm lint:sol && pnpm prettier:check",
+ "lint:sol": "forge fmt --check && pnpm solhint {script,src,test}/**/*.sol",
+ "prettier:check": "prettier --check **/*.{json,md,yml} --ignore-path=.prettierignore",
+ "prettier:write": "prettier --write **/*.{json,md,yml} --ignore-path=.prettierignore",
+ "test": "forge test -vvv",
+ "test:coverage": "forge coverage",
+ "test:coverage:report": "forge coverage --report lcov && genhtml lcov.info --branch-coverage --output-dir coverage"
+ },
+ "dependencies": {
+ "solhint": "^3.6.2"
+ }
+}
diff --git a/packages/contracts/pnpm-lock.yaml b/packages/contracts/pnpm-lock.yaml
new file mode 100644
index 0000000..464f747
--- /dev/null
+++ b/packages/contracts/pnpm-lock.yaml
@@ -0,0 +1,468 @@
+lockfileVersion: '6.0'
+
+dependencies:
+ solhint:
+ specifier: ^3.6.2
+ version: 3.6.2
+
+devDependencies:
+ prettier:
+ specifier: ^3.0.0
+ version: 3.0.0
+
+packages:
+
+ /@babel/code-frame@7.22.5:
+ resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/highlight': 7.22.5
+ dev: false
+
+ /@babel/helper-validator-identifier@7.22.5:
+ resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/highlight@7.22.5:
+ resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-validator-identifier': 7.22.5
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ dev: false
+
+ /@solidity-parser/parser@0.16.1:
+ resolution: {integrity: sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw==}
+ dependencies:
+ antlr4ts: 0.5.0-alpha.4
+ dev: false
+
+ /ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ 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
+ dev: false
+
+ /ajv@8.12.0:
+ resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
+ dev: false
+
+ /ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+ dependencies:
+ color-convert: 1.9.3
+ dev: false
+
+ /ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+ dependencies:
+ color-convert: 2.0.1
+ dev: false
+
+ /antlr4@4.13.0:
+ resolution: {integrity: sha512-zooUbt+UscjnWyOrsuY/tVFL4rwrAGwOivpQmvmUDE22hy/lUA467Rc1rcixyRwcRUIXFYBwv7+dClDSHdmmew==}
+ engines: {node: '>=16'}
+ dev: false
+
+ /antlr4ts@0.5.0-alpha.4:
+ resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==}
+ dev: false
+
+ /argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ dev: false
+
+ /ast-parents@0.0.1:
+ resolution: {integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==}
+ dev: false
+
+ /astral-regex@2.0.0:
+ resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ dev: false
+
+ /brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ dependencies:
+ balanced-match: 1.0.2
+ dev: false
+
+ /callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+ dev: false
+
+ /chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: false
+
+ /color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+ dependencies:
+ color-name: 1.1.3
+ dev: false
+
+ /color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+ dependencies:
+ color-name: 1.1.4
+ dev: false
+
+ /color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+ dev: false
+
+ /color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ dev: false
+
+ /commander@10.0.1:
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
+ engines: {node: '>=14'}
+ dev: false
+
+ /cosmiconfig@8.2.0:
+ resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==}
+ engines: {node: '>=14'}
+ dependencies:
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ dev: false
+
+ /emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ dev: false
+
+ /error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+ dependencies:
+ is-arrayish: 0.2.1
+ dev: false
+
+ /escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+ dev: false
+
+ /fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ dev: false
+
+ /fast-diff@1.3.0:
+ resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
+ dev: false
+
+ /fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ dev: false
+
+ /fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ dev: false
+
+ /glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+ dev: false
+
+ /has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /ignore@5.2.4:
+ resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
+ engines: {node: '>= 4'}
+ dev: false
+
+ /import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+ dev: false
+
+ /inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ dev: false
+
+ /inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ dev: false
+
+ /is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+ dev: false
+
+ /is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ dev: false
+
+ /js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ dev: false
+
+ /json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+ dev: false
+
+ /json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ dev: false
+
+ /json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ dev: false
+
+ /lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+ dev: false
+
+ /lodash.truncate@4.4.2:
+ resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==}
+ dev: false
+
+ /lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ dev: false
+
+ /lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+ dependencies:
+ yallist: 4.0.0
+ dev: false
+
+ /minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: false
+
+ /once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+ dev: false
+
+ /parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+ dependencies:
+ callsites: 3.1.0
+ dev: false
+
+ /parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@babel/code-frame': 7.22.5
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+ dev: false
+
+ /path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /pluralize@8.0.0:
+ resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /prettier@3.0.0:
+ resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
+
+ /punycode@2.3.0:
+ resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /semver@7.5.4:
+ resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ lru-cache: 6.0.0
+ dev: false
+
+ /slice-ansi@4.0.0:
+ resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+ dev: false
+
+ /solhint@3.6.2:
+ resolution: {integrity: sha512-85EeLbmkcPwD+3JR7aEMKsVC9YrRSxd4qkXuMzrlf7+z2Eqdfm1wHWq1ffTuo5aDhoZxp2I9yF3QkxZOxOL7aQ==}
+ hasBin: true
+ dependencies:
+ '@solidity-parser/parser': 0.16.1
+ ajv: 6.12.6
+ antlr4: 4.13.0
+ ast-parents: 0.0.1
+ chalk: 4.1.2
+ commander: 10.0.1
+ cosmiconfig: 8.2.0
+ fast-diff: 1.3.0
+ glob: 8.1.0
+ ignore: 5.2.4
+ js-yaml: 4.1.0
+ lodash: 4.17.21
+ pluralize: 8.0.0
+ semver: 7.5.4
+ strip-ansi: 6.0.1
+ table: 6.8.1
+ text-table: 0.2.0
+ optionalDependencies:
+ prettier: 2.8.8
+ dev: false
+
+ /string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+ dev: false
+
+ /strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+ dev: false
+
+ /supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+ dependencies:
+ has-flag: 3.0.0
+ dev: false
+
+ /supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+ dev: false
+
+ /table@6.8.1:
+ resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==}
+ engines: {node: '>=10.0.0'}
+ dependencies:
+ ajv: 8.12.0
+ lodash.truncate: 4.4.2
+ slice-ansi: 4.0.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: false
+
+ /text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ dev: false
+
+ /uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ dependencies:
+ punycode: 2.3.0
+ dev: false
+
+ /wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ dev: false
+
+ /yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ dev: false
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
diff --git a/remappings.txt b/packages/contracts/remappings.txt
similarity index 92%
rename from remappings.txt
rename to packages/contracts/remappings.txt
index 8b96bd1..f113f1d 100644
--- a/remappings.txt
+++ b/packages/contracts/remappings.txt
@@ -2,6 +2,8 @@
forge-std/=lib/forge-std/src/
@aragon/osx/=lib/osx/packages/contracts/src
datetime/=lib/BokkyPooBahsDateTimeLibrary/contracts
+@ensdomains/ens-contracts/=lib/ens-contracts/
+
@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/
@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/
diff --git a/src/Budget.sol b/packages/contracts/src/Budget.sol
similarity index 100%
rename from src/Budget.sol
rename to packages/contracts/src/Budget.sol
diff --git a/src/BudgetSetup.sol b/packages/contracts/src/BudgetSetup.sol
similarity index 100%
rename from src/BudgetSetup.sol
rename to packages/contracts/src/BudgetSetup.sol
diff --git a/packages/contracts/src/Migration.sol b/packages/contracts/src/Migration.sol
new file mode 100644
index 0000000..1a2dc0e
--- /dev/null
+++ b/packages/contracts/src/Migration.sol
@@ -0,0 +1,6 @@
+// SPDX-License-Identifier: SEE LICENSE IN LICENSE
+pragma solidity ^0.8.17;
+
+import { PluginSetupProcessor } from "@aragon/osx/framework/plugin/setup/PluginSetupProcessor.sol";
+
+import { TokenVoting } from "@aragon/osx/plugins/governance/majority-voting/token/TokenVoting.sol";
diff --git a/src/TimeShiftLib.sol b/packages/contracts/src/TimeShiftLib.sol
similarity index 100%
rename from src/TimeShiftLib.sol
rename to packages/contracts/src/TimeShiftLib.sol
diff --git a/packages/contracts/src/metadata/build-metadata.json b/packages/contracts/src/metadata/build-metadata.json
new file mode 100644
index 0000000..6a4b417
--- /dev/null
+++ b/packages/contracts/src/metadata/build-metadata.json
@@ -0,0 +1,20 @@
+{
+ "ui": {},
+ "change": "NA",
+ "pluginSetup": {
+ "prepareInstallation": {
+ "description": "No input is required for the installation.",
+ "inputs": []
+ },
+ "prepareUpdate": {
+ "1": {
+ "description": "No input is required for the update.",
+ "inputs": []
+ }
+ },
+ "prepareUninstallation": {
+ "description": "No input is required for the uninstallation.",
+ "inputs": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/metadata/release-metadata.json b/packages/contracts/src/metadata/release-metadata.json
similarity index 98%
rename from src/metadata/release-metadata.json
rename to packages/contracts/src/metadata/release-metadata.json
index 804496a..cbdeba1 100644
--- a/src/metadata/release-metadata.json
+++ b/packages/contracts/src/metadata/release-metadata.json
@@ -2,4 +2,4 @@
"name": "Budget",
"description": "Budget is a Plugin for creating nested allowances on an Aragon OSx DAO",
"images": {}
-}
+}
\ No newline at end of file
diff --git a/test/Budget.t.sol b/packages/contracts/test/Budget.t.sol
similarity index 100%
rename from test/Budget.t.sol
rename to packages/contracts/test/Budget.t.sol
diff --git a/test/TimeShiftLib.t.sol b/packages/contracts/test/TimeShiftLib.t.sol
similarity index 100%
rename from test/TimeShiftLib.t.sol
rename to packages/contracts/test/TimeShiftLib.t.sol
diff --git a/test/base/TestnetTokenFaucet.sol b/packages/contracts/test/base/TestnetTokenFaucet.sol
similarity index 100%
rename from test/base/TestnetTokenFaucet.sol
rename to packages/contracts/test/base/TestnetTokenFaucet.sol
diff --git a/test/base/TribeTest.sol b/packages/contracts/test/base/TribeTest.sol
similarity index 100%
rename from test/base/TribeTest.sol
rename to packages/contracts/test/base/TribeTest.sol
diff --git a/packages/dapp/.eslintrc.json b/packages/dapp/.eslintrc.json
new file mode 100644
index 0000000..bffb357
--- /dev/null
+++ b/packages/dapp/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": "next/core-web-vitals"
+}
diff --git a/packages/dapp/.gitignore b/packages/dapp/.gitignore
new file mode 100644
index 0000000..8f322f0
--- /dev/null
+++ b/packages/dapp/.gitignore
@@ -0,0 +1,35 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/packages/dapp/.vscode/settings.json b/packages/dapp/.vscode/settings.json
new file mode 100644
index 0000000..3662b37
--- /dev/null
+++ b/packages/dapp/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "typescript.tsdk": "node_modules/typescript/lib"
+}
\ No newline at end of file
diff --git a/packages/dapp/LICENSE b/packages/dapp/LICENSE
new file mode 100644
index 0000000..7f91f84
--- /dev/null
+++ b/packages/dapp/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 Next UI
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/dapp/README.md b/packages/dapp/README.md
new file mode 100644
index 0000000..38f323c
--- /dev/null
+++ b/packages/dapp/README.md
@@ -0,0 +1,40 @@
+# Next.js & NextUI Template
+
+This is a template for creating applications using Next.js 13 (app directory) and NextUI (v2).
+
+## Technologies Used
+
+- [Next.js 13](https://nextjs.org/docs/getting-started)
+- [NextUI v2](https://nextui.org/)
+- [Tailwind CSS](https://tailwindcss.com/)
+- [Tailwind Variants](https://tailwind-variants.org)
+- [TypeScript](https://www.typescriptlang.org/)
+- [Framer Motion](https://www.framer.com/motion/)
+- [next-themes](https://github.com/pacocoursey/next-themes)
+
+## How to Use
+
+
+### Use the template with create-next-app
+
+To create a new project based on this template using `create-next-app`, run the following command:
+
+```bash
+npx create-next-app -e https://github.com/nextui-org/next-app-template
+```
+
+### Install dependencies
+
+```bash
+npm install
+```
+
+### Run the development server
+
+```bash
+npm run dev
+```
+
+## License
+
+Licensed under the [MIT license](https://github.com/nextui-org/next-app-template/blob/main/LICENSE).
\ No newline at end of file
diff --git a/packages/dapp/app/about/layout.tsx b/packages/dapp/app/about/layout.tsx
new file mode 100644
index 0000000..d5f6271
--- /dev/null
+++ b/packages/dapp/app/about/layout.tsx
@@ -0,0 +1,13 @@
+export default function AboutLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+ );
+}
diff --git a/packages/dapp/app/about/page.tsx b/packages/dapp/app/about/page.tsx
new file mode 100644
index 0000000..596ce4f
--- /dev/null
+++ b/packages/dapp/app/about/page.tsx
@@ -0,0 +1,9 @@
+import { title } from "@/components/primitives";
+
+export default function AboutPage() {
+ return (
+
+
About
+
+ );
+}
diff --git a/packages/dapp/app/blog/layout.tsx b/packages/dapp/app/blog/layout.tsx
new file mode 100644
index 0000000..45deef1
--- /dev/null
+++ b/packages/dapp/app/blog/layout.tsx
@@ -0,0 +1,13 @@
+export default function BlogLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+ );
+}
diff --git a/packages/dapp/app/blog/page.tsx b/packages/dapp/app/blog/page.tsx
new file mode 100644
index 0000000..05c991d
--- /dev/null
+++ b/packages/dapp/app/blog/page.tsx
@@ -0,0 +1,9 @@
+import { title } from "@/components/primitives";
+
+export default function BlogPage() {
+ return (
+
+
Blog
+
+ );
+}
diff --git a/packages/dapp/app/docs/layout.tsx b/packages/dapp/app/docs/layout.tsx
new file mode 100644
index 0000000..a2d8b0a
--- /dev/null
+++ b/packages/dapp/app/docs/layout.tsx
@@ -0,0 +1,13 @@
+export default function DocsLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+ );
+}
diff --git a/packages/dapp/app/docs/page.tsx b/packages/dapp/app/docs/page.tsx
new file mode 100644
index 0000000..d10d2f5
--- /dev/null
+++ b/packages/dapp/app/docs/page.tsx
@@ -0,0 +1,9 @@
+import { title } from "@/components/primitives";
+
+export default function DocsPage() {
+ return (
+
+
Docs
+
+ );
+}
diff --git a/packages/dapp/app/error.tsx b/packages/dapp/app/error.tsx
new file mode 100644
index 0000000..63b236c
--- /dev/null
+++ b/packages/dapp/app/error.tsx
@@ -0,0 +1,30 @@
+'use client'
+
+import { useEffect } from 'react'
+
+export default function Error({
+ error,
+ reset,
+}: {
+ error: Error
+ reset: () => void
+}) {
+ useEffect(() => {
+ // Log the error to an error reporting service
+ console.error(error)
+ }, [error])
+
+ return (
+
+
Something went wrong!
+ reset()
+ }
+ >
+ Try again
+
+
+ )
+}
\ No newline at end of file
diff --git a/packages/dapp/app/layout.tsx b/packages/dapp/app/layout.tsx
new file mode 100644
index 0000000..103a085
--- /dev/null
+++ b/packages/dapp/app/layout.tsx
@@ -0,0 +1,72 @@
+import "@/styles/globals.css";
+import { Metadata } from "next";
+import { siteConfig } from "@/config/site";
+import { fontSans } from "@/config/fonts";
+import { Providers } from "./providers";
+import { Navbar } from "@/components/navbar";
+
+import clsx from "clsx";
+import { BottomNav } from "@/components/bottom-nav";
+
+export const metadata: Metadata = {
+ title: {
+ default: siteConfig.name,
+ template: `%s - ${siteConfig.name}`,
+ },
+ description: siteConfig.description,
+ // themeColor: [
+ // { media: "(prefers-color-scheme: light)", color: "white" },
+ // { media: "(prefers-color-scheme: dark)", color: "black" },
+ // ],
+ icons: {
+ icon: "/favicon.ico",
+ shortcut: "/favicon-16x16.png",
+ apple: "/apple-touch-icon.png",
+ },
+};
+
+export default function RootLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+
+
+ {/* */}
+ {/*
+ {children}
+ */}
+ {/* */}
+
+
+
+
+ );
+}
+
+function SplashScreen() {
+ return (
+
+
+
+
+
+ Welcome to payup mobile app
+
+
+
+
+ );
+}
diff --git a/packages/dapp/app/page.tsx b/packages/dapp/app/page.tsx
new file mode 100644
index 0000000..ec591ed
--- /dev/null
+++ b/packages/dapp/app/page.tsx
@@ -0,0 +1,27 @@
+import { BudgetCard } from "../components/BudgetCard";
+
+export default function Home() {
+ return (
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+
+
+
+
+
+ Welcome to payup mobile app
+
+
+
+ );
+}
diff --git a/packages/dapp/app/pricing/layout.tsx b/packages/dapp/app/pricing/layout.tsx
new file mode 100644
index 0000000..3f931fa
--- /dev/null
+++ b/packages/dapp/app/pricing/layout.tsx
@@ -0,0 +1,13 @@
+export default function PricingLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+ );
+}
diff --git a/packages/dapp/app/pricing/page.tsx b/packages/dapp/app/pricing/page.tsx
new file mode 100644
index 0000000..806aa3c
--- /dev/null
+++ b/packages/dapp/app/pricing/page.tsx
@@ -0,0 +1,9 @@
+import { title } from "@/components/primitives";
+
+export default function PricingPage() {
+ return (
+
+
Pricing
+
+ );
+}
diff --git a/packages/dapp/app/providers.tsx b/packages/dapp/app/providers.tsx
new file mode 100644
index 0000000..25ecbce
--- /dev/null
+++ b/packages/dapp/app/providers.tsx
@@ -0,0 +1,37 @@
+"use client";
+
+import * as React from "react";
+import { NextUIProvider } from "@nextui-org/system";
+import { useRouter } from "next/navigation";
+import { ThemeProvider as NextThemesProvider } from "next-themes";
+import { ThemeProviderProps } from "next-themes/dist/types";
+import {
+ DynamicContextProvider,
+ DynamicWagmiConnector,
+ EthereumWalletConnectors,
+} from "@/components/dynamic";
+
+export interface ProvidersProps {
+ children: React.ReactNode;
+ themeProps?: ThemeProviderProps;
+}
+
+export function Providers({ children, themeProps }: ProvidersProps) {
+ const router = useRouter();
+
+ return (
+
+
+
+ {children}
+
+
+
+ );
+}
diff --git a/packages/dapp/components/BudgetCard.tsx b/packages/dapp/components/BudgetCard.tsx
new file mode 100644
index 0000000..7bfd9a6
--- /dev/null
+++ b/packages/dapp/components/BudgetCard.tsx
@@ -0,0 +1,71 @@
+"use client";
+import { Card, CardBody, Chip, Avatar, Progress } from "@nextui-org/react";
+import { ClockIcon } from "@/components/icons";
+import { Icon, TokenIcon } from "@/components/tokens/TokenIcon";
+// {
+// "parentId": "0",
+// "amount": "54349902384089023",
+// "spent": "1680",
+// "token": "0x7e356025b80B220661c859d134ae12146f73f335",
+// "nextResetTime": "Sun Nov 12 2023",
+// "spender": "0x47d80912400ef8f8224531EBEB1ce8f2ACf4b75a",
+// "recurrency": "1099511627776",
+// "isDisabled": false
+// }
+export function BudgetCard() {
+ return (
+
+
+
+
+
+
+
+
+ }
+ >
+
alice.eth
+
+
+ 42069 USDC
+
+
+
$7081 spent
+
+
+ }
+ >
+ 10/10/23
+
+
+
+
+
+
+ );
+}
diff --git a/packages/dapp/components/Hero.tsx b/packages/dapp/components/Hero.tsx
new file mode 100644
index 0000000..2674e12
--- /dev/null
+++ b/packages/dapp/components/Hero.tsx
@@ -0,0 +1,16 @@
+"use client";
+import { title, subtitle } from "@/components/primitives";
+
+export function Hero() {
+ return (
+
+
DAOBox
+ Budgets
+
+ Scalable Secure Frictionless
+
+ DAO payments without all the votes
+
+
+ );
+}
diff --git a/packages/dapp/components/bottom-nav.tsx b/packages/dapp/components/bottom-nav.tsx
new file mode 100644
index 0000000..71159e7
--- /dev/null
+++ b/packages/dapp/components/bottom-nav.tsx
@@ -0,0 +1,74 @@
+"use client";
+
+import { Button } from "@nextui-org/button";
+import { ClockIcon, HomeIcon, QRCodeIcon } from "./icons";
+import { useDynamicContext } from "./dynamic";
+
+/**
+ * v0 by Vercel.
+ * @see https://v0.dev/t/iy0yPzxXKCr
+ */
+export function BottomNav() {
+ const { setShowAuthFlow } = useDynamicContext();
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ setShowAuthFlow(true)}
+ >
+
+
+
+
+
+
+ );
+}
diff --git a/packages/dapp/components/counter.tsx b/packages/dapp/components/counter.tsx
new file mode 100644
index 0000000..90c4ea7
--- /dev/null
+++ b/packages/dapp/components/counter.tsx
@@ -0,0 +1,14 @@
+"use client";
+
+import { useState } from "react";
+import { Button } from "@nextui-org/button";
+
+export const Counter = () => {
+ const [count, setCount] = useState(0);
+
+ return (
+ setCount(count + 1)}>
+ Count is {count}
+
+ );
+};
diff --git a/packages/dapp/components/dynamic.ts b/packages/dapp/components/dynamic.ts
new file mode 100644
index 0000000..c214590
--- /dev/null
+++ b/packages/dapp/components/dynamic.ts
@@ -0,0 +1,5 @@
+"use client";
+
+export * from "@dynamic-labs/ethereum";
+export * from "@dynamic-labs/sdk-react-core";
+export * from "@dynamic-labs/wagmi-connector";
diff --git a/packages/dapp/components/icons.tsx b/packages/dapp/components/icons.tsx
new file mode 100644
index 0000000..74bcb25
--- /dev/null
+++ b/packages/dapp/components/icons.tsx
@@ -0,0 +1,321 @@
+import * as React from "react";
+import { IconSvgProps } from "@/types";
+
+export const Logo: React.FC = ({
+ size = 36,
+ width,
+ height,
+ ...props
+}) => (
+
+
+
+);
+
+export const DiscordIcon: React.FC = ({
+ size = 24,
+ width,
+ height,
+ ...props
+}) => {
+ return (
+
+
+
+ );
+};
+
+export const TwitterIcon: React.FC = ({
+ size = 24,
+ width,
+ height,
+ ...props
+}) => {
+ return (
+
+
+
+ );
+};
+
+export const GithubIcon: React.FC = ({
+ size = 24,
+ width,
+ height,
+ ...props
+}) => {
+ return (
+
+
+
+ );
+};
+
+export const MoonFilledIcon = ({
+ size = 24,
+ width,
+ height,
+ ...props
+}: IconSvgProps) => (
+
+
+
+);
+
+export const SunFilledIcon = ({
+ size = 24,
+ width,
+ height,
+ ...props
+}: IconSvgProps) => (
+
+
+
+
+
+
+);
+
+export const HomeIcon = ({
+ size = 24,
+ width,
+ height,
+ ...props
+}: IconSvgProps) => (
+
+
+
+
+);
+
+export const ClockIcon = ({
+ size = 24,
+ width,
+ height,
+ ...props
+}: IconSvgProps) => (
+
+
+
+
+);
+
+export const QRCodeIcon = ({
+ size = 24,
+ width,
+ height,
+ ...props
+}: IconSvgProps) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+export const NotificationIcon = ({
+ size,
+ height,
+ width,
+ ...props
+}: IconSvgProps) => {
+ return (
+
+
+
+ );
+};
+
+export const HeartFilledIcon = ({
+ size = 24,
+ width,
+ height,
+ ...props
+}: IconSvgProps) => (
+
+
+
+);
+
+export const SearchIcon = (props: IconSvgProps) => (
+
+
+
+
+);
+
+export const NextUILogo: React.FC = (props) => {
+ const { width, height = 40 } = props;
+
+ return (
+
+
+
+
+
+ );
+};
diff --git a/packages/dapp/components/navbar.tsx b/packages/dapp/components/navbar.tsx
new file mode 100644
index 0000000..d02778b
--- /dev/null
+++ b/packages/dapp/components/navbar.tsx
@@ -0,0 +1,48 @@
+"use client";
+
+import { Navbar as NextUINavbar, NavbarContent } from "@nextui-org/navbar";
+import { Badge, User } from "@nextui-org/react";
+
+import { Button } from "@nextui-org/button";
+import NextLink from "next/link";
+
+import { NotificationIcon } from "@/components/icons";
+import { useDynamicContext } from "./dynamic";
+
+export const Navbar = () => {
+ const { setShowAuthFlow } = useDynamicContext();
+
+ return (
+
+
+
+ setShowAuthFlow(true)}
+ name="Aaron Abu Usama"
+ description="abuusama.eth"
+ className="transition-transform"
+ avatarProps={{
+ src: "https://d2u8k2ocievbld.cloudfront.net/memojis/male/9.png",
+ isBordered: true,
+ radius: "full",
+ }}
+ />
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/packages/dapp/components/primitives.ts b/packages/dapp/components/primitives.ts
new file mode 100644
index 0000000..5388287
--- /dev/null
+++ b/packages/dapp/components/primitives.ts
@@ -0,0 +1,53 @@
+import { tv } from "tailwind-variants";
+
+export const title = tv({
+ base: "tracking-tight inline font-semibold",
+ variants: {
+ color: {
+ violet: "from-[#FF1CF7] to-[#b249f8]",
+ yellow: "from-[#FF705B] to-[#FFB457]",
+ blue: "from-[#5EA2EF] to-[#0072F5]",
+ cyan: "from-[#00b7fa] to-[#01cfea]",
+ green: "from-[#6FEE8D] to-[#17c964]",
+ pink: "from-[#FF72E1] to-[#F54C7A]",
+ foreground: "dark:from-[#FFFFFF] dark:to-[#4B4B4B]",
+ },
+ size: {
+ sm: "text-3xl lg:text-4xl",
+ md: "text-[2.3rem] lg:text-5xl leading-9",
+ lg: "text-4xl lg:text-6xl",
+ },
+ fullWidth: {
+ true: "w-full block",
+ },
+ },
+ defaultVariants: {
+ size: "md",
+ },
+ compoundVariants: [
+ {
+ color: [
+ "violet",
+ "yellow",
+ "blue",
+ "cyan",
+ "green",
+ "pink",
+ "foreground",
+ ],
+ class: "bg-clip-text text-transparent bg-gradient-to-b",
+ },
+ ],
+});
+
+export const subtitle = tv({
+ base: "w-full md:w-1/2 my-2 text-lg lg:text-xl text-default-600 block max-w-full",
+ variants: {
+ fullWidth: {
+ true: "!w-full",
+ },
+ },
+ defaultVariants:{
+ fullWidth: true
+ }
+});
diff --git a/packages/dapp/components/theme-switch.tsx b/packages/dapp/components/theme-switch.tsx
new file mode 100644
index 0000000..6240765
--- /dev/null
+++ b/packages/dapp/components/theme-switch.tsx
@@ -0,0 +1,77 @@
+"use client";
+
+import { FC } from "react";
+import { VisuallyHidden } from "@react-aria/visually-hidden";
+import { SwitchProps, useSwitch } from "@nextui-org/switch";
+import { useTheme } from "next-themes";
+import {useIsSSR} from "@react-aria/ssr";
+import clsx from "clsx";
+
+import { SunFilledIcon, MoonFilledIcon } from "@/components/icons";
+
+export interface ThemeSwitchProps {
+ className?: string;
+ classNames?: SwitchProps["classNames"];
+}
+
+export const ThemeSwitch: FC = ({
+ className,
+ classNames,
+}) => {
+ const { theme, setTheme } = useTheme();
+ const isSSR = useIsSSR();
+
+ const onChange = () => {
+ theme === "light" ? setTheme("dark") : setTheme("light");
+ };
+
+ const {
+ Component,
+ slots,
+ isSelected,
+ getBaseProps,
+ getInputProps,
+ getWrapperProps,
+ } = useSwitch({
+ isSelected: theme === "light" || isSSR,
+ "aria-label": `Switch to ${theme === "light" || isSSR ? "dark" : "light"} mode`,
+ onChange,
+ });
+
+ return (
+
+
+
+
+
+ {!isSelected || isSSR ? : }
+
+
+ );
+};
diff --git a/packages/dapp/components/tokens/TokenIcon.tsx b/packages/dapp/components/tokens/TokenIcon.tsx
new file mode 100644
index 0000000..3996190
--- /dev/null
+++ b/packages/dapp/components/tokens/TokenIcon.tsx
@@ -0,0 +1,114 @@
+import Image from "next/image";
+import React, { ReactNode, useState } from "react";
+
+import Tokens from "./reserveTokens.json";
+import clsx from "clsx";
+const tokens = Tokens.tokens;
+
+export const getIconBackgroundColor = (symbol?: string): string => {
+ const symbolLowerCase = symbol?.toLowerCase() as string;
+
+ return symbolLowerCase === "gno"
+ ? "bg-blue-900"
+ : symbolLowerCase === "weth"
+ ? "bg-black"
+ : symbolLowerCase === "wxdai"
+ ? "bg-green-700"
+ : symbolLowerCase === "dai"
+ ? "bg-yellow-400"
+ : symbolLowerCase === "xdai"
+ ? "bg-green-700"
+ : symbolLowerCase === "usdc"
+ ? "bg-blue-600"
+ : symbolLowerCase === "wbtc"
+ ? "bg-orange-500"
+ : symbolLowerCase === "usdt"
+ ? "bg-green-500"
+ : symbolLowerCase === "link"
+ ? "bg-blue-600"
+ : symbolLowerCase === "fox"
+ ? "bg-gray-800"
+ : symbolLowerCase === "agve"
+ ? "bg-white"
+ : symbolLowerCase === "eure"
+ ? "bg-blue-500"
+ : symbolLowerCase === "wsteth"
+ ? "bg-gray-200"
+ : symbolLowerCase === "sdai"
+ ? "bg-green-800"
+ : "bg-green-600";
+};
+
+interface Props {
+ dimensions?: number;
+ symbol: string;
+}
+
+export const TokenIcon: React.FC = ({
+ dimensions = 18,
+ symbol,
+ ...restProps
+}) => {
+ const [error, setError] = useState(false);
+ const token = tokens.find(
+ (token) => token.symbol.toLowerCase() === symbol.toLowerCase(),
+ );
+ const tokenImage = token?.logoURI;
+ const offset = token?.offset ?? 10;
+ const backgroundColor = getIconBackgroundColor(symbol);
+
+ return (
+
+ {tokenImage && !error ? (
+
setError(true)}
+ src={tokenImage}
+ width={dimensions - offset}
+ />
+ ) : (
+
+ {symbol[0]}
+
+ )}
+
+ );
+};
+
+interface IconProps {
+ symbol: string;
+ children: ReactNode;
+ className?: string;
+}
+export const Icon: React.FC = ({ symbol, children, className }) => {
+ const backgroundColorClass = getIconBackgroundColor(symbol);
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/packages/dapp/components/tokens/reserveTokens.json b/packages/dapp/components/tokens/reserveTokens.json
new file mode 100644
index 0000000..51d5c15
--- /dev/null
+++ b/packages/dapp/components/tokens/reserveTokens.json
@@ -0,0 +1,82 @@
+{
+ "tokens": [
+ {
+ "symbol": "USDC",
+ "name": "USD Coin",
+ "address": "0xddafbb505ad214d7b80b1f830fccc89b60fb7a83",
+ "decimals": 6,
+ "chainId": 100,
+ "logoURI": "/coins/usdc.svg",
+ "offset": 0,
+ "extensions": {
+ "isNative": false,
+ "isNativeWrapper": false
+ }
+ },
+ {
+ "symbol": "WETH",
+ "name": "WETH",
+ "address": "0x6a023ccd1ff6f2045c3309768ead9e68f978f6e1",
+ "decimals": 18,
+ "chainId": 100,
+ "logoURI": "/coins/eth.svg",
+ "offset": 60,
+ "extensions": {
+ "isNative": false,
+ "isNativeWrapper": false
+ }
+ },
+ {
+ "symbol": "wstETH",
+ "name": "Wrapped liquid staked Ether 2.0 from Mainnet",
+ "address": "0x6c76971f98945ae98dd7d4dfca8711ebea946ea6",
+ "decimals": 18,
+ "chainId": 100,
+ "logoURI": "/coins/wsteth.svg",
+ "offset": 22,
+ "extensions": {
+ "isNative": false,
+ "isNativeWrapper": false
+ }
+ },
+ {
+ "symbol": "USDT",
+ "name": "Tether USD on xDai",
+ "address": "0x4ecaba5870353805a9f068101a40e0f32ed605c6",
+ "decimals": 6,
+ "chainId": 100,
+ "logoURI": "/coins/usdt.svg",
+ "offset": 12,
+ "extensions": {
+ "isNative": false,
+ "isNativeWrapper": false
+ }
+ },
+ {
+ "symbol": "EURe",
+ "name": "Monerium EUR emoney",
+ "address": "0xcB444e90D8198415266c6a2724b7900fb12FC56E",
+ "decimals": 18,
+ "chainId": 100,
+ "logoURI": "/coins/eure.svg",
+ "offset": 10,
+ "extensions": {
+ "isNative": false,
+ "isNativeWrapper": false
+ }
+ },
+ {
+ "symbol": "WBTC",
+ "name": "Wrapped Bitcoin",
+ "address": "0x8e5bbbb09ed1ebde8674cda39a0c169401db4252",
+ "decimals": 8,
+ "chainId": 100,
+ "logoURI": "/coins/wbtc.svg",
+ "offset": 0,
+ "extensions": {
+ "isNative": false,
+ "isNativeWrapper": false
+ }
+ }
+ ]
+}
diff --git a/packages/dapp/config/fonts.ts b/packages/dapp/config/fonts.ts
new file mode 100644
index 0000000..b4411e2
--- /dev/null
+++ b/packages/dapp/config/fonts.ts
@@ -0,0 +1,11 @@
+import { Fira_Code as FontMono, Inter as FontSans } from "next/font/google"
+
+export const fontSans = FontSans({
+ subsets: ["latin"],
+ variable: "--font-sans",
+})
+
+export const fontMono = FontMono({
+ subsets: ["latin"],
+ variable: "--font-mono",
+})
diff --git a/packages/dapp/config/site.ts b/packages/dapp/config/site.ts
new file mode 100644
index 0000000..75f5822
--- /dev/null
+++ b/packages/dapp/config/site.ts
@@ -0,0 +1,69 @@
+export type SiteConfig = typeof siteConfig;
+
+export const siteConfig = {
+ name: "Next.js + NextUI",
+ description: "Make beautiful websites regardless of your design experience.",
+ navItems: [
+ {
+ label: "Home",
+ href: "/",
+ },
+ {
+ label: "Docs",
+ href: "/docs",
+ },
+ {
+ label: "Pricing",
+ href: "/pricing",
+ },
+ {
+ label: "Blog",
+ href: "/blog",
+ },
+ {
+ label: "About",
+ href: "/about",
+ },
+ ],
+ navMenuItems: [
+ {
+ label: "Profile",
+ href: "/profile",
+ },
+ {
+ label: "Dashboard",
+ href: "/dashboard",
+ },
+ {
+ label: "Projects",
+ href: "/projects",
+ },
+ {
+ label: "Team",
+ href: "/team",
+ },
+ {
+ label: "Calendar",
+ href: "/calendar",
+ },
+ {
+ label: "Settings",
+ href: "/settings",
+ },
+ {
+ label: "Help & Feedback",
+ href: "/help-feedback",
+ },
+ {
+ label: "Logout",
+ href: "/logout",
+ },
+ ],
+ links: {
+ github: "https://github.com/nextui-org/nextui",
+ twitter: "https://twitter.com/getnextui",
+ docs: "https://nextui.org",
+ discord: "https://discord.gg/9b6yyZKmH4",
+ sponsor: "https://patreon.com/jrgarciadev",
+ },
+};
diff --git a/packages/dapp/config/tokens/agaveTokens.ts b/packages/dapp/config/tokens/agaveTokens.ts
new file mode 100644
index 0000000..d100897
--- /dev/null
+++ b/packages/dapp/config/tokens/agaveTokens.ts
@@ -0,0 +1,329 @@
+import nativeToken from '@/public/nativeToken.json'
+import protocolTokens from '@/public/protocolTokens.json'
+import reserveTokens from '@/public/reserveTokens.json'
+import savingsToken from '@/public/savingsToken.json'
+import stakeToken from '@/public/stakeToken.json'
+import { isSameAddress } from '@/src/utils/isSameAddress'
+import { memoize } from '@/src/utils/memoize'
+import { Token } from '@/types/token'
+import { RequiredFieldsOnly } from '@/types/utils'
+
+export type AgaveProtocolTokens = {
+ [reserve: string]: {
+ ag: string
+ variableDebt: string
+ stableDebt: string
+ strategy: string
+ oracle: string
+ symbol: string // added to ease traceability
+ }
+}
+
+export type AgaveProtocolTokenType =
+ | 'ag'
+ | 'variableDebt'
+ | 'stableDebt'
+ | 'reserve'
+ | 'native'
+ | 'stake'
+ | 'savings'
+
+export type TokenWithType = Token & { type: AgaveProtocolTokenType }
+
+export type TokenInfo = Pick
+
+type ValidLookupFields = Pick
+
+export interface IDAgaveTokens {
+ nativeToken: Token
+ wrapperToken: Token
+ reserveTokens: Token[]
+ protocolTokens: AgaveProtocolTokens
+ stakeToken: Token
+ savingsToken: Token
+ allTokens: TokenWithType[]
+ allIncentivesTokens: TokenWithType[]
+ getRelatedTokensByAddress: (tokenAddress: string) => TokenInfo[]
+ getTokenByAddress: (tokenAddress: string) => TokenWithType
+ getTokenByFieldAndValue: (
+ fieldAndValue: Partial>,
+ ) => TokenWithType | undefined
+ getProtocolTokenInfo: (reserveAddress: string, type: AgaveProtocolTokenType) => Token
+}
+
+class AgaveTokens implements IDAgaveTokens {
+ private _nativeToken: Token = nativeToken.tokens[0]
+ private _stakeToken: Token = stakeToken.tokens[0]
+ private _savingsToken: Token = savingsToken.tokens[0]
+ private _reserveTokens: Token[] = reserveTokens.tokens
+ private _protocolTokens: AgaveProtocolTokens = protocolTokens.protocolTokens
+ private _protocolName = 'Agave'
+ private _validLookupFields: (keyof ValidLookupFields)[] = ['address', 'symbol', 'name']
+
+ constructor() {
+ // runtime check to prevent consuming invalid token info
+ this.allTokens.every(this.isValidTokenInfo)
+ }
+
+ get nativeToken() {
+ return this._nativeToken
+ }
+
+ get stakeToken() {
+ return this._stakeToken
+ }
+
+ get savingsToken() {
+ return this._savingsToken
+ }
+
+ @memoize()
+ get wrapperToken() {
+ const nativeWrapper = this._reserveTokens.find(
+ ({ extensions: { isNativeWrapper } }) => isNativeWrapper,
+ )
+
+ if (!nativeWrapper) {
+ throw new Error('Native wrapper must be defined')
+ }
+
+ return nativeWrapper
+ }
+
+ get reserveTokens() {
+ return this._reserveTokens
+ }
+
+ get protocolTokens() {
+ return this._protocolTokens
+ }
+
+ @memoize()
+ get allTokens(): TokenWithType[] {
+ return [
+ {
+ ...this.nativeToken,
+ type: 'native',
+ },
+ ...this.reserveTokens.map(
+ (tokenInfo): TokenWithType => ({
+ ...tokenInfo,
+ type: 'reserve',
+ }),
+ ),
+ {
+ ...this.savingsToken,
+ type: 'savings',
+ },
+ {
+ ...this.stakeToken,
+ type: 'stake',
+ },
+ ...Object.values(this.reserveTokens).flatMap(({ address }): TokenWithType[] => {
+ return [
+ { ...this.getProtocolTokenInfo(address, 'ag'), type: 'ag' },
+ {
+ ...this.getProtocolTokenInfo(address, 'variableDebt'),
+ type: 'variableDebt',
+ },
+ {
+ ...this.getProtocolTokenInfo(address, 'stableDebt'),
+ type: 'stableDebt',
+ },
+ ]
+ }),
+ ]
+ }
+
+ @memoize()
+ get allIncentivesTokens(): TokenWithType[] {
+ return this.allTokens.filter(({ type }) => ['ag', 'variableDebt'].includes(type))
+ }
+
+ @memoize()
+ getRelatedTokensByAddress(tokenAddress: string): TokenInfo[] {
+ const tokenInfo = this.getTokenByAddress(tokenAddress)
+ if (tokenInfo.type === 'reserve') {
+ // discard `oracle`, `strategy`, and `symbol` from protocol tokens
+ const { oracle, strategy, symbol, ...protocolTokens } = this.getProtocolTokensByReserve(
+ tokenInfo.address,
+ )
+ return [
+ {
+ address: tokenInfo.address,
+ symbol: tokenInfo.symbol,
+ type: tokenInfo.type,
+ },
+ ...Object.values(protocolTokens)
+ .map(this.getTokenByAddress.bind(this))
+ .map(({ address, symbol, type }) => ({
+ address,
+ symbol,
+ type,
+ })),
+ ]
+ } else {
+ const reserveToken = this.getReserveTokenByAddress(tokenAddress)
+ if (!reserveToken) {
+ throw Error(`Unsupported token: ${tokenAddress}`)
+ }
+
+ return this.getRelatedTokensByAddress(reserveToken.address)
+ }
+ }
+
+ @memoize()
+ getTokenByAddress(tokenAddress: string): TokenWithType {
+ const tokenInfo = this.getTokenByFieldAndValue({ address: tokenAddress })
+
+ if (!tokenInfo) {
+ throw Error(`Unsupported token: ${tokenAddress}`)
+ }
+
+ return tokenInfo
+ }
+
+ @memoize()
+ getTokenByFieldAndValue(fieldAndValue: Partial>): TokenWithType {
+ const [field, value] = Object.entries(fieldAndValue)[0]
+
+ if (!field || !value) {
+ throw new Error('field and value are required')
+ }
+
+ if (!this._validLookupFields.some((validField) => validField === field)) {
+ throw new Error(`Invalid field: ${field}`)
+ }
+
+ let foundToken: TokenWithType | undefined
+
+ if (field === 'address') {
+ foundToken = this.allTokens.find((token) => isSameAddress(token[field], value))
+ } else {
+ foundToken = this.allTokens.find(
+ (token) => token[field].toLowerCase() === value.toLowerCase(),
+ )
+ }
+
+ if (!foundToken) {
+ throw Error(`Unsupported token: ${field} ${value}`)
+ }
+
+ return foundToken
+ }
+
+ @memoize()
+ private getReserveTokenByAddress(tokenAddress: string): Token {
+ // lookup reserve token by reserve address
+ const tokenInfo = this._reserveTokens.find((token) =>
+ isSameAddress(token.address, tokenAddress),
+ )
+
+ // if not found, lookup reserve token by protocol token address
+ if (!tokenInfo) {
+ const foundToken = Object.entries(this._protocolTokens).find(
+ ([, { ag, stableDebt, variableDebt }]) => {
+ return (
+ isSameAddress(ag, tokenAddress) ||
+ isSameAddress(stableDebt, tokenAddress) ||
+ isSameAddress(variableDebt, tokenAddress)
+ )
+ },
+ )
+
+ if (!foundToken) {
+ throw Error(`Unsupported token: ${tokenAddress}`)
+ }
+
+ const [reserveAddress] = foundToken
+
+ return this.getReserveTokenByAddress(reserveAddress)
+ }
+
+ return tokenInfo
+ }
+
+ private getProtocolTokensByReserve(
+ reserveAddress: string,
+ ): AgaveProtocolTokens['reserveAddress'] {
+ const foundToken = Object.entries(this._protocolTokens).find(([address]) =>
+ isSameAddress(address, reserveAddress),
+ )
+
+ if (!foundToken) {
+ throw Error(`Unsupported reserveAddress token: ${reserveAddress}`)
+ }
+
+ const [, protocolTokens] = foundToken
+
+ return protocolTokens
+ }
+
+ @memoize()
+ getProtocolTokenInfo(reserveAddress: string, tokenType: AgaveProtocolTokenType): Token {
+ const tokenInfo = this.getReserveTokenByAddress(reserveAddress)
+ const protocolTokens = this.getProtocolTokensByReserve(reserveAddress)
+ switch (tokenType) {
+ case 'ag':
+ return {
+ ...tokenInfo,
+ address: protocolTokens.ag,
+ name: `${this._protocolName} interest bearing ${tokenInfo.symbol}`,
+ symbol: `ag${tokenInfo.symbol}`,
+ }
+ case 'variableDebt':
+ return {
+ ...tokenInfo,
+ address: protocolTokens.variableDebt,
+ name: `${this._protocolName} variable debt bearing ${tokenInfo.symbol}`,
+ symbol: `variableDebt${tokenInfo.symbol}`,
+ }
+ case 'stableDebt':
+ return {
+ ...tokenInfo,
+ address: protocolTokens.stableDebt,
+ name: `${this._protocolName} stable debt bearing ${tokenInfo.symbol}`,
+ symbol: `stableDebt${tokenInfo.symbol}`,
+ }
+ default:
+ throw new Error(`Unsupported token type: ${tokenType}`)
+ }
+ }
+
+ private isValidTokenInfo(tokenInfo: Token) {
+ if (tokenInfo.address === undefined) {
+ throw new Error('Token address is required')
+ }
+
+ if (tokenInfo.symbol === undefined) {
+ throw new Error('Token symbol is required')
+ }
+
+ if (tokenInfo.decimals === undefined) {
+ throw new Error('Token decimals is required')
+ }
+
+ if (tokenInfo.name === undefined) {
+ throw new Error('Token name is required')
+ }
+
+ if (tokenInfo.logoURI === undefined) {
+ throw new Error('Token logoURI is required')
+ }
+
+ if (tokenInfo.chainId === undefined) {
+ throw new Error('Token chainId is required')
+ }
+
+ if (
+ tokenInfo.extensions.isNative === undefined ||
+ tokenInfo.extensions.isNativeWrapper === undefined
+ ) {
+ throw new Error('Token extensions.isNative and extensions.isNativeWrapper are required')
+ }
+
+ return true
+ }
+}
+
+export const agaveTokens = new AgaveTokens()
diff --git a/packages/dapp/config/tokens/nativeToken.json b/packages/dapp/config/tokens/nativeToken.json
new file mode 100644
index 0000000..7ec950e
--- /dev/null
+++ b/packages/dapp/config/tokens/nativeToken.json
@@ -0,0 +1,16 @@
+{
+ "tokens": [
+ {
+ "symbol": "XDAI",
+ "name": "XDAI",
+ "address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
+ "decimals": 18,
+ "chainId": 100,
+ "logoURI": "/coins/xdai.svg",
+ "extensions": {
+ "isNative": true,
+ "isNativeWrapper": false
+ }
+ }
+ ]
+}
diff --git a/packages/dapp/next.config.js b/packages/dapp/next.config.js
new file mode 100644
index 0000000..767719f
--- /dev/null
+++ b/packages/dapp/next.config.js
@@ -0,0 +1,4 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {}
+
+module.exports = nextConfig
diff --git a/packages/dapp/package-lock.json b/packages/dapp/package-lock.json
new file mode 100644
index 0000000..d2bfe43
--- /dev/null
+++ b/packages/dapp/package-lock.json
@@ -0,0 +1,5313 @@
+{
+ "name": "next-app-template",
+ "version": "0.0.1",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "next-app-template",
+ "version": "0.0.1",
+ "dependencies": {
+ "@nextui-org/button": "2.0.26",
+ "@nextui-org/code": "2.0.24",
+ "@nextui-org/input": "2.1.16",
+ "@nextui-org/kbd": "2.0.25",
+ "@nextui-org/link": "2.0.26",
+ "@nextui-org/navbar": "2.0.27",
+ "@nextui-org/snippet": "2.0.30",
+ "@nextui-org/switch": "2.0.25",
+ "@nextui-org/system": "2.0.15",
+ "@nextui-org/theme": "2.1.17",
+ "@react-aria/ssr": "^3.8.0",
+ "@react-aria/visually-hidden": "^3.8.6",
+ "@types/node": "20.5.7",
+ "@types/react": "18.2.21",
+ "@types/react-dom": "18.2.7",
+ "autoprefixer": "10.4.16",
+ "clsx": "^2.0.0",
+ "eslint": "8.48.0",
+ "eslint-config-next": "14.0.2",
+ "framer-motion": "^10.16.4",
+ "intl-messageformat": "^10.5.0",
+ "next": "14.0.2",
+ "next-themes": "^0.2.1",
+ "postcss": "8.4.31",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
+ "tailwind-variants": "^0.1.18",
+ "tailwindcss": "3.3.5",
+ "typescript": "5.0.4"
+ }
+ },
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
+ "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
+ "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
+ "optional": true,
+ "dependencies": {
+ "@emotion/memoize": "0.7.4"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
+ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==",
+ "optional": true
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+ "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz",
+ "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@formatjs/ecma402-abstract": {
+ "version": "1.17.3",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.17.3.tgz",
+ "integrity": "sha512-2Q4hmKQ6CM30mRG/YMdSBW8LXf32BfuOb1FZgG+uVWPC/SQMoiVFz5JaeOukt96v6TZ4ddE+bHCmd611PW38QA==",
+ "dependencies": {
+ "@formatjs/intl-localematcher": "0.5.0",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@formatjs/fast-memoize": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz",
+ "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@formatjs/icu-messageformat-parser": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.1.tgz",
+ "integrity": "sha512-ErnXyRdk8AlpGcKskKVYn23aAlWXhI1kt5ek2o3pJwVeMTcrosSESQ8baztdTtJjfQHlB4NBeocfRA5C6DKv2g==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.17.3",
+ "@formatjs/icu-skeleton-parser": "1.6.3",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@formatjs/icu-skeleton-parser": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.6.3.tgz",
+ "integrity": "sha512-Viggz4Pic7oC4uR8z2VroL8H9boiUTTB0TqEsiRb6DHZv7QEcg1BoVQZBkBdLmvxhBS7nwBNrTdbaiW8GOV58Q==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.17.3",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@formatjs/intl-localematcher": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.0.tgz",
+ "integrity": "sha512-K1Xpg/8oyfCMxisJQa/fILoeoeyndcM0wcN8QiNG/uM5OAe1BcO1+2yd0gIboDI2tRJEsUi/sSBEYPbgkIdq4A==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw=="
+ },
+ "node_modules/@internationalized/date": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.0.tgz",
+ "integrity": "sha512-nw0Q+oRkizBWMioseI8+2TeUPEyopJVz5YxoYVzR0W1v+2YytiYah7s/ot35F149q/xAg4F1gT/6eTd+tsUpFQ==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "node_modules/@internationalized/message": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.1.tgz",
+ "integrity": "sha512-ZgHxf5HAPIaR0th+w0RUD62yF6vxitjlprSxmLJ1tam7FOekqRSDELMg4Cr/DdszG5YLsp5BG3FgHgqquQZbqw==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0",
+ "intl-messageformat": "^10.1.0"
+ }
+ },
+ "node_modules/@internationalized/number": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.4.0.tgz",
+ "integrity": "sha512-8TvotW3qVDHC4uv/BVoN6Qx0Dm8clHY1/vpH+dh+XRiPW/9NVpKn1P8d1A+WLphWrMwyqyWXI7uWehJPviaeIw==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "node_modules/@internationalized/string": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.1.1.tgz",
+ "integrity": "sha512-fvSr6YRoVPgONiVIUhgCmIAlifMVCeej/snPZVzbzRPxGpHl3o1GRe+d/qh92D8KhgOciruDUH8I5mjdfdjzfA==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@next/env": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.2.tgz",
+ "integrity": "sha512-HAW1sljizEaduEOes/m84oUqeIDAUYBR1CDwu2tobNlNDFP3cSm9d6QsOsGeNlIppU1p/p1+bWbYCbvwjFiceA=="
+ },
+ "node_modules/@next/eslint-plugin-next": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.2.tgz",
+ "integrity": "sha512-APrYFsXfAhnysycqxHcpg6Y4i7Ukp30GzVSZQRKT3OczbzkqGjt33vNhScmgoOXYBU1CfkwgtXmNxdiwv1jKmg==",
+ "dependencies": {
+ "glob": "7.1.7"
+ }
+ },
+ "node_modules/@next/swc-darwin-arm64": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.2.tgz",
+ "integrity": "sha512-i+jQY0fOb8L5gvGvojWyZMfQoQtDVB2kYe7fufOEiST6sicvzI2W5/EXo4lX5bLUjapHKe+nFxuVv7BA+Pd7LQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-darwin-x64": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.2.tgz",
+ "integrity": "sha512-zRCAO0d2hW6gBEa4wJaLn+gY8qtIqD3gYd9NjruuN98OCI6YyelmhWVVLlREjS7RYrm9OUQIp/iVJFeB6kP1hg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-gnu": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.2.tgz",
+ "integrity": "sha512-tSJmiaon8YaKsVhi7GgRizZoV0N1Sx5+i+hFTrCKKQN7s3tuqW0Rov+RYdPhAv/pJl4qiG+XfSX4eJXqpNg3dA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-musl": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.2.tgz",
+ "integrity": "sha512-dXJLMSEOwqJKcag1BeX1C+ekdPPJ9yXbWIt3nAadhbLx5CjACoB2NQj9Xcqu2tmdr5L6m34fR+fjGPs+ZVPLzA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-gnu": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.2.tgz",
+ "integrity": "sha512-WC9KAPSowj6as76P3vf1J3mf2QTm3Wv3FBzQi7UJ+dxWjK3MhHVWsWUo24AnmHx9qDcEtHM58okgZkXVqeLB+Q==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-musl": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.2.tgz",
+ "integrity": "sha512-KSSAwvUcjtdZY4zJFa2f5VNJIwuEVnOSlqYqbQIawREJA+gUI6egeiRu290pXioQXnQHYYdXmnVNZ4M+VMB7KQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-arm64-msvc": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.2.tgz",
+ "integrity": "sha512-2/O0F1SqJ0bD3zqNuYge0ok7OEWCQwk55RPheDYD0va5ij7kYwrFkq5ycCRN0TLjLfxSF6xI5NM6nC5ux7svEQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-ia32-msvc": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.2.tgz",
+ "integrity": "sha512-vJI/x70Id0oN4Bq/R6byBqV1/NS5Dl31zC+lowO8SDu1fHmUxoAdILZR5X/sKbiJpuvKcCrwbYgJU8FF/Gh50Q==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-x64-msvc": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.2.tgz",
+ "integrity": "sha512-Ut4LXIUvC5m8pHTe2j0vq/YDnTEyq6RSR9vHYPqnELrDapPhLNz9Od/L5Ow3J8RNDWpEnfCiQXuVdfjlNEJ7ug==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nextui-org/aria-utils": {
+ "version": "2.0.15",
+ "resolved": "https://registry.npmjs.org/@nextui-org/aria-utils/-/aria-utils-2.0.15.tgz",
+ "integrity": "sha512-4M4jeJ/ghGaia9064yS+mEZ3sFPH80onmjNGWJZkkZDmUV4R88lNkqe/XYBK1tbxfl4Kxa8jc/ALsZkUkkvR5w==",
+ "dependencies": {
+ "@nextui-org/react-rsc-utils": "2.0.10",
+ "@nextui-org/shared-utils": "2.0.4",
+ "@nextui-org/system": "2.0.15",
+ "@react-aria/utils": "^3.21.1",
+ "@react-stately/collections": "^3.10.2",
+ "@react-types/overlays": "^3.8.3",
+ "@react-types/shared": "^3.21.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/button": {
+ "version": "2.0.26",
+ "resolved": "https://registry.npmjs.org/@nextui-org/button/-/button-2.0.26.tgz",
+ "integrity": "sha512-mDrSII1oneY4omwDdxUhl5oLa3AhoWCchwV/jt7egunnAFie32HbTqfFYGpLGiJw3JMMh3WDUthrI1islVTRKA==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.10",
+ "@nextui-org/ripple": "2.0.24",
+ "@nextui-org/shared-utils": "2.0.4",
+ "@nextui-org/spinner": "2.0.24",
+ "@nextui-org/use-aria-button": "2.0.6",
+ "@react-aria/button": "^3.8.4",
+ "@react-aria/focus": "^3.14.3",
+ "@react-aria/interactions": "^3.19.1",
+ "@react-aria/utils": "^3.21.1",
+ "@react-types/button": "^3.9.0",
+ "@react-types/shared": "^3.21.0"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/code": {
+ "version": "2.0.24",
+ "resolved": "https://registry.npmjs.org/@nextui-org/code/-/code-2.0.24.tgz",
+ "integrity": "sha512-Kw/uOQtdytRWY99zMQuGHqMAAGXWBAxHlyMMge1OCckpadCDfX6plPjqoS18SGM0orJ4fox+a1FM8VhnRQ2kQw==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.10",
+ "@nextui-org/shared-utils": "2.0.4",
+ "@nextui-org/system-rsc": "2.0.11"
+ },
+ "peerDependencies": {
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/framer-transitions": {
+ "version": "2.0.15",
+ "resolved": "https://registry.npmjs.org/@nextui-org/framer-transitions/-/framer-transitions-2.0.15.tgz",
+ "integrity": "sha512-UlWMCAFdrq8wKrYFGwc+O4kFhKCkL4L9ZadBkP0PqjmfyAC2gA3ygRbNqtKhFMWeKbBAiC8qQ9aTBEA/+0r/EA==",
+ "dependencies": {
+ "@nextui-org/shared-utils": "2.0.4",
+ "@nextui-org/system": "2.0.15"
+ },
+ "peerDependencies": {
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/input": {
+ "version": "2.1.16",
+ "resolved": "https://registry.npmjs.org/@nextui-org/input/-/input-2.1.16.tgz",
+ "integrity": "sha512-nUTlAvsXj5t88ycvQdICxf78/pko6Wznx2OomvYjb3E45eb77twQcWUDhydkJCWIh3b4AhGHSMM6GYxwWUgMDA==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.10",
+ "@nextui-org/shared-icons": "2.0.6",
+ "@nextui-org/shared-utils": "2.0.4",
+ "@react-aria/focus": "^3.14.3",
+ "@react-aria/interactions": "^3.19.1",
+ "@react-aria/textfield": "^3.12.2",
+ "@react-aria/utils": "^3.21.1",
+ "@react-stately/utils": "^3.8.0",
+ "@react-types/shared": "^3.21.0",
+ "@react-types/textfield": "^3.8.1",
+ "react-textarea-autosize": "^8.5.2"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/kbd": {
+ "version": "2.0.25",
+ "resolved": "https://registry.npmjs.org/@nextui-org/kbd/-/kbd-2.0.25.tgz",
+ "integrity": "sha512-cYwbEjp/+/tjtOdmiRy2UHjfBhP3bqd5e+JFTa5sY1HotckUZrCintATyBcg9bPa3iSPUI44M6Cb9e0oAUUeMA==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.10",
+ "@nextui-org/shared-utils": "2.0.4",
+ "@nextui-org/system-rsc": "2.0.11",
+ "@react-aria/utils": "^3.21.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/link": {
+ "version": "2.0.26",
+ "resolved": "https://registry.npmjs.org/@nextui-org/link/-/link-2.0.26.tgz",
+ "integrity": "sha512-X8zX3U5MWfiStOCd45oIZ2YKZG0GoUio6PcMFYjpOPsEG7wV58CuhUSxpyx3QTF8JavVSO/p/cl4Pc9pukVDUg==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.10",
+ "@nextui-org/shared-icons": "2.0.6",
+ "@nextui-org/shared-utils": "2.0.4",
+ "@nextui-org/use-aria-link": "2.0.15",
+ "@react-aria/focus": "^3.14.3",
+ "@react-aria/link": "^3.6.1",
+ "@react-aria/utils": "^3.21.1",
+ "@react-types/link": "^3.5.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/navbar": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/@nextui-org/navbar/-/navbar-2.0.27.tgz",
+ "integrity": "sha512-iP4Pn4ItQkAW1nbu1Jmrh5l9pMVG43lDxq9rbx6DbLjLnnZOOrE6fURb8uN5NVy3ooV5dF02zKAoxlkE5fN/xw==",
+ "dependencies": {
+ "@nextui-org/framer-transitions": "2.0.15",
+ "@nextui-org/react-utils": "2.0.10",
+ "@nextui-org/shared-utils": "2.0.4",
+ "@nextui-org/use-aria-toggle-button": "2.0.6",
+ "@nextui-org/use-scroll-position": "2.0.4",
+ "@react-aria/focus": "^3.14.3",
+ "@react-aria/interactions": "^3.19.1",
+ "@react-aria/overlays": "^3.18.1",
+ "@react-aria/utils": "^3.21.1",
+ "@react-stately/toggle": "^3.6.3",
+ "@react-stately/utils": "^3.8.0",
+ "react-remove-scroll": "^2.5.6"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/react-rsc-utils": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@nextui-org/react-rsc-utils/-/react-rsc-utils-2.0.10.tgz",
+ "integrity": "sha512-LNePDEThUF9PAbJW4T8k7EgSfqwlvGku5fIqJ1IA9+OpVy5LqhrUQehjvgXe63N1RupC7Pt+XvaaxkGu9U2FiQ=="
+ },
+ "node_modules/@nextui-org/react-utils": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@nextui-org/react-utils/-/react-utils-2.0.10.tgz",
+ "integrity": "sha512-bcA+k7ZdcgcK+r/8nrCtbdgHo0SD6jicbazWIokknFwjb97JQ7ooaMwxnLt5E5sswCAv0XeLwybOmrgm7JA5TA==",
+ "dependencies": {
+ "@nextui-org/react-rsc-utils": "2.0.10",
+ "@nextui-org/shared-utils": "2.0.4"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/ripple": {
+ "version": "2.0.24",
+ "resolved": "https://registry.npmjs.org/@nextui-org/ripple/-/ripple-2.0.24.tgz",
+ "integrity": "sha512-PCvAk9ErhmPX46VRmhsg8yMxw3Qd9LY7BDkRRfIF8KftgRDyOpG2vV8DxvSOxQu1/aqBWkkHNUuEjM/EvSEung==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.10",
+ "@nextui-org/shared-utils": "2.0.4"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/shared-icons": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@nextui-org/shared-icons/-/shared-icons-2.0.6.tgz",
+ "integrity": "sha512-Mw5utPJAclFaeKAZowznEgabI5gdhXrW0iMaMA18Y4zcZRTidAc0WFeGYUlX876NxYLPc1Zk4bZUhQvMe+7uWg==",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/shared-utils": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@nextui-org/shared-utils/-/shared-utils-2.0.4.tgz",
+ "integrity": "sha512-Ms7A6UCvo/SZt/9Nmb7cZwHe9fZFw+EPsieTnC1vtpvDNCasxrTB0hj9VWFoYfWOaCzzqxl1AL9maIz/gMvckQ==",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/snippet": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/@nextui-org/snippet/-/snippet-2.0.30.tgz",
+ "integrity": "sha512-8hKxqKpbJIMqFVedzYj90T4td+TkWdOdyYD9+VjywMdezAjsWdr8tqQj7boaMFjVNVSG+Pnw55Pgg/vkpc21aw==",
+ "dependencies": {
+ "@nextui-org/button": "2.0.26",
+ "@nextui-org/react-utils": "2.0.10",
+ "@nextui-org/shared-icons": "2.0.6",
+ "@nextui-org/shared-utils": "2.0.4",
+ "@nextui-org/tooltip": "2.0.29",
+ "@nextui-org/use-clipboard": "2.0.4",
+ "@react-aria/focus": "^3.14.3",
+ "@react-aria/utils": "^3.21.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/spinner": {
+ "version": "2.0.24",
+ "resolved": "https://registry.npmjs.org/@nextui-org/spinner/-/spinner-2.0.24.tgz",
+ "integrity": "sha512-s/q2FmxGPNEqA0ifWfc7xgs5a5D9c3xKkxL3n7jDoRnWo0NPlRsa6QRJGiSL5dHNoUqspRf/lNw2V94Bxk86Pg==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.10",
+ "@nextui-org/shared-utils": "2.0.4",
+ "@nextui-org/system-rsc": "2.0.11"
+ },
+ "peerDependencies": {
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/switch": {
+ "version": "2.0.25",
+ "resolved": "https://registry.npmjs.org/@nextui-org/switch/-/switch-2.0.25.tgz",
+ "integrity": "sha512-U7g68eReMSkgG0bBOSdzRLK+npv422YK6WYHpYOSkEBDqGwQ7LCeMRQreT/KxN0QFxIKmafebdLHAbuKc/X+5Q==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.10",
+ "@nextui-org/shared-utils": "2.0.4",
+ "@nextui-org/use-aria-press": "2.0.1",
+ "@react-aria/focus": "^3.14.3",
+ "@react-aria/interactions": "^3.19.1",
+ "@react-aria/switch": "^3.5.6",
+ "@react-aria/utils": "^3.21.1",
+ "@react-aria/visually-hidden": "^3.8.6",
+ "@react-stately/toggle": "^3.6.3",
+ "@react-types/shared": "^3.21.0"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/system": {
+ "version": "2.0.15",
+ "resolved": "https://registry.npmjs.org/@nextui-org/system/-/system-2.0.15.tgz",
+ "integrity": "sha512-WFDq+Rx6D+gmK1YGEG2RBARPK9EOYonQDt5Tq2tUchzOOqj3kXXcM5Z0F3fudM59eIncLa/tX/ApJSTLry+hsw==",
+ "dependencies": {
+ "@nextui-org/system-rsc": "2.0.11",
+ "@react-aria/i18n": "^3.8.4",
+ "@react-aria/overlays": "^3.18.1",
+ "@react-aria/utils": "^3.21.1",
+ "@react-stately/utils": "^3.8.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/system-rsc": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@nextui-org/system-rsc/-/system-rsc-2.0.11.tgz",
+ "integrity": "sha512-1QqZ+GM7Ii0rsfSHXS6BBjzKOoLIWwb72nm4h4WgjlMXbRKLZcCQasRHVe5HMSBMvN0JUo7qyGExchfDFl/Ubw==",
+ "dependencies": {
+ "clsx": "^1.2.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "tailwind-variants": ">=0.1.13"
+ }
+ },
+ "node_modules/@nextui-org/system-rsc/node_modules/clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@nextui-org/theme": {
+ "version": "2.1.17",
+ "resolved": "https://registry.npmjs.org/@nextui-org/theme/-/theme-2.1.17.tgz",
+ "integrity": "sha512-/WeHcMrAcWPGsEVn9M9TnvxKkaYkCocBH9JrDYCEFQoJgleUzHd4nVk7MWtpSOYJXLUzUMY1M9AqAK3jBkw+5g==",
+ "dependencies": {
+ "color": "^4.2.3",
+ "color2k": "^2.0.2",
+ "deepmerge": "4.3.1",
+ "flat": "^5.0.2",
+ "lodash.foreach": "^4.5.0",
+ "lodash.get": "^4.4.2",
+ "lodash.kebabcase": "^4.1.1",
+ "lodash.mapkeys": "^4.6.0",
+ "lodash.omit": "^4.5.0",
+ "tailwind-variants": "^0.1.18"
+ },
+ "peerDependencies": {
+ "tailwindcss": "*"
+ }
+ },
+ "node_modules/@nextui-org/tooltip": {
+ "version": "2.0.29",
+ "resolved": "https://registry.npmjs.org/@nextui-org/tooltip/-/tooltip-2.0.29.tgz",
+ "integrity": "sha512-LaFyS5bXhcZFXP9rnh6pTKsYX6siWjzEe5z72FIOyAV2yvv2yhkRiO/mEHKI8moo+/tScW/6muFXsvbEalPefg==",
+ "dependencies": {
+ "@nextui-org/aria-utils": "2.0.15",
+ "@nextui-org/framer-transitions": "2.0.15",
+ "@nextui-org/react-utils": "2.0.10",
+ "@nextui-org/shared-utils": "2.0.4",
+ "@react-aria/interactions": "^3.19.1",
+ "@react-aria/overlays": "^3.18.1",
+ "@react-aria/tooltip": "^3.6.4",
+ "@react-aria/utils": "^3.21.1",
+ "@react-stately/tooltip": "^3.4.5",
+ "@react-types/overlays": "^3.8.3",
+ "@react-types/tooltip": "^3.4.5"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-aria-button": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-button/-/use-aria-button-2.0.6.tgz",
+ "integrity": "sha512-38DZ3FK/oPZ3sppfM5EtgJ4DITOajNwSKkAMePBmuSZl+bsW7peP8g5JNd9uPOEz3edCOppT60AQSICsYiH3cg==",
+ "dependencies": {
+ "@nextui-org/use-aria-press": "2.0.1",
+ "@react-aria/focus": "^3.14.3",
+ "@react-aria/interactions": "^3.19.1",
+ "@react-aria/utils": "^3.21.1",
+ "@react-types/button": "^3.9.0",
+ "@react-types/shared": "^3.21.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-aria-link": {
+ "version": "2.0.15",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-link/-/use-aria-link-2.0.15.tgz",
+ "integrity": "sha512-znzOeTZ10o3O5F2nihi8BR8rAhRHgrRWcEBovV7OqJeFzvTQwsHl9/xy45zBfwJQksBtfcBfQf+GEHXeDwfigA==",
+ "dependencies": {
+ "@nextui-org/use-aria-press": "2.0.1",
+ "@react-aria/focus": "^3.14.3",
+ "@react-aria/interactions": "^3.19.1",
+ "@react-aria/utils": "^3.21.1",
+ "@react-types/link": "^3.5.1",
+ "@react-types/shared": "^3.21.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-aria-press": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-press/-/use-aria-press-2.0.1.tgz",
+ "integrity": "sha512-T3MjHH5TU9qnkf872GmhcfQK16ITMmMW9zir6xsSsz0w6ay9Y0XTSPrI2zRL6ociFyfJjP840XCLtSx6VBfEBQ==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.19.1",
+ "@react-aria/ssr": "^3.8.0",
+ "@react-aria/utils": "^3.21.1",
+ "@react-types/shared": "^3.21.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-aria-toggle-button": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-toggle-button/-/use-aria-toggle-button-2.0.6.tgz",
+ "integrity": "sha512-6Sjp7a0HQjmboLKNZu9AtZmyHz8+vhqcDwJDYTZjrrna0udxEXG+6C14YZzQxoJcvuaMimr5E8Aq0AxyRAr0MQ==",
+ "dependencies": {
+ "@nextui-org/use-aria-button": "2.0.6",
+ "@react-aria/utils": "^3.21.1",
+ "@react-stately/toggle": "^3.6.3",
+ "@react-types/button": "^3.9.0",
+ "@react-types/shared": "^3.21.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-clipboard": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-clipboard/-/use-clipboard-2.0.4.tgz",
+ "integrity": "sha512-rMcaX0QsolOJ1BQbp1T/FVsSPn2m0Ss4Z+bbdS7eM6EFKtJdVJWlpbrST0/kR2UcW1KWeK27NYmtNPF5+hgZMA==",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-scroll-position": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-scroll-position/-/use-scroll-position-2.0.4.tgz",
+ "integrity": "sha512-5ugiHqQ1OptBmujOsJGigbUt/rQ826+8RKYSpBp1uax1eF7TlpigXt6mS1PDsJIyEauHi8rjH5B3weOn1//tug==",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@react-aria/button": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.9.0.tgz",
+ "integrity": "sha512-Jri4OCN+4YmpJDPNQvk1DJoskKD9sdTxZaWWWJdAwoSIunZk3IEBXVvRfKzsEAVtI+UJN25zC2kyjXbVPS2XAA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.15.0",
+ "@react-aria/interactions": "^3.20.0",
+ "@react-aria/utils": "^3.22.0",
+ "@react-stately/toggle": "^3.7.0",
+ "@react-types/button": "^3.9.1",
+ "@react-types/shared": "^3.22.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/focus": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.15.0.tgz",
+ "integrity": "sha512-nnxRyfqHuAjRwdQ4BpQyZPtGFKZmRU6cnaIb3pqWFCqEyJQensV7MA3TJ4Jhadq67cy1Ji5SYSlr1duBwjoYvw==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.20.0",
+ "@react-aria/utils": "^3.22.0",
+ "@react-types/shared": "^3.22.0",
+ "@swc/helpers": "^0.5.0",
+ "clsx": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/focus/node_modules/clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@react-aria/form": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.0.0.tgz",
+ "integrity": "sha512-APeGph9oTO8nro4ZObuy1hk+0hpF/ji9O3odPGhLkzP/HvW2J7NI9pjKJOINfgtYr2yvVUZf/MbTMxPwtAxhaQ==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.20.0",
+ "@react-aria/utils": "^3.22.0",
+ "@react-stately/form": "^3.0.0",
+ "@react-types/shared": "^3.22.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/i18n": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.9.0.tgz",
+ "integrity": "sha512-ebGP/sVG0ZtNF4RNFzs/W01tl7waYpBManh1kKWgA4roDPFt/odkgkDBzKGl+ggBb7TQRHsfUFHuqKsrsMy9TA==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.0",
+ "@internationalized/message": "^3.1.1",
+ "@internationalized/number": "^3.4.0",
+ "@internationalized/string": "^3.1.1",
+ "@react-aria/ssr": "^3.9.0",
+ "@react-aria/utils": "^3.22.0",
+ "@react-types/shared": "^3.22.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/interactions": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.20.0.tgz",
+ "integrity": "sha512-JCCEyK2Nb4mEHucrgmqhTHTNAEqhsiM07jJmmY22eikxnCQnsEfdwXyg9cgZLG79D5V7jyqVRqOp2OsG7Qx7kQ==",
+ "dependencies": {
+ "@react-aria/ssr": "^3.9.0",
+ "@react-aria/utils": "^3.22.0",
+ "@react-types/shared": "^3.22.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/label": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.3.tgz",
+ "integrity": "sha512-v1zuqbpYyYaPjrBWpceGjMpwP4ne6fLoOXdoIZoKLux2jkAcyIF2kIJFiyYoPQYQJWGRNo7q1oSwamxmng4xJw==",
+ "dependencies": {
+ "@react-aria/utils": "^3.22.0",
+ "@react-types/shared": "^3.22.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/link": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.6.2.tgz",
+ "integrity": "sha512-v9gXgQ3Gev0JOlg2MAXcubDMgX+0BlJ+hTyFYFMuN/4jVBlAe426WKbjg+6MMzxwukWg9C3Q08JzqdFTi4cBng==",
+ "dependencies": {
+ "@react-aria/focus": "^3.15.0",
+ "@react-aria/interactions": "^3.20.0",
+ "@react-aria/utils": "^3.22.0",
+ "@react-types/link": "^3.5.2",
+ "@react-types/shared": "^3.22.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/overlays": {
+ "version": "3.19.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.19.0.tgz",
+ "integrity": "sha512-VN5GkB8+uZ2cfXljBtkqmrsAhBdGoj4un/agH0Qyihi2dazsMeafczSNnqzbpVgB4Zt2UHPJUkKwihgzXRxJJA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.15.0",
+ "@react-aria/i18n": "^3.9.0",
+ "@react-aria/interactions": "^3.20.0",
+ "@react-aria/ssr": "^3.9.0",
+ "@react-aria/utils": "^3.22.0",
+ "@react-aria/visually-hidden": "^3.8.7",
+ "@react-stately/overlays": "^3.6.4",
+ "@react-types/button": "^3.9.1",
+ "@react-types/overlays": "^3.8.4",
+ "@react-types/shared": "^3.22.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/ssr": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.0.tgz",
+ "integrity": "sha512-Bz6BqP6ZorCme9tSWHZVmmY+s7AU8l6Vl2NUYmBzezD//fVHHfFo4lFBn5tBuAaJEm3AuCLaJQ6H2qhxNSb7zg==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ },
+ "engines": {
+ "node": ">= 12"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/switch": {
+ "version": "3.5.7",
+ "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.5.7.tgz",
+ "integrity": "sha512-zBEsB071zzhQ82RwAA42pFLXHgrpya0OoRAsTO6jHZwiaYMsyqJI2eiXd7F6rqklpgyO6k7jOQklGUuoSJW4pA==",
+ "dependencies": {
+ "@react-aria/toggle": "^3.9.0",
+ "@react-stately/toggle": "^3.7.0",
+ "@react-types/switch": "^3.5.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/textfield": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.13.0.tgz",
+ "integrity": "sha512-sUlinDE+k/WhbskyqVOkuffuhiQpjgvp+iGRoralStVgb8Tcb+POxgAlw5jS4tNjdivCb3IjVJemUNJM7xsxxA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.15.0",
+ "@react-aria/form": "^3.0.0",
+ "@react-aria/label": "^3.7.3",
+ "@react-aria/utils": "^3.22.0",
+ "@react-stately/form": "^3.0.0",
+ "@react-stately/utils": "^3.9.0",
+ "@react-types/shared": "^3.22.0",
+ "@react-types/textfield": "^3.9.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/toggle": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.9.0.tgz",
+ "integrity": "sha512-2YMWYQUEmcoAXtrAE86QXBS9XlmJyV6IFRlMTBNaeLTdH3AmACExgsyU66Tt0sKl6LMDMI376ItMFqAz27BBdQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.15.0",
+ "@react-aria/interactions": "^3.20.0",
+ "@react-aria/utils": "^3.22.0",
+ "@react-stately/toggle": "^3.7.0",
+ "@react-types/checkbox": "^3.6.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/tooltip": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.6.5.tgz",
+ "integrity": "sha512-hXw4Z8nYLOWz3QOQ807wWZdvDwR3gofsmZhAehg2HPRwdRfCQK+1cjVKeUd9cKCAxs0Cay7dV0oUdilLbCQ2Gg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.15.0",
+ "@react-aria/interactions": "^3.20.0",
+ "@react-aria/utils": "^3.22.0",
+ "@react-stately/tooltip": "^3.4.6",
+ "@react-types/shared": "^3.22.0",
+ "@react-types/tooltip": "^3.4.6",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/utils": {
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.22.0.tgz",
+ "integrity": "sha512-Qi/m65GFFljXA/ayj1m5g3KZdgbZY3jacSSqD5vNUOEGiKsn4OQcsw8RfC2c0SgtLV1hLzsfvFI1OiryPlGCcw==",
+ "dependencies": {
+ "@react-aria/ssr": "^3.9.0",
+ "@react-stately/utils": "^3.9.0",
+ "@react-types/shared": "^3.22.0",
+ "@swc/helpers": "^0.5.0",
+ "clsx": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/utils/node_modules/clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@react-aria/visually-hidden": {
+ "version": "3.8.7",
+ "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.7.tgz",
+ "integrity": "sha512-OuIGMVQIt7GC43h4x35BgkZid8lhoPu7Xz4TQRP8nvOJWb1lH7ehrRRuGdUsK3y90nwpxTdNdg4DILblg+VaLw==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.20.0",
+ "@react-aria/utils": "^3.22.0",
+ "@react-types/shared": "^3.22.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/collections": {
+ "version": "3.10.3",
+ "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.10.3.tgz",
+ "integrity": "sha512-fA28HIApAIz9sNGeOVXZJPgV5Kig6M72KI1t9sUbnRUr9Xq9OMJTR6ElDMXNe0iTeZffRFDOPYyqnX9zkxof6Q==",
+ "dependencies": {
+ "@react-types/shared": "^3.22.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/form": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.0.0.tgz",
+ "integrity": "sha512-C8wkfFmtx1escizibhdka5JvTy9/Vp173CS9cakjvWTmnjYYC1nOlzwp7BsYWTgerCFbRY/BU/Cf/bJDxPiUKQ==",
+ "dependencies": {
+ "@react-types/shared": "^3.22.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/overlays": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.4.tgz",
+ "integrity": "sha512-tHEaoAGpE9dSnsskqLPVKum59yGteoSqsniTopodM+miQozbpPlSjdiQnzGLroy5Afx5OZYClE616muNHUILXA==",
+ "dependencies": {
+ "@react-stately/utils": "^3.9.0",
+ "@react-types/overlays": "^3.8.4",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/toggle": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.7.0.tgz",
+ "integrity": "sha512-TRksHkCJk/Xogq4181g3CYgJf+EfsJCqX5UZDSw1Z1Kgpvonjmdf6FAfQfCh9QR2OuXUL6hOLUDVLte5OPI+5g==",
+ "dependencies": {
+ "@react-stately/utils": "^3.9.0",
+ "@react-types/checkbox": "^3.6.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/tooltip": {
+ "version": "3.4.6",
+ "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.4.6.tgz",
+ "integrity": "sha512-uL93bmsXf+OOgpKLPEKfpDH4z+MK2CuqlqVxx7rshN0vjWOSoezE5nzwgee90+RpDrLNNNWTNa7n+NkDRpI1jA==",
+ "dependencies": {
+ "@react-stately/overlays": "^3.6.4",
+ "@react-types/tooltip": "^3.4.6",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/utils": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.9.0.tgz",
+ "integrity": "sha512-yPKFY1F88HxuZ15BG2qwAYxtpE4HnIU0Ofi4CuBE0xC6I8mwo4OQjDzi+DZjxQngM9D6AeTTD6F1V8gkozA0Gw==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/button": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.9.1.tgz",
+ "integrity": "sha512-bf9iTar3PtqnyV9rA+wyFyrskZKhwmOuOd/ifYIjPs56YNVXWH5Wfqj6Dx3xdFBgtKx8mEVQxVhoX+WkHX+rtw==",
+ "dependencies": {
+ "@react-types/shared": "^3.22.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/checkbox": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.6.0.tgz",
+ "integrity": "sha512-vgbuJzQpVCNT5AZWV0OozXCnihqrXxoZKfJFIw0xro47pT2sn3t5UC4RA9wfjDGMoK4frw1K/4HQLsQIOsPBkw==",
+ "dependencies": {
+ "@react-types/shared": "^3.22.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/link": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.5.2.tgz",
+ "integrity": "sha512-/s51/WejmpLiyxOgP89s4txgxYoGaPe8pVDItVo1h4+BhU1Puyvgv/Jx8t9dPvo6LUXbraaN+SgKk/QDxaiirw==",
+ "dependencies": {
+ "@react-types/shared": "^3.22.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/overlays": {
+ "version": "3.8.4",
+ "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.4.tgz",
+ "integrity": "sha512-pfgNlQnbF6RB/R2oSxyqAP3Uzz0xE/k5q4n5gUeCDNLjY5qxFHGE8xniZZ503nZYw6VBa9XMN1efDOKQyeiO0w==",
+ "dependencies": {
+ "@react-types/shared": "^3.22.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/shared": {
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.22.0.tgz",
+ "integrity": "sha512-yVOekZWbtSmmiThGEIARbBpnmUIuePFlLyctjvCbgJgGhz8JnEJOipLQ/a4anaWfzAgzSceQP8j/K+VOOePleA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/switch": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.0.tgz",
+ "integrity": "sha512-/wNmUGjk69bP6t5k2QkAdrNN5Eb9Rz4dOyp0pCPmoeE+5haW6sV5NmtkvWX1NSc4DQz1xL/a5b+A0vxPCP22Jw==",
+ "dependencies": {
+ "@react-types/shared": "^3.22.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/textfield": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.9.0.tgz",
+ "integrity": "sha512-D/DiwzsfkwlAg3uv8hoIfwju+zhB/hWDEdTvxQbPkntDr0kmN/QfI17NMSzbOBCInC4ABX87ViXLGxr940ykGA==",
+ "dependencies": {
+ "@react-types/shared": "^3.22.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/tooltip": {
+ "version": "3.4.6",
+ "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.6.tgz",
+ "integrity": "sha512-RaZewdER7ZcsNL99RhVHs8kSLyzIBkwc0W6eFZrxST2MD9J5GzkVWRhIiqtFOd5U1aYnxdJ6woq72Ef+le6Vfw==",
+ "dependencies": {
+ "@react-types/overlays": "^3.8.4",
+ "@react-types/shared": "^3.22.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@rushstack/eslint-patch": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz",
+ "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA=="
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz",
+ "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
+ },
+ "node_modules/@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.10",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz",
+ "integrity": "sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A=="
+ },
+ "node_modules/@types/react": {
+ "version": "18.2.21",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz",
+ "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.2.7",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz",
+ "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/scheduler": {
+ "version": "0.16.6",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz",
+ "integrity": "sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA=="
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.10.0.tgz",
+ "integrity": "sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "6.10.0",
+ "@typescript-eslint/types": "6.10.0",
+ "@typescript-eslint/typescript-estree": "6.10.0",
+ "@typescript-eslint/visitor-keys": "6.10.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz",
+ "integrity": "sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==",
+ "dependencies": {
+ "@typescript-eslint/types": "6.10.0",
+ "@typescript-eslint/visitor-keys": "6.10.0"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.10.0.tgz",
+ "integrity": "sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==",
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz",
+ "integrity": "sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==",
+ "dependencies": {
+ "@typescript-eslint/types": "6.10.0",
+ "@typescript-eslint/visitor-keys": "6.10.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz",
+ "integrity": "sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==",
+ "dependencies": {
+ "@typescript-eslint/types": "6.10.0",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
+ "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
+ "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz",
+ "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.2.1"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
+ "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1",
+ "is-array-buffer": "^3.0.2",
+ "is-shared-array-buffer": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ast-types-flow": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
+ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="
+ },
+ "node_modules/asynciterator.prototype": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz",
+ "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.16",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz",
+ "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.21.10",
+ "caniuse-lite": "^1.0.30001538",
+ "fraction.js": "^4.3.6",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axe-core": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz",
+ "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
+ "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.22.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
+ "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001541",
+ "electron-to-chromium": "^1.4.535",
+ "node-releases": "^2.0.13",
+ "update-browserslist-db": "^1.0.13"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "dependencies": {
+ "streamsearch": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10.16.0"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
+ "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
+ "dependencies": {
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.1",
+ "set-function-length": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001561",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz",
+ "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
+ },
+ "node_modules/clsx": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz",
+ "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/color2k": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.2.tgz",
+ "integrity": "sha512-kJhwH5nAwb34tmyuqq/lgjEKzlFXn1U99NlnB6Ws4qVaERcRUYeYP1cBw6BJ4vxaWStAUEef4WMr7WjOCnBt8w=="
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
+ "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/detect-node-es": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.581",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.581.tgz",
+ "integrity": "sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw=="
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.15.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
+ "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.22.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
+ "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "arraybuffer.prototype.slice": "^1.0.2",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.5",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.6",
+ "get-intrinsic": "^1.2.2",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.12",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.13.1",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.5.1",
+ "safe-array-concat": "^1.0.1",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.8",
+ "string.prototype.trimend": "^1.0.7",
+ "string.prototype.trimstart": "^1.0.7",
+ "typed-array-buffer": "^1.0.0",
+ "typed-array-byte-length": "^1.0.0",
+ "typed-array-byte-offset": "^1.0.0",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-iterator-helpers": {
+ "version": "1.0.15",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz",
+ "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==",
+ "dependencies": {
+ "asynciterator.prototype": "^1.0.0",
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.1",
+ "es-set-tostringtag": "^2.0.1",
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.2.1",
+ "globalthis": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "iterator.prototype": "^1.1.2",
+ "safe-array-concat": "^1.0.1"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
+ "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.2",
+ "has-tostringtag": "^1.0.0",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+ "dependencies": {
+ "hasown": "^2.0.0"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz",
+ "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.2",
+ "@eslint/js": "8.48.0",
+ "@humanwhocodes/config-array": "^0.11.10",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-next": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.2.tgz",
+ "integrity": "sha512-CasWThlsyIcg/a+clU6KVOMTieuDhTztsrqvniP6AsRki9v7FnojTa7vKQOYM8QSOsQdZ/aElLD1Y2Oc8/PsIg==",
+ "dependencies": {
+ "@next/eslint-plugin-next": "14.0.2",
+ "@rushstack/eslint-patch": "^1.3.3",
+ "@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.28.1",
+ "eslint-plugin-jsx-a11y": "^6.7.1",
+ "eslint-plugin-react": "^7.33.2",
+ "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
+ },
+ "peerDependencies": {
+ "eslint": "^7.23.0 || ^8.0.0",
+ "typescript": ">=3.3.1"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz",
+ "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==",
+ "dependencies": {
+ "debug": "^4.3.4",
+ "enhanced-resolve": "^5.12.0",
+ "eslint-module-utils": "^2.7.4",
+ "fast-glob": "^3.3.1",
+ "get-tsconfig": "^4.5.0",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+ "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.29.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz",
+ "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==",
+ "dependencies": {
+ "array-includes": "^3.1.7",
+ "array.prototype.findlastindex": "^1.2.3",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.8.0",
+ "hasown": "^2.0.0",
+ "is-core-module": "^2.13.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.7",
+ "object.groupby": "^1.0.1",
+ "object.values": "^1.1.7",
+ "semver": "^6.3.1",
+ "tsconfig-paths": "^3.14.2"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz",
+ "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==",
+ "dependencies": {
+ "@babel/runtime": "^7.23.2",
+ "aria-query": "^5.3.0",
+ "array-includes": "^3.1.7",
+ "array.prototype.flatmap": "^1.3.2",
+ "ast-types-flow": "^0.0.8",
+ "axe-core": "=4.7.0",
+ "axobject-query": "^3.2.1",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "es-iterator-helpers": "^1.0.15",
+ "hasown": "^2.0.0",
+ "jsx-ast-utils": "^3.3.5",
+ "language-tags": "^1.0.9",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.7",
+ "object.fromentries": "^2.0.7"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.33.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz",
+ "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "array.prototype.tosorted": "^1.1.1",
+ "doctrine": "^2.1.0",
+ "es-iterator-helpers": "^1.0.12",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "object.hasown": "^1.1.2",
+ "object.values": "^1.1.6",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.4",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.5",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz",
+ "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.9",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
+ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ=="
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/framer-motion": {
+ "version": "10.16.4",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.16.4.tgz",
+ "integrity": "sha512-p9V9nGomS3m6/CALXqv6nFGMuFOxbWsmaOrdmhyQimMIlLl3LC7h7l86wge/Js/8cRu5ktutS/zlzgR7eBOtFA==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ },
+ "optionalDependencies": {
+ "@emotion/is-prop-valid": "^0.8.2"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+ "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
+ "dependencies": {
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-nonce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
+ "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
+ },
+ "node_modules/globals": {
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+ "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+ "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
+ "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.2",
+ "hasown": "^2.0.0",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/intl-messageformat": {
+ "version": "10.5.5",
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.5.tgz",
+ "integrity": "sha512-sF+cJCfMn+kGcSeGGRcB1UpBH0/+Ko2KByHj2RpL2qIkRvsrnuDl8zufEkvk+GPosk932C6W1Kq24xWaw+2jDA==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.17.3",
+ "@formatjs/fast-memoize": "2.2.0",
+ "@formatjs/icu-messageformat-parser": "2.7.1",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+ "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ },
+ "node_modules/is-async-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
+ "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-finalizationregistry": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz",
+ "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
+ "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
+ "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
+ "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
+ "dependencies": {
+ "which-typed-array": "^1.1.11"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakmap": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
+ "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
+ "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "node_modules/iterator.prototype": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
+ "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==",
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "get-intrinsic": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "reflect.getprototypeof": "^1.0.4",
+ "set-function-name": "^2.0.1"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
+ },
+ "node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.22",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w=="
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
+ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
+ "dependencies": {
+ "language-subtag-registry": "^0.3.20"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.foreach": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ=="
+ },
+ "node_modules/lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="
+ },
+ "node_modules/lodash.kebabcase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+ "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g=="
+ },
+ "node_modules/lodash.mapkeys": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.mapkeys/-/lodash.mapkeys-4.6.0.tgz",
+ "integrity": "sha512-0Al+hxpYvONWtg+ZqHpa/GaVzxuN3V7Xeo2p+bY06EaK/n+Y9R7nBePPN2o1LxmL0TWQSwP8LYZ008/hc9JzhA=="
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+ },
+ "node_modules/lodash.omit": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz",
+ "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg=="
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
+ },
+ "node_modules/next": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.0.2.tgz",
+ "integrity": "sha512-jsAU2CkYS40GaQYOiLl9m93RTv2DA/tTJ0NRlmZIBIL87YwQ/xR8k796z7IqgM3jydI8G25dXvyYMC9VDIevIg==",
+ "dependencies": {
+ "@next/env": "14.0.2",
+ "@swc/helpers": "0.5.2",
+ "busboy": "1.6.0",
+ "caniuse-lite": "^1.0.30001406",
+ "postcss": "8.4.31",
+ "styled-jsx": "5.1.1",
+ "watchpack": "2.4.0"
+ },
+ "bin": {
+ "next": "dist/bin/next"
+ },
+ "engines": {
+ "node": ">=18.17.0"
+ },
+ "optionalDependencies": {
+ "@next/swc-darwin-arm64": "14.0.2",
+ "@next/swc-darwin-x64": "14.0.2",
+ "@next/swc-linux-arm64-gnu": "14.0.2",
+ "@next/swc-linux-arm64-musl": "14.0.2",
+ "@next/swc-linux-x64-gnu": "14.0.2",
+ "@next/swc-linux-x64-musl": "14.0.2",
+ "@next/swc-win32-arm64-msvc": "14.0.2",
+ "@next/swc-win32-ia32-msvc": "14.0.2",
+ "@next/swc-win32-x64-msvc": "14.0.2"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.1.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "sass": "^1.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@opentelemetry/api": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/next-themes": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.2.1.tgz",
+ "integrity": "sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==",
+ "peerDependencies": {
+ "next": "*",
+ "react": "*",
+ "react-dom": "*"
+ }
+ },
+ "node_modules/next/node_modules/@swc/helpers": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz",
+ "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ=="
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
+ "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
+ "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
+ "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
+ "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1"
+ }
+ },
+ "node_modules/object.hasown": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz",
+ "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==",
+ "dependencies": {
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
+ "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
+ "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "dependencies": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^2.1.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
+ "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.11"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.13",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
+ "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/react-remove-scroll": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz",
+ "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==",
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.4",
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.0",
+ "use-sidecar": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-remove-scroll-bar": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz",
+ "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==",
+ "dependencies": {
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-style-singleton": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
+ "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "dependencies": {
+ "get-nonce": "^1.0.0",
+ "invariant": "^2.2.4",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-textarea-autosize": {
+ "version": "8.5.3",
+ "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz",
+ "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "use-composed-ref": "^1.3.0",
+ "use-latest": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/reflect.getprototypeof": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz",
+ "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1",
+ "globalthis": "^1.0.3",
+ "which-builtin-type": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
+ "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
+ "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "set-function-name": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
+ "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
+ "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
+ "dependencies": {
+ "define-data-property": "^1.1.1",
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
+ "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz",
+ "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "regexp.prototype.flags": "^1.5.0",
+ "set-function-name": "^2.0.0",
+ "side-channel": "^1.0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
+ "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
+ "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
+ "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/styled-jsx": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
+ "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
+ "dependencies": {
+ "client-only": "0.0.1"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.34.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz",
+ "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "7.1.6",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sucrase/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tailwind-merge": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz",
+ "integrity": "sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/dcastil"
+ }
+ },
+ "node_modules/tailwind-variants": {
+ "version": "0.1.18",
+ "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-0.1.18.tgz",
+ "integrity": "sha512-yoydMYm3FbZRw7wak+E2sqwYv2Uo3YWRqVZR03DGqDGm0ytzDrEnWO/Q/GMHdhaz8adOvycKw/bwCgQFCfmfhg==",
+ "dependencies": {
+ "tailwind-merge": "^1.14.0"
+ },
+ "engines": {
+ "node": ">=16.x",
+ "pnpm": ">=7.x"
+ },
+ "peerDependencies": {
+ "tailwindcss": "*"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz",
+ "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.0",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.19.1",
+ "lilconfig": "^2.1.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.23",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.1",
+ "postcss-nested": "^6.0.1",
+ "postcss-selector-parser": "^6.0.11",
+ "resolve": "^1.22.2",
+ "sucrase": "^3.32.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz",
+ "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==",
+ "engines": {
+ "node": ">=16.13.0"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
+ "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
+ "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
+ "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "has-proto": "^1.0.1",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "has-proto": "^1.0.1",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
+ "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=12.20"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/use-callback-ref": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz",
+ "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-composed-ref": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz",
+ "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/use-isomorphic-layout-effect": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
+ "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-latest": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz",
+ "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==",
+ "dependencies": {
+ "use-isomorphic-layout-effect": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sidecar": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
+ "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+ "dependencies": {
+ "detect-node-es": "^1.1.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/watchpack": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
+ "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz",
+ "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==",
+ "dependencies": {
+ "function.prototype.name": "^1.1.5",
+ "has-tostringtag": "^1.0.0",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.0.5",
+ "is-finalizationregistry": "^1.0.2",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.1.4",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.0.2",
+ "which-collection": "^1.0.1",
+ "which-typed-array": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-collection": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
+ "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
+ "dependencies": {
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-weakmap": "^2.0.1",
+ "is-weakset": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
+ "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.4",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/yaml": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/packages/dapp/package.json b/packages/dapp/package.json
new file mode 100644
index 0000000..d8c849d
--- /dev/null
+++ b/packages/dapp/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "next-app-template",
+ "version": "0.0.1",
+ "private": true,
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "@dynamic-labs/ethereum": "^0.19.1",
+ "@dynamic-labs/sdk-react-core": "^0.19.1",
+ "@dynamic-labs/wagmi-connector": "^0.19.1",
+ "@nextui-org/button": "2.0.26",
+ "@nextui-org/code": "2.0.24",
+ "@nextui-org/input": "2.1.16",
+ "@nextui-org/kbd": "2.0.25",
+ "@nextui-org/link": "2.0.26",
+ "@nextui-org/navbar": "2.0.27",
+ "@nextui-org/react": "^2.2.9",
+ "@nextui-org/snippet": "2.0.30",
+ "@nextui-org/switch": "2.0.25",
+ "@nextui-org/system": "2.0.15",
+ "@nextui-org/theme": "2.1.17",
+ "@react-aria/ssr": "^3.8.0",
+ "@react-aria/visually-hidden": "^3.8.6",
+ "@types/node": "20.5.7",
+ "@types/react": "18.2.21",
+ "@types/react-dom": "18.2.7",
+ "autoprefixer": "10.4.16",
+ "clsx": "^2.0.0",
+ "eslint": "8.48.0",
+ "eslint-config-next": "14.0.2",
+ "framer-motion": "^10.16.4",
+ "intl-messageformat": "^10.5.0",
+ "next": "14.0.2",
+ "next-themes": "^0.2.1",
+ "postcss": "8.4.31",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
+ "tailwind-variants": "^0.1.18",
+ "tailwindcss": "3.3.5",
+ "typescript": "5.0.4"
+ },
+ "devDependencies": {
+ "pino-pretty": "^10.2.3"
+ }
+}
diff --git a/packages/dapp/postcss.config.js b/packages/dapp/postcss.config.js
new file mode 100644
index 0000000..33ad091
--- /dev/null
+++ b/packages/dapp/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/packages/dapp/public/coins/agve.svg b/packages/dapp/public/coins/agve.svg
new file mode 100644
index 0000000..a0b46ad
--- /dev/null
+++ b/packages/dapp/public/coins/agve.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/coins/dai.svg b/packages/dapp/public/coins/dai.svg
new file mode 100644
index 0000000..b484f06
--- /dev/null
+++ b/packages/dapp/public/coins/dai.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/coins/eth.svg b/packages/dapp/public/coins/eth.svg
new file mode 100644
index 0000000..182d547
--- /dev/null
+++ b/packages/dapp/public/coins/eth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/coins/eure.svg b/packages/dapp/public/coins/eure.svg
new file mode 100644
index 0000000..14f8618
--- /dev/null
+++ b/packages/dapp/public/coins/eure.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/coins/fox.svg b/packages/dapp/public/coins/fox.svg
new file mode 100644
index 0000000..0b33e60
--- /dev/null
+++ b/packages/dapp/public/coins/fox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/coins/gno.svg b/packages/dapp/public/coins/gno.svg
new file mode 100644
index 0000000..06cb34d
--- /dev/null
+++ b/packages/dapp/public/coins/gno.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/coins/link.svg b/packages/dapp/public/coins/link.svg
new file mode 100644
index 0000000..b28c30b
--- /dev/null
+++ b/packages/dapp/public/coins/link.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/coins/sdai.svg b/packages/dapp/public/coins/sdai.svg
new file mode 100644
index 0000000..114a9db
--- /dev/null
+++ b/packages/dapp/public/coins/sdai.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/packages/dapp/public/coins/usdc.svg b/packages/dapp/public/coins/usdc.svg
new file mode 100644
index 0000000..eb615f4
--- /dev/null
+++ b/packages/dapp/public/coins/usdc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/coins/usdt.svg b/packages/dapp/public/coins/usdt.svg
new file mode 100644
index 0000000..3b2999d
--- /dev/null
+++ b/packages/dapp/public/coins/usdt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/coins/wbtc.svg b/packages/dapp/public/coins/wbtc.svg
new file mode 100644
index 0000000..79b5cc7
--- /dev/null
+++ b/packages/dapp/public/coins/wbtc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/coins/wsteth.svg b/packages/dapp/public/coins/wsteth.svg
new file mode 100644
index 0000000..33f1f2f
--- /dev/null
+++ b/packages/dapp/public/coins/wsteth.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/dapp/public/coins/wxdai.svg b/packages/dapp/public/coins/wxdai.svg
new file mode 100644
index 0000000..75b90e3
--- /dev/null
+++ b/packages/dapp/public/coins/wxdai.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/coins/xdai-stake.svg b/packages/dapp/public/coins/xdai-stake.svg
new file mode 100644
index 0000000..db23ee3
--- /dev/null
+++ b/packages/dapp/public/coins/xdai-stake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/coins/xdai.svg b/packages/dapp/public/coins/xdai.svg
new file mode 100644
index 0000000..75b90e3
--- /dev/null
+++ b/packages/dapp/public/coins/xdai.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/favicon.ico b/packages/dapp/public/favicon.ico
new file mode 100644
index 0000000..718d6fe
Binary files /dev/null and b/packages/dapp/public/favicon.ico differ
diff --git a/packages/dapp/public/next.svg b/packages/dapp/public/next.svg
new file mode 100644
index 0000000..5174b28
--- /dev/null
+++ b/packages/dapp/public/next.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/public/vercel.svg b/packages/dapp/public/vercel.svg
new file mode 100644
index 0000000..d2f8422
--- /dev/null
+++ b/packages/dapp/public/vercel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/dapp/styles/globals.css b/packages/dapp/styles/globals.css
new file mode 100644
index 0000000..b5c61c9
--- /dev/null
+++ b/packages/dapp/styles/globals.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/packages/dapp/tailwind.config.js b/packages/dapp/tailwind.config.js
new file mode 100644
index 0000000..8e57551
--- /dev/null
+++ b/packages/dapp/tailwind.config.js
@@ -0,0 +1,16 @@
+import {nextui} from '@nextui-org/theme'
+
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+ content: [
+ './pages/**/*.{js,ts,jsx,tsx,mdx}',
+ './components/**/*.{js,ts,jsx,tsx,mdx}',
+ './app/**/*.{js,ts,jsx,tsx,mdx}',
+ './node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}'
+ ],
+ theme: {
+ extend: {},
+ },
+ darkMode: "class",
+ plugins: [nextui()],
+}
diff --git a/packages/dapp/tsconfig.json b/packages/dapp/tsconfig.json
new file mode 100644
index 0000000..e06a445
--- /dev/null
+++ b/packages/dapp/tsconfig.json
@@ -0,0 +1,28 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./*"]
+ }
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"]
+}
diff --git a/packages/dapp/types/index.ts b/packages/dapp/types/index.ts
new file mode 100644
index 0000000..1a73f1b
--- /dev/null
+++ b/packages/dapp/types/index.ts
@@ -0,0 +1,5 @@
+import {SVGProps} from "react";
+
+export type IconSvgProps = SVGProps & {
+ size?: number;
+};
diff --git a/packages/hooks/.env.example b/packages/hooks/.env.example
new file mode 100644
index 0000000..1297f16
--- /dev/null
+++ b/packages/hooks/.env.example
@@ -0,0 +1,5 @@
+ANVIL_CHAIN_ID=31337
+ANVIL_FORK_URL=https://cloudflare-eth.com
+ETHERSCAN_API_KEY=
+FORGE_RPC_URL=
+VITE_INFURA_API_KEY=""
diff --git a/packages/hooks/.gitignore b/packages/hooks/.gitignore
new file mode 100644
index 0000000..b62bf08
--- /dev/null
+++ b/packages/hooks/.gitignore
@@ -0,0 +1,52 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+
+/coverage
+
+# vite
+
+dist
+dist-ssr
+
+# production
+
+/build
+
+# misc
+
+.DS_Store
+\*.pem
+*.local
+
+# debug
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# local env files
+
+.env
+.env\*.local
+
+# vercel
+
+.vercel
+
+# typescript
+
+\*.tsbuildinfo
+next-env.d.ts
+
+# forge
+
+out
+cache
\ No newline at end of file
diff --git a/packages/hooks/.gitmodules b/packages/hooks/.gitmodules
new file mode 100644
index 0000000..994702e
--- /dev/null
+++ b/packages/hooks/.gitmodules
@@ -0,0 +1,5 @@
+[submodule "contracts/lib/forge-std"]
+ path = contracts/lib/forge-std
+ url = https://github.com/foundry-rs/forge-std
+[submodule "lib/forge-std"]
+ branch = v1.2.0
diff --git a/packages/hooks/.npmrc b/packages/hooks/.npmrc
new file mode 100644
index 0000000..8db3575
--- /dev/null
+++ b/packages/hooks/.npmrc
@@ -0,0 +1 @@
+strict-peer-dependencies = false
\ No newline at end of file
diff --git a/packages/hooks/README.md b/packages/hooks/README.md
new file mode 100644
index 0000000..e38b1da
--- /dev/null
+++ b/packages/hooks/README.md
@@ -0,0 +1,115 @@
+This is a [wagmi](https://wagmi.sh) + [Foundry](https://book.getfoundry.sh/) + [Vite](https://vitejs.dev/) project bootstrapped with [`create-wagmi`](https://github.com/wagmi-dev/wagmi/tree/main/packages/create-wagmi)
+
+# Getting Started
+
+Run `npm run dev` in your terminal, and then open [localhost:5173](http://localhost:5173) in your browser.
+
+Once the webpage has loaded, changes made to files inside the `src/` directory (e.g. `src/App.tsx`) will automatically update the webpage.
+
+# Generating ABIs & React Hooks
+
+This project comes with `@wagmi/cli` built-in, which means you can generate wagmi-compatible (type safe) ABIs & React Hooks straight from the command line.
+
+To generate ABIs & Hooks, follow the steps below.
+
+## Install Foundry
+
+First, you will need to install [Foundry](https://book.getfoundry.sh/getting-started/installation) in order to build your smart contracts. This can be done by running the following command:
+
+```
+curl -L https://foundry.paradigm.xyz | bash
+```
+
+## Generate code
+
+To generate ABIs & React Hooks from your Foundry project (in `./contracts`), you can run:
+
+```
+npm run wagmi
+```
+
+This will use the wagmi config (`wagmi.config.ts`) to generate a `src/generated.ts` file which will include your ABIs & Hooks that you can start using in your project.
+
+[Here is an example](./src/components/Counter.tsx) of where Hooks from the generated file is being used.
+
+# Deploying Contracts
+
+To deploy your contracts to a network, you can use Foundry's [Forge](https://book.getfoundry.sh/forge/) – a command-line tool to tests, build, and deploy your smart contracts.
+
+You can read a more in-depth guide on using Forge to deploy a smart contract [here](https://book.getfoundry.sh/forge/deploying), but we have included a simple script in the `package.json` to get you started.
+
+Below are the steps to deploying a smart contract to Ethereum Mainnet using Forge:
+
+## Install Foundry
+
+Make sure you have Foundry installed & set up.
+
+[See the above instructions](#install-foundry).
+
+## Set up environment
+
+You will first need to set up your `.env` to tell Forge where to deploy your contract.
+
+Go ahead and open up your `.env` file, and enter the following env vars:
+
+- `ETHERSCAN_API_KEY`: Your Etherscan API Key.
+- `FORGE_RPC_URL`: The RPC URL of the network to deploy to.
+- `FORGE_PRIVATE_KEY`: The private key of the wallet you want to deploy from.
+
+## Deploy contract
+
+You can now deploy your contract!
+
+```
+npm run deploy
+```
+
+# Developing with Anvil (Mainnet Fork)
+
+Let's combine the above sections and use Anvil alongside our development environment to use our contracts (`./contracts`) against an Ethereum Mainnet fork.
+
+## Install Foundry
+
+Make sure you have Foundry installed & set up.
+
+[See the above instructions](#install-foundry).
+
+## Start dev server
+
+Run the command:
+
+```
+npm run dev:foundry
+```
+
+This will:
+
+- Start a Next.js dev server,
+- Start the `@wagmi/cli` in [**watch mode**](https://wagmi.sh/cli/commands/generate#options) to listen to changes in our contracts, and instantly generate code,
+- Start an Anvil instance (Mainnet Fork) on an RPC URL.
+
+## Deploy our contract to Anvil
+
+Now that we have an Anvil instance up and running, let's deploy our smart contract to the Anvil network:
+
+```
+pnpm run deploy:anvil
+```
+
+## Start developing
+
+Now that your contract has been deployed to Anvil, you can start playing around with your contract straight from the web interface!
+
+Head to [localhost:5173](http://localhost:5173) in your browser, connect your wallet, and try increment the counter on the Foundry chain.
+
+> Tip: If you import an Anvil private key into your browser wallet (MetaMask, Coinbase Wallet, etc) – you will have 10,000 ETH to play with 😎. The private key is found in the terminal under "Private Keys" when you start up an Anvil instance with `npm run dev:foundry`.
+
+# Learn more
+
+To learn more about [Vite](https://vitejs.dev/), [Foundry](https://book.getfoundry.sh/) or [wagmi](https://wagmi.sh), check out the following resources:
+
+- [Foundry Documentation](https://book.getfoundry.sh/) – learn more about the Foundry stack (Anvil, Forge, etc).
+- [wagmi Documentation](https://wagmi.sh) – learn about wagmi Hooks and API.
+- [wagmi Examples](https://wagmi.sh/examples/connect-wallet) – a suite of simple examples using wagmi.
+- [@wagmi/cli Documentation](https://wagmi.sh/cli) – learn more about the wagmi CLI.
+- [Vite Documentation](https://vitejs.dev/) – learn about Vite features and API.
diff --git a/packages/hooks/foundry.toml b/packages/hooks/foundry.toml
new file mode 100644
index 0000000..ec707e7
--- /dev/null
+++ b/packages/hooks/foundry.toml
@@ -0,0 +1,8 @@
+[profile.default]
+src = 'contracts/src'
+test = 'contracts/test'
+out = 'contracts/out'
+libs = ['contracts/lib']
+solc = '0.8.13'
+
+# See more config options https://github.com/foundry-rs/foundry/tree/master/config
\ No newline at end of file
diff --git a/packages/hooks/index.html b/packages/hooks/index.html
new file mode 100644
index 0000000..651c332
--- /dev/null
+++ b/packages/hooks/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+ wagmi
+
+
+
+
+
+
+
diff --git a/packages/hooks/package.json b/packages/hooks/package.json
new file mode 100644
index 0000000..6f1a293
--- /dev/null
+++ b/packages/hooks/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "hooks",
+ "version": "0.0.1",
+ "private": true,
+ "scripts": {
+ "anvil": "source .env && anvil --fork-url $ANVIL_FORK_URL --chain-id $ANVIL_CHAIN_ID",
+ "deploy": "source .env && forge create contracts/src/Counter.sol:Counter --rpc-url $FORGE_RPC_URL --private-key $FORGE_PRIVATE_KEY --etherscan-api-key $ETHERSCAN_API_KEY --verify",
+ "deploy:anvil": "source .env && forge create contracts/src/Counter.sol:Counter --rpc-url http://127.0.0.1:8545 --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80",
+ "dev": "npm run wagmi && vite",
+ "dev:foundry": "npm run dev & wagmi generate --watch & npm run anvil",
+ "build": "npm run wagmi && tsc && vite build",
+ "preview": "vite preview",
+ "wagmi": "wagmi generate"
+ },
+ "dependencies": {
+ "@aragon/osx-ethers": "1.3.0-rc0.4",
+ "@aragon/sdk-client": "^1.18.2",
+ "@aragon/sdk-client-common": "^1.10.0",
+ "@hookform/resolvers": "^3.3.2",
+ "@tanstack/react-query": "^5.7.0",
+ "@tanstack/react-query-devtools": "^5.7.0",
+ "@wagmi/cli": "^1.0.0",
+ "buffer": "^6.0.3",
+ "connectkit": "^1.4.0",
+ "graphql-request": "^6.1.0",
+ "process": "^0.11.10",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-hook-form": "^7.48.2",
+ "util": "^0.12.4",
+ "viem": "~0.3.36",
+ "wagmi": "^1.0.6",
+ "zod": "^3.22.4"
+ },
+ "devDependencies": {
+ "@types/react": "^18.0.9",
+ "@types/react-dom": "^18.0.3",
+ "@vitejs/plugin-react": "^4.0.0",
+ "autoprefixer": "^10.4.16",
+ "postcss": "^8.4.31",
+ "tailwindcss": "^3.3.5",
+ "typescript": "^5.0.4",
+ "vite": "^4.3.5"
+ },
+ "prettier": {
+ "printWidth": 120
+ }
+}
\ No newline at end of file
diff --git a/packages/hooks/polyfills.ts b/packages/hooks/polyfills.ts
new file mode 100644
index 0000000..57e078c
--- /dev/null
+++ b/packages/hooks/polyfills.ts
@@ -0,0 +1,6 @@
+import { Buffer } from 'buffer'
+import process from 'process'
+
+window.global = window
+window.process = process
+window.Buffer = Buffer
diff --git a/packages/hooks/src/App.tsx b/packages/hooks/src/App.tsx
new file mode 100644
index 0000000..12e1c47
--- /dev/null
+++ b/packages/hooks/src/App.tsx
@@ -0,0 +1,46 @@
+import { useAccount } from "wagmi";
+import { ConnectKitButton } from "connectkit";
+
+import { InstallPlugin } from "./budget/InstallPlugin";
+import { NewRootBudget } from "./budget/CreateRootBudget";
+import { BudgetInfo } from "./budget/BudgetInfo";
+import { BudgetSelector } from "./budget/BudgetSelector";
+import { DaoDetails } from "./budget/DaoDetails";
+import { useStore } from "./hooks";
+
+export function App() {
+ const { isConnected } = useAccount();
+ const { hasDao, hasBudget } = useStore();
+
+ return (
+ <>
+ Budgets Hooks
+ USDC: 0x7e356025b80B220661c859d134ae12146f73f335
+ (DAO): 0x5bb4f8d77a072cdcfdb5e47da248c579e70be597
+
+
+
+ {isConnected && hasDao && (
+ <>
+ {!hasBudget ? (
+ <>
+ no budget found for this DAO
+
+
+
+ >
+ ) : (
+ <>
+
+
+
+
+
+
+ >
+ )}
+ >
+ )}
+ >
+ );
+}
diff --git a/packages/hooks/src/budget/BudgetInfo.tsx b/packages/hooks/src/budget/BudgetInfo.tsx
new file mode 100644
index 0000000..3ef484b
--- /dev/null
+++ b/packages/hooks/src/budget/BudgetInfo.tsx
@@ -0,0 +1,33 @@
+import { useBudgetInfo } from "../hooks/useBudgetInfo";
+import { UsePaymentStatus, usePayment } from "../hooks/usePayment";
+import { stringifyWithBigInt } from "../lib/strings";
+
+export function BudgetInfo() {
+ const { budgetInfo } = useBudgetInfo();
+ const { status, executePaymentAsync } = usePayment();
+
+ const disabled = status === UsePaymentStatus.WaitingForConfirmation || status === UsePaymentStatus.WaitingForSigner;
+
+ const handleExecutePayment = () => {
+ executePaymentAsync?.({
+ amount: 42069n,
+ budgetId: 6,
+ description: "testing",
+ to: "0x47d80912400ef8f8224531EBEB1ce8f2ACf4b75a",
+ });
+ };
+
+ return (
+
+
Budget Info
+ {budgetInfo && (
+
+
{stringifyWithBigInt(budgetInfo)}
+
handleExecutePayment()}>
+ {status}
+
+
+ )}
+
+ );
+}
diff --git a/packages/hooks/src/budget/BudgetSelector.tsx b/packages/hooks/src/budget/BudgetSelector.tsx
new file mode 100644
index 0000000..2448007
--- /dev/null
+++ b/packages/hooks/src/budget/BudgetSelector.tsx
@@ -0,0 +1,24 @@
+import { useBudgetCount } from "../hooks/useBudgetCount";
+import { useStore } from "../hooks";
+
+export function BudgetSelector() {
+ const { setActiveBudget } = useStore();
+ const { budgetCount } = useBudgetCount();
+
+ return (
+ <>
+ {budgetCount ? (
+
+
Budgets
+ {Array.from({ length: Number(budgetCount) }, (_, index) => (
+ setActiveBudget((index + 1).toString())}>
+ Budget ID: {index + 1}
+
+ ))}
+
+ ) : (
+ No Budgets
+ )}
+ >
+ );
+}
diff --git a/packages/hooks/src/budget/CreateRootBudget.tsx b/packages/hooks/src/budget/CreateRootBudget.tsx
new file mode 100644
index 0000000..118de12
--- /dev/null
+++ b/packages/hooks/src/budget/CreateRootBudget.tsx
@@ -0,0 +1,65 @@
+import { NewRootBudgetStatus, useNewRootBudget } from "../hooks/useNewRootBudget";
+
+import { ProcessingMessage } from "../components/ProcessingMessage";
+import { useForm } from "react-hook-form";
+import { zodResolver } from "@hookform/resolvers/zod";
+import { TimeUnit } from "../types";
+
+import { RootBudgetFormType, rootBudgetSchema } from "../types/schema";
+
+export function NewRootBudget() {
+ const {
+ register,
+ handleSubmit,
+ formState: { errors },
+ } = useForm({
+ resolver: zodResolver(rootBudgetSchema),
+ });
+
+ const { error, newRootBudget, txHash, status } = useNewRootBudget();
+
+ const isButtonDisabled =
+ status === NewRootBudgetStatus.WaitingForSigner || status === NewRootBudgetStatus.WaitingForConfirmation;
+
+ const onSubmit = (data: RootBudgetFormType) => {
+ console.log(data);
+
+ newRootBudget?.(data);
+ };
+
+ return (
+
+ );
+}
diff --git a/packages/hooks/src/budget/DaoDetails.tsx b/packages/hooks/src/budget/DaoDetails.tsx
new file mode 100644
index 0000000..4c3188f
--- /dev/null
+++ b/packages/hooks/src/budget/DaoDetails.tsx
@@ -0,0 +1,40 @@
+import { z } from "zod";
+import { useForm } from "react-hook-form";
+import { zodResolver } from "@hookform/resolvers/zod";
+
+import { useLoadDao } from "../hooks/useLoadDao";
+import { EthAddress } from "../types/schema";
+
+export function DaoDetails() {
+ const { loadDao, dao } = useLoadDao();
+
+ const schema = z.object({
+ daoAddress: EthAddress,
+ });
+
+ type FormValues = z.infer;
+ const {
+ register,
+ handleSubmit,
+ formState: { errors },
+ } = useForm({
+ resolver: zodResolver(schema),
+ });
+
+ const onSubmit = (data: FormValues) => {
+ loadDao(data.daoAddress);
+ };
+
+ return (
+
+ );
+}
diff --git a/packages/hooks/src/budget/InstallPlugin.tsx b/packages/hooks/src/budget/InstallPlugin.tsx
new file mode 100644
index 0000000..e5b1f76
--- /dev/null
+++ b/packages/hooks/src/budget/InstallPlugin.tsx
@@ -0,0 +1,24 @@
+import { useInstallBudget, useStore } from "../hooks";
+import { ProcessingMessage } from "../components/ProcessingMessage";
+import { InstallBudgetStatus } from "../hooks/useInstallBudget";
+
+export function InstallPlugin() {
+ const { daoAddress, tokenVotingAddress } = useStore();
+ const { installPlugin, prepareTxHash, installTxHash, error, status } = useInstallBudget();
+
+ const isDisabled = status !== InstallBudgetStatus.Idle || !daoAddress || !tokenVotingAddress;
+
+ return (
+
+
Install Budget
+
+
installPlugin?.()} disabled={isDisabled}>
+ {status}
+
+ {prepareTxHash &&
}
+ {installTxHash &&
}
+ {error &&
Error: {error.message}
}
+
+
+ );
+}
diff --git a/packages/hooks/src/components/Account.tsx b/packages/hooks/src/components/Account.tsx
new file mode 100644
index 0000000..071b5fe
--- /dev/null
+++ b/packages/hooks/src/components/Account.tsx
@@ -0,0 +1,13 @@
+import { useAccount, useEnsName } from 'wagmi'
+
+export function Account() {
+ const { address } = useAccount()
+ const { data: ensName } = useEnsName({ address })
+
+ return (
+
+ {ensName ?? address}
+ {ensName ? ` (${address})` : null}
+
+ )
+}
diff --git a/packages/hooks/src/components/Connect.tsx b/packages/hooks/src/components/Connect.tsx
new file mode 100644
index 0000000..6aad518
--- /dev/null
+++ b/packages/hooks/src/components/Connect.tsx
@@ -0,0 +1,32 @@
+import { BaseError } from 'viem'
+import { useAccount, useConnect, useDisconnect } from 'wagmi'
+
+export function Connect() {
+ const { connector, isConnected } = useAccount()
+ const { connect, connectors, error, isLoading, pendingConnector } =
+ useConnect()
+ const { disconnect } = useDisconnect()
+
+ return (
+
+
+ {isConnected && (
+ disconnect()}>
+ Disconnect from {connector?.name}
+
+ )}
+
+ {connectors
+ .filter((x) => x.ready && x.id !== connector?.id)
+ .map((x) => (
+ connect({ connector: x })}>
+ {x.name}
+ {isLoading && x.id === pendingConnector?.id && ' (connecting)'}
+
+ ))}
+
+
+ {error &&
{(error as BaseError).shortMessage}
}
+
+ )
+}
diff --git a/packages/hooks/src/components/NetworkSwitcher.tsx b/packages/hooks/src/components/NetworkSwitcher.tsx
new file mode 100644
index 0000000..b0371ee
--- /dev/null
+++ b/packages/hooks/src/components/NetworkSwitcher.tsx
@@ -0,0 +1,34 @@
+import { BaseError } from 'viem'
+import { useNetwork, useSwitchNetwork } from 'wagmi'
+
+export function NetworkSwitcher() {
+ const { chain } = useNetwork()
+ const { chains, error, isLoading, pendingChainId, switchNetwork } =
+ useSwitchNetwork()
+
+ if (!chain) return null
+
+ return (
+
+
+ Connected to {chain?.name ?? chain?.id}
+ {chain?.unsupported && ' (unsupported)'}
+
+
+ {switchNetwork && (
+
+ {chains.map((x) =>
+ x.id === chain?.id ? null : (
+ switchNetwork(x.id)}>
+ {x.name}
+ {isLoading && x.id === pendingChainId && ' (switching)'}
+
+ ),
+ )}
+
+ )}
+
+
{error && (error as BaseError).shortMessage}
+
+ )
+}
diff --git a/packages/hooks/src/components/ProcessingMessage.tsx b/packages/hooks/src/components/ProcessingMessage.tsx
new file mode 100644
index 0000000..754534a
--- /dev/null
+++ b/packages/hooks/src/components/ProcessingMessage.tsx
@@ -0,0 +1,21 @@
+import { useNetwork, useWaitForTransaction } from "wagmi";
+import { BytesLike } from "../types";
+
+export function ProcessingMessage({ hash, name }: { hash?: BytesLike; name: string }) {
+ const { chain } = useNetwork();
+ const etherscan = chain?.blockExplorers?.etherscan;
+
+ const { data, isError, isLoading } = useWaitForTransaction({ hash });
+
+ let message;
+ if (isError) message = `Error occurred during ${name} transaction.`;
+ else if (isLoading) message = `Waiting for ${name} transaction to be mined... `;
+ else if (data) message = `${name} transaction mined.`;
+ else message = `Processing ${name} transaction... `;
+
+ return (
+
+ {message} {etherscan && {etherscan.name} }
+
+ );
+}
diff --git a/packages/hooks/src/generated.ts b/packages/hooks/src/generated.ts
new file mode 100644
index 0000000..0748f85
--- /dev/null
+++ b/packages/hooks/src/generated.ts
@@ -0,0 +1,24185 @@
+// Generated by @wagmi/cli@1.0.0 on 11/11/2023 at 9:04:22 PM
+import {
+ useContractRead,
+ UseContractReadConfig,
+ useContractWrite,
+ UseContractWriteConfig,
+ usePrepareContractWrite,
+ UsePrepareContractWriteConfig,
+ useContractEvent,
+ UseContractEventConfig,
+} from 'wagmi'
+import { ReadContractResult, WriteContractMode, PrepareWriteContractResult } from 'wagmi/actions'
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Budget
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const budgetABI = [
+ { stateMutability: 'nonpayable', type: 'constructor', inputs: [] },
+ { type: 'error', inputs: [], name: 'BadInput' },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'dao', internalType: 'address', type: 'address' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'DaoUnauthorized',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'allowanceId', internalType: 'uint256', type: 'uint256' }],
+ name: 'DisabledAllowance',
+ },
+ { type: 'error', inputs: [], name: 'InheritedAmountNotAllowed' },
+ { type: 'error', inputs: [], name: 'InvalidTimeShift' },
+ { type: 'error', inputs: [], name: 'NativeValueMismatch' },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ { name: 'remainingBudget', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'Overbudget',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256' },
+ { name: 'token', internalType: 'address', type: 'address' },
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'PaymentExecutionFailed',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'patentToken', internalType: 'address', type: 'address' },
+ { name: 'childToken', internalType: 'address', type: 'address' },
+ ],
+ name: 'TokenMismatch',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'allowanceId', internalType: 'uint256', type: 'uint256' }],
+ name: 'UnauthorizedNotAllowanceAdmin',
+ },
+ { type: 'error', inputs: [], name: 'UnauthorizedNotDao' },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256' },
+ { name: 'actor', internalType: 'address', type: 'address' },
+ ],
+ name: 'UnauthorizedPaymentExecution',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'allowanceId', internalType: 'uint256', type: 'uint256' }],
+ name: 'UnexistentAllowance',
+ },
+ { type: 'error', inputs: [], name: 'ZeroAmountPayment' },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'AllowanceAmountChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'parentAllowanceId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'spender', internalType: 'address', type: 'address', indexed: true },
+ { name: 'token', internalType: 'address', type: 'address', indexed: false },
+ { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'recurrency', internalType: 'EncodedTimeShift', type: 'bytes6', indexed: false },
+ { name: 'nextResetTime', internalType: 'uint40', type: 'uint40', indexed: false },
+ { name: 'name', internalType: 'string', type: 'string', indexed: false },
+ ],
+ name: 'AllowanceCreated',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'actor', internalType: 'address', type: 'address', indexed: true },
+ { name: 'token', internalType: 'address', type: 'address', indexed: false },
+ { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'nextResetTime', internalType: 'uint40', type: 'uint40', indexed: false },
+ { name: 'description', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'AllowanceDebited',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'name', internalType: 'string', type: 'string', indexed: false },
+ ],
+ name: 'AllowanceNameChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'spender', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AllowanceSpenderChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'isEnabled', internalType: 'bool', type: 'bool', indexed: false },
+ ],
+ name: 'AllowanceStateChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'actor', internalType: 'address', type: 'address', indexed: true },
+ { name: 'token', internalType: 'address', type: 'address', indexed: false },
+ { name: 'tos', internalType: 'address[]', type: 'address[]', indexed: false },
+ { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]', indexed: false },
+ { name: 'nextResetTime', internalType: 'uint40', type: 'uint40', indexed: false },
+ { name: 'description', internalType: 'string', type: 'string', indexed: false },
+ ],
+ name: 'MultiPaymentExecuted',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'actor', internalType: 'address', type: 'address', indexed: true },
+ { name: 'token', internalType: 'address', type: 'address', indexed: false },
+ { name: 'to', internalType: 'address', type: 'address', indexed: true },
+ { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'nextResetTime', internalType: 'uint40', type: 'uint40', indexed: false },
+ { name: 'description', internalType: 'string', type: 'string', indexed: false },
+ ],
+ name: 'PaymentExecuted',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'ROOT_BUDGET_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'UPGRADE_PLUGIN_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ name: 'allowances',
+ outputs: [
+ { name: 'parentId', internalType: 'uint256', type: 'uint256' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ { name: 'spent', internalType: 'uint256', type: 'uint256' },
+ { name: 'token', internalType: 'address', type: 'address' },
+ { name: 'nextResetTime', internalType: 'uint40', type: 'uint40' },
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'recurrency', internalType: 'EncodedTimeShift', type: 'bytes6' },
+ { name: 'isDisabled', internalType: 'bool', type: 'bool' },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'allowancesCount',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'parentAllowanceId', internalType: 'uint256', type: 'uint256' },
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'token', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ { name: 'recurrency', internalType: 'EncodedTimeShift', type: 'bytes6' },
+ { name: 'name', internalType: 'string', type: 'string' },
+ ],
+ name: 'createAllowance',
+ outputs: [{ name: 'allowanceId', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'dao',
+ outputs: [{ name: '', internalType: 'contract IDAO', type: 'address' }],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ { name: 'description', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'debitAllowance',
+ outputs: [{ name: 'nextResetTime', internalType: 'uint40', type: 'uint40' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256' },
+ { name: 'tos', internalType: 'address[]', type: 'address[]' },
+ { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' },
+ { name: 'description', internalType: 'string', type: 'string' },
+ ],
+ name: 'executeMultiPayment',
+ outputs: [{ name: 'nextResetTime', internalType: 'uint40', type: 'uint40' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256' },
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ { name: 'description', internalType: 'string', type: 'string' },
+ ],
+ name: 'executePayment',
+ outputs: [{ name: 'nextResetTime', internalType: 'uint40', type: 'uint40' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'implementation',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '_dao', internalType: 'contract IDAO', type: 'address' }],
+ name: 'initialize',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256' },
+ { name: 'actor', internalType: 'address', type: 'address' },
+ ],
+ name: 'isAdminOnAllowance',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'pluginType',
+ outputs: [{ name: '', internalType: 'enum IPlugin.PluginType', type: 'uint8' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'setAllowanceAmount',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256' },
+ { name: 'name', internalType: 'string', type: 'string' },
+ ],
+ name: 'setAllowanceName',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256' },
+ { name: 'spender', internalType: 'address', type: 'address' },
+ ],
+ name: 'setAllowanceSpender',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'allowanceId', internalType: 'uint256', type: 'uint256' },
+ { name: 'isEnabled', internalType: 'bool', type: 'bool' },
+ ],
+ name: 'setAllowanceState',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newImplementation', internalType: 'address', type: 'address' }],
+ name: 'upgradeTo',
+ outputs: [],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'newImplementation', internalType: 'address', type: 'address' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'upgradeToAndCall',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// BudgetSetup
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const budgetSetupABI = [
+ { stateMutability: 'nonpayable', type: 'constructor', inputs: [] },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'implementation',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ { name: '_data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'prepareInstallation',
+ outputs: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ {
+ name: 'preparedSetupData',
+ internalType: 'struct IPluginSetup.PreparedSetupData',
+ type: 'tuple',
+ components: [
+ { name: 'helpers', internalType: 'address[]', type: 'address[]' },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ {
+ name: '_payload',
+ internalType: 'struct IPluginSetup.SetupPayload',
+ type: 'tuple',
+ components: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ { name: 'currentHelpers', internalType: 'address[]', type: 'address[]' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'prepareUninstallation',
+ outputs: [
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ { name: '_currentBuild', internalType: 'uint16', type: 'uint16' },
+ {
+ name: '_payload',
+ internalType: 'struct IPluginSetup.SetupPayload',
+ type: 'tuple',
+ components: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ { name: 'currentHelpers', internalType: 'address[]', type: 'address[]' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'prepareUpdate',
+ outputs: [
+ { name: 'initData', internalType: 'bytes', type: 'bytes' },
+ {
+ name: 'preparedSetupData',
+ internalType: 'struct IPluginSetup.PreparedSetupData',
+ type: 'tuple',
+ components: [
+ { name: 'helpers', internalType: 'address[]', type: 'address[]' },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// CallbackHandler
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const callbackHandlerABI = [
+ {
+ type: 'error',
+ inputs: [
+ { name: 'callbackSelector', internalType: 'bytes4', type: 'bytes4' },
+ { name: 'magicNumber', internalType: 'bytes4', type: 'bytes4' },
+ ],
+ name: 'UnkownCallback',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'sender', internalType: 'address', type: 'address', indexed: false },
+ { name: 'sig', internalType: 'bytes4', type: 'bytes4', indexed: true },
+ { name: 'data', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'CallbackReceived',
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ContextUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const contextUpgradeableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// DAO
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const daoABI = [
+ { stateMutability: 'nonpayable', type: 'constructor', inputs: [] },
+ { type: 'error', inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256' }], name: 'ActionFailed' },
+ { type: 'error', inputs: [], name: 'AnyAddressDisallowedForWhoAndWhere' },
+ {
+ type: 'error',
+ inputs: [{ name: 'condition', internalType: 'contract IPermissionCondition', type: 'address' }],
+ name: 'ConditionInterfacNotSupported',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'condition', internalType: 'contract IPermissionCondition', type: 'address' }],
+ name: 'ConditionNotAContract',
+ },
+ { type: 'error', inputs: [], name: 'FunctionRemoved' },
+ { type: 'error', inputs: [], name: 'GrantWithConditionNotSupported' },
+ { type: 'error', inputs: [], name: 'InsufficientGas' },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'expected', internalType: 'uint256', type: 'uint256' },
+ { name: 'actual', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'NativeTokenDepositAmountMismatch',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'currentCondition', internalType: 'address', type: 'address' },
+ { name: 'newCondition', internalType: 'address', type: 'address' },
+ ],
+ name: 'PermissionAlreadyGrantedForDifferentCondition',
+ },
+ { type: 'error', inputs: [], name: 'PermissionsForAnyAddressDisallowed' },
+ {
+ type: 'error',
+ inputs: [{ name: 'protocolVersion', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ name: 'ProtocolVersionUpgradeNotSupported',
+ },
+ { type: 'error', inputs: [], name: 'ReentrantCall' },
+ { type: 'error', inputs: [], name: 'TooManyActions' },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'Unauthorized',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'callbackSelector', internalType: 'bytes4', type: 'bytes4' },
+ { name: 'magicNumber', internalType: 'bytes4', type: 'bytes4' },
+ ],
+ name: 'UnkownCallback',
+ },
+ { type: 'error', inputs: [], name: 'ZeroAmount' },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'sender', internalType: 'address', type: 'address', indexed: false },
+ { name: 'sig', internalType: 'bytes4', type: 'bytes4', indexed: true },
+ { name: 'data', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'CallbackReceived',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'sender', internalType: 'address', type: 'address', indexed: true },
+ { name: 'token', internalType: 'address', type: 'address', indexed: true },
+ { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: '_reference', internalType: 'string', type: 'string', indexed: false },
+ ],
+ name: 'Deposited',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'actor', internalType: 'address', type: 'address', indexed: true },
+ { name: 'callId', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ {
+ name: 'actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ indexed: false,
+ },
+ { name: 'allowFailureMap', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'failureMap', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'execResults', internalType: 'bytes[]', type: 'bytes[]', indexed: false },
+ ],
+ name: 'Executed',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'here', internalType: 'address', type: 'address', indexed: true },
+ { name: 'where', internalType: 'address', type: 'address', indexed: false },
+ { name: 'who', internalType: 'address', type: 'address', indexed: true },
+ { name: 'condition', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'Granted',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'metadata', internalType: 'bytes', type: 'bytes', indexed: false }],
+ name: 'MetadataSet',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'sender', internalType: 'address', type: 'address', indexed: false },
+ { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'NativeTokenDeposited',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'daoURI', internalType: 'string', type: 'string', indexed: false }],
+ name: 'NewURI',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'here', internalType: 'address', type: 'address', indexed: true },
+ { name: 'where', internalType: 'address', type: 'address', indexed: false },
+ { name: 'who', internalType: 'address', type: 'address', indexed: true },
+ ],
+ name: 'Revoked',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'interfaceId', internalType: 'bytes4', type: 'bytes4', indexed: false },
+ { name: 'callbackSelector', internalType: 'bytes4', type: 'bytes4', indexed: false },
+ { name: 'magicNumber', internalType: 'bytes4', type: 'bytes4', indexed: false },
+ ],
+ name: 'StandardCallbackRegistered',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'forwarder', internalType: 'address', type: 'address', indexed: false }],
+ name: 'TrustedForwarderSet',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+ { stateMutability: 'nonpayable', type: 'fallback' },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'EXECUTE_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'REGISTER_STANDARD_CALLBACK_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'ROOT_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'SET_METADATA_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'SET_TRUSTED_FORWARDER_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'UPGRADE_DAO_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'VALIDATE_SIGNATURE_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ {
+ name: '_items',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ name: 'applyMultiTargetPermissions',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ {
+ name: 'items',
+ internalType: 'struct PermissionLib.SingleTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ name: 'applySingleTargetPermissions',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'daoURI',
+ outputs: [{ name: '', internalType: 'string', type: 'string' }],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: '_token', internalType: 'address', type: 'address' },
+ { name: '_amount', internalType: 'uint256', type: 'uint256' },
+ { name: '_reference', internalType: 'string', type: 'string' },
+ ],
+ name: 'deposit',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_callId', internalType: 'bytes32', type: 'bytes32' },
+ {
+ name: '_actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ { name: '_allowFailureMap', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'execute',
+ outputs: [
+ { name: 'execResults', internalType: 'bytes[]', type: 'bytes[]' },
+ { name: 'failureMap', internalType: 'uint256', type: 'uint256' },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'getTrustedForwarder',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'grant',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_condition', internalType: 'contract IPermissionCondition', type: 'address' },
+ ],
+ name: 'grantWithCondition',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'hasPermission',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_metadata', internalType: 'bytes', type: 'bytes' },
+ { name: '_initialOwner', internalType: 'address', type: 'address' },
+ { name: '_trustedForwarder', internalType: 'address', type: 'address' },
+ { name: 'daoURI_', internalType: 'string', type: 'string' },
+ ],
+ name: 'initialize',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_previousProtocolVersion', internalType: 'uint8[3]', type: 'uint8[3]' },
+ { name: '_initData', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'initializeFrom',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'isGranted',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_hash', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_signature', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'isValidSignature',
+ outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_interfaceId', internalType: 'bytes4', type: 'bytes4' },
+ { name: '_callbackSelector', internalType: 'bytes4', type: 'bytes4' },
+ { name: '_magicNumber', internalType: 'bytes4', type: 'bytes4' },
+ ],
+ name: 'registerStandardCallback',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'revoke',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newDaoURI', internalType: 'string', type: 'string' }],
+ name: 'setDaoURI',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '_metadata', internalType: 'bytes', type: 'bytes' }],
+ name: 'setMetadata',
+ outputs: [],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [{ name: '', internalType: 'address', type: 'address' }],
+ name: 'setSignatureValidator',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '_newTrustedForwarder', internalType: 'address', type: 'address' }],
+ name: 'setTrustedForwarder',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newImplementation', internalType: 'address', type: 'address' }],
+ name: 'upgradeTo',
+ outputs: [],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'newImplementation', internalType: 'address', type: 'address' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'upgradeToAndCall',
+ outputs: [],
+ },
+ { stateMutability: 'payable', type: 'receive' },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// DAOMock
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const daoMockABI = [
+ {
+ stateMutability: 'nonpayable',
+ type: 'constructor',
+ inputs: [{ name: 'initialOwner', internalType: 'address', type: 'address' }],
+ },
+ { type: 'error', inputs: [], name: 'AnyAddressDisallowedForWhoAndWhere' },
+ {
+ type: 'error',
+ inputs: [{ name: 'condition', internalType: 'contract IPermissionCondition', type: 'address' }],
+ name: 'ConditionInterfacNotSupported',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'condition', internalType: 'contract IPermissionCondition', type: 'address' }],
+ name: 'ConditionNotAContract',
+ },
+ { type: 'error', inputs: [], name: 'GrantWithConditionNotSupported' },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'currentCondition', internalType: 'address', type: 'address' },
+ { name: 'newCondition', internalType: 'address', type: 'address' },
+ ],
+ name: 'PermissionAlreadyGrantedForDifferentCondition',
+ },
+ { type: 'error', inputs: [], name: 'PermissionsForAnyAddressDisallowed' },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'Unauthorized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'sender', internalType: 'address', type: 'address', indexed: true },
+ { name: 'token', internalType: 'address', type: 'address', indexed: true },
+ { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: '_reference', internalType: 'string', type: 'string', indexed: false },
+ ],
+ name: 'Deposited',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'actor', internalType: 'address', type: 'address', indexed: true },
+ { name: 'callId', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ {
+ name: 'actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ indexed: false,
+ },
+ { name: 'allowFailureMap', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'failureMap', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'execResults', internalType: 'bytes[]', type: 'bytes[]', indexed: false },
+ ],
+ name: 'Executed',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'here', internalType: 'address', type: 'address', indexed: true },
+ { name: 'where', internalType: 'address', type: 'address', indexed: false },
+ { name: 'who', internalType: 'address', type: 'address', indexed: true },
+ { name: 'condition', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'Granted',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'metadata', internalType: 'bytes', type: 'bytes', indexed: false }],
+ name: 'MetadataSet',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'sender', internalType: 'address', type: 'address', indexed: false },
+ { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'NativeTokenDeposited',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'here', internalType: 'address', type: 'address', indexed: true },
+ { name: 'where', internalType: 'address', type: 'address', indexed: false },
+ { name: 'who', internalType: 'address', type: 'address', indexed: true },
+ ],
+ name: 'Revoked',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'interfaceId', internalType: 'bytes4', type: 'bytes4', indexed: false },
+ { name: 'callbackSelector', internalType: 'bytes4', type: 'bytes4', indexed: false },
+ { name: 'magicNumber', internalType: 'bytes4', type: 'bytes4', indexed: false },
+ ],
+ name: 'StandardCallbackRegistered',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'forwarder', internalType: 'address', type: 'address', indexed: false }],
+ name: 'TrustedForwarderSet',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'ROOT_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ {
+ name: '_items',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ name: 'applyMultiTargetPermissions',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ {
+ name: 'items',
+ internalType: 'struct PermissionLib.SingleTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ name: 'applySingleTargetPermissions',
+ outputs: [],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: '', internalType: 'address', type: 'address' },
+ { name: '', internalType: 'uint256', type: 'uint256' },
+ { name: '', internalType: 'string', type: 'string' },
+ ],
+ name: 'deposit',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'callId', internalType: 'bytes32', type: 'bytes32' },
+ {
+ name: '_actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ { name: 'allowFailureMap', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'execute',
+ outputs: [
+ { name: 'execResults', internalType: 'bytes[]', type: 'bytes[]' },
+ { name: 'failureMap', internalType: 'uint256', type: 'uint256' },
+ ],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'getTrustedForwarder',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'grant',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_condition', internalType: 'contract IPermissionCondition', type: 'address' },
+ ],
+ name: 'grantWithCondition',
+ outputs: [],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [
+ { name: '', internalType: 'address', type: 'address' },
+ { name: '', internalType: 'address', type: 'address' },
+ { name: '', internalType: 'bytes32', type: 'bytes32' },
+ { name: '', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'hasPermission',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'isGranted',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [
+ { name: '', internalType: 'bytes32', type: 'bytes32' },
+ { name: '', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'isValidSignature',
+ outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '', internalType: 'address', type: 'address' },
+ { name: '', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'pastVotes',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_interfaceId', internalType: 'bytes4', type: 'bytes4' },
+ { name: '_callbackSelector', internalType: 'bytes4', type: 'bytes4' },
+ { name: '_magicNumber', internalType: 'bytes4', type: 'bytes4' },
+ ],
+ name: 'registerStandardCallback',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'revoke',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
+ name: 'setMetadata',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '', internalType: 'address', type: 'address' }],
+ name: 'setSignatureValidator',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '', internalType: 'address', type: 'address' }],
+ name: 'setTrustedForwarder',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ name: 'totalSupply',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// DaoAuthorizableUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const daoAuthorizableUpgradeableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'dao',
+ outputs: [{ name: '', internalType: 'contract IDAO', type: 'address' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ENS
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ensABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address', indexed: true },
+ { name: 'operator', internalType: 'address', type: 'address', indexed: true },
+ { name: 'approved', internalType: 'bool', type: 'bool', indexed: false },
+ ],
+ name: 'ApprovalForAll',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'label', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'owner', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'NewOwner',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'resolver', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'NewResolver',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'ttl', internalType: 'uint64', type: 'uint64', indexed: false },
+ ],
+ name: 'NewTTL',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'owner', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'Transfer',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address' },
+ { name: 'operator', internalType: 'address', type: 'address' },
+ ],
+ name: 'isApprovedForAll',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'owner',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'recordExists',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'resolver',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'operator', internalType: 'address', type: 'address' },
+ { name: 'approved', internalType: 'bool', type: 'bool' },
+ ],
+ name: 'setApprovalForAll',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'owner', internalType: 'address', type: 'address' },
+ ],
+ name: 'setOwner',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'owner', internalType: 'address', type: 'address' },
+ { name: 'resolver', internalType: 'address', type: 'address' },
+ { name: 'ttl', internalType: 'uint64', type: 'uint64' },
+ ],
+ name: 'setRecord',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'resolver', internalType: 'address', type: 'address' },
+ ],
+ name: 'setResolver',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'label', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'owner', internalType: 'address', type: 'address' },
+ ],
+ name: 'setSubnodeOwner',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'label', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'owner', internalType: 'address', type: 'address' },
+ { name: 'resolver', internalType: 'address', type: 'address' },
+ { name: 'ttl', internalType: 'uint64', type: 'uint64' },
+ ],
+ name: 'setSubnodeRecord',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'ttl', internalType: 'uint64', type: 'uint64' },
+ ],
+ name: 'setTTL',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'ttl',
+ outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ENSSubdomainRegistrar
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ensSubdomainRegistrarABI = [
+ { stateMutability: 'nonpayable', type: 'constructor', inputs: [] },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'subnode', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'nodeOwner', internalType: 'address', type: 'address' },
+ ],
+ name: 'AlreadyRegistered',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'dao', internalType: 'address', type: 'address' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'DaoUnauthorized',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'resolver', internalType: 'address', type: 'address' },
+ ],
+ name: 'InvalidResolver',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'REGISTER_ENS_SUBDOMAIN_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'UPGRADE_REGISTRAR_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'dao',
+ outputs: [{ name: '', internalType: 'contract IDAO', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'ens',
+ outputs: [{ name: '', internalType: 'contract ENS', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_managingDao', internalType: 'contract IDAO', type: 'address' },
+ { name: '_ens', internalType: 'contract ENS', type: 'address' },
+ { name: '_node', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'initialize',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'node',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_label', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_targetAddress', internalType: 'address', type: 'address' },
+ ],
+ name: 'registerSubnode',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'resolver',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '_resolver', internalType: 'address', type: 'address' }],
+ name: 'setDefaultResolver',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newImplementation', internalType: 'address', type: 'address' }],
+ name: 'upgradeTo',
+ outputs: [],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'newImplementation', internalType: 'address', type: 'address' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'upgradeToAndCall',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ERC165
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const erc165ABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ERC165StorageUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const erc165StorageUpgradeableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ERC165Upgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const erc165UpgradeableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ERC1967Proxy
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const erc1967ProxyABI = [
+ {
+ stateMutability: 'payable',
+ type: 'constructor',
+ inputs: [
+ { name: '_logic', internalType: 'address', type: 'address' },
+ { name: '_data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+ { stateMutability: 'payable', type: 'fallback' },
+ { stateMutability: 'payable', type: 'receive' },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ERC1967Upgrade
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const erc1967UpgradeABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ERC1967UpgradeUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const erc1967UpgradeUpgradeableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ERC20
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const erc20ABI = [
+ {
+ stateMutability: 'nonpayable',
+ type: 'constructor',
+ inputs: [
+ { name: 'name_', internalType: 'string', type: 'string' },
+ { name: 'symbol_', internalType: 'string', type: 'string' },
+ ],
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address', indexed: true },
+ { name: 'spender', internalType: 'address', type: 'address', indexed: true },
+ { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'Approval',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'from', internalType: 'address', type: 'address', indexed: true },
+ { name: 'to', internalType: 'address', type: 'address', indexed: true },
+ { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'Transfer',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address' },
+ { name: 'spender', internalType: 'address', type: 'address' },
+ ],
+ name: 'allowance',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'approve',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'account', internalType: 'address', type: 'address' }],
+ name: 'balanceOf',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'decimals',
+ outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'subtractedValue', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'decreaseAllowance',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'addedValue', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'increaseAllowance',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'name',
+ outputs: [{ name: '', internalType: 'string', type: 'string' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'symbol',
+ outputs: [{ name: '', internalType: 'string', type: 'string' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'totalSupply',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'transfer',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'from', internalType: 'address', type: 'address' },
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'transferFrom',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IABIResolver
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iabiResolverABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'contentType', internalType: 'uint256', type: 'uint256', indexed: true },
+ ],
+ name: 'ABIChanged',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'contentTypes', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'ABI',
+ outputs: [
+ { name: '', internalType: 'uint256', type: 'uint256' },
+ { name: '', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IAddrResolver
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iAddrResolverABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'a', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AddrChanged',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'addr',
+ outputs: [{ name: '', internalType: 'address payable', type: 'address' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IAddressResolver
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iAddressResolverABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'coinType', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'newAddress', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'AddressChanged',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'coinType', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'addr',
+ outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IBeacon
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iBeaconABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'implementation',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IBeaconUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iBeaconUpgradeableABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'implementation',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IContentHashResolver
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iContentHashResolverABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'hash', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'ContenthashChanged',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'contenthash',
+ outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IDAO
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const idaoABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'sender', internalType: 'address', type: 'address', indexed: true },
+ { name: 'token', internalType: 'address', type: 'address', indexed: true },
+ { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: '_reference', internalType: 'string', type: 'string', indexed: false },
+ ],
+ name: 'Deposited',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'actor', internalType: 'address', type: 'address', indexed: true },
+ { name: 'callId', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ {
+ name: 'actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ indexed: false,
+ },
+ { name: 'allowFailureMap', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'failureMap', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'execResults', internalType: 'bytes[]', type: 'bytes[]', indexed: false },
+ ],
+ name: 'Executed',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'metadata', internalType: 'bytes', type: 'bytes', indexed: false }],
+ name: 'MetadataSet',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'sender', internalType: 'address', type: 'address', indexed: false },
+ { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'NativeTokenDeposited',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'interfaceId', internalType: 'bytes4', type: 'bytes4', indexed: false },
+ { name: 'callbackSelector', internalType: 'bytes4', type: 'bytes4', indexed: false },
+ { name: 'magicNumber', internalType: 'bytes4', type: 'bytes4', indexed: false },
+ ],
+ name: 'StandardCallbackRegistered',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'forwarder', internalType: 'address', type: 'address', indexed: false }],
+ name: 'TrustedForwarderSet',
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: '_token', internalType: 'address', type: 'address' },
+ { name: '_amount', internalType: 'uint256', type: 'uint256' },
+ { name: '_reference', internalType: 'string', type: 'string' },
+ ],
+ name: 'deposit',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_callId', internalType: 'bytes32', type: 'bytes32' },
+ {
+ name: '_actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ { name: '_allowFailureMap', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'execute',
+ outputs: [
+ { name: '', internalType: 'bytes[]', type: 'bytes[]' },
+ { name: '', internalType: 'uint256', type: 'uint256' },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'getTrustedForwarder',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'hasPermission',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_hash', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_signature', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'isValidSignature',
+ outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_interfaceId', internalType: 'bytes4', type: 'bytes4' },
+ { name: '_callbackSelector', internalType: 'bytes4', type: 'bytes4' },
+ { name: '_magicNumber', internalType: 'bytes4', type: 'bytes4' },
+ ],
+ name: 'registerStandardCallback',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '_metadata', internalType: 'bytes', type: 'bytes' }],
+ name: 'setMetadata',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '', internalType: 'address', type: 'address' }],
+ name: 'setSignatureValidator',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '_trustedForwarder', internalType: 'address', type: 'address' }],
+ name: 'setTrustedForwarder',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IDNSRecordResolver
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const idnsRecordResolverABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'name', internalType: 'bytes', type: 'bytes', indexed: false },
+ { name: 'resource', internalType: 'uint16', type: 'uint16', indexed: false },
+ { name: 'record', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'DNSRecordChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'name', internalType: 'bytes', type: 'bytes', indexed: false },
+ { name: 'resource', internalType: 'uint16', type: 'uint16', indexed: false },
+ ],
+ name: 'DNSRecordDeleted',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'name', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'resource', internalType: 'uint16', type: 'uint16' },
+ ],
+ name: 'dnsRecord',
+ outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IDNSZoneResolver
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const idnsZoneResolverABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'lastzonehash', internalType: 'bytes', type: 'bytes', indexed: false },
+ { name: 'zonehash', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'DNSZonehashChanged',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'zonehash',
+ outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IEIP4824
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ieip4824ABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'daoURI',
+ outputs: [{ name: '_daoURI', internalType: 'string', type: 'string' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC1155ReceiverUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc1155ReceiverUpgradeableABI = [
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'operator', internalType: 'address', type: 'address' },
+ { name: 'from', internalType: 'address', type: 'address' },
+ { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' },
+ { name: 'values', internalType: 'uint256[]', type: 'uint256[]' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'onERC1155BatchReceived',
+ outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'operator', internalType: 'address', type: 'address' },
+ { name: 'from', internalType: 'address', type: 'address' },
+ { name: 'id', internalType: 'uint256', type: 'uint256' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'onERC1155Received',
+ outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC1155Upgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc1155UpgradeableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'account', internalType: 'address', type: 'address', indexed: true },
+ { name: 'operator', internalType: 'address', type: 'address', indexed: true },
+ { name: 'approved', internalType: 'bool', type: 'bool', indexed: false },
+ ],
+ name: 'ApprovalForAll',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'operator', internalType: 'address', type: 'address', indexed: true },
+ { name: 'from', internalType: 'address', type: 'address', indexed: true },
+ { name: 'to', internalType: 'address', type: 'address', indexed: true },
+ { name: 'ids', internalType: 'uint256[]', type: 'uint256[]', indexed: false },
+ { name: 'values', internalType: 'uint256[]', type: 'uint256[]', indexed: false },
+ ],
+ name: 'TransferBatch',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'operator', internalType: 'address', type: 'address', indexed: true },
+ { name: 'from', internalType: 'address', type: 'address', indexed: true },
+ { name: 'to', internalType: 'address', type: 'address', indexed: true },
+ { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'TransferSingle',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'value', internalType: 'string', type: 'string', indexed: false },
+ { name: 'id', internalType: 'uint256', type: 'uint256', indexed: true },
+ ],
+ name: 'URI',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'account', internalType: 'address', type: 'address' },
+ { name: 'id', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'balanceOf',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'accounts', internalType: 'address[]', type: 'address[]' },
+ { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' },
+ ],
+ name: 'balanceOfBatch',
+ outputs: [{ name: '', internalType: 'uint256[]', type: 'uint256[]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'account', internalType: 'address', type: 'address' },
+ { name: 'operator', internalType: 'address', type: 'address' },
+ ],
+ name: 'isApprovedForAll',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'from', internalType: 'address', type: 'address' },
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' },
+ { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'safeBatchTransferFrom',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'from', internalType: 'address', type: 'address' },
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'id', internalType: 'uint256', type: 'uint256' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'safeTransferFrom',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'operator', internalType: 'address', type: 'address' },
+ { name: 'approved', internalType: 'bool', type: 'bool' },
+ ],
+ name: 'setApprovalForAll',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC1271
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc1271ABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'hash', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'signature', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'isValidSignature',
+ outputs: [{ name: 'magicValue', internalType: 'bytes4', type: 'bytes4' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC165
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc165ABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC165Upgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc165UpgradeableABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC1967
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc1967ABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC1967Upgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc1967UpgradeableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC20
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc20ABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address', indexed: true },
+ { name: 'spender', internalType: 'address', type: 'address', indexed: true },
+ { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'Approval',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'from', internalType: 'address', type: 'address', indexed: true },
+ { name: 'to', internalType: 'address', type: 'address', indexed: true },
+ { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'Transfer',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address' },
+ { name: 'spender', internalType: 'address', type: 'address' },
+ ],
+ name: 'allowance',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'approve',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'account', internalType: 'address', type: 'address' }],
+ name: 'balanceOf',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'totalSupply',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'transfer',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'from', internalType: 'address', type: 'address' },
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'transferFrom',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC20Metadata
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc20MetadataABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address', indexed: true },
+ { name: 'spender', internalType: 'address', type: 'address', indexed: true },
+ { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'Approval',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'from', internalType: 'address', type: 'address', indexed: true },
+ { name: 'to', internalType: 'address', type: 'address', indexed: true },
+ { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'Transfer',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address' },
+ { name: 'spender', internalType: 'address', type: 'address' },
+ ],
+ name: 'allowance',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'approve',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'account', internalType: 'address', type: 'address' }],
+ name: 'balanceOf',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'decimals',
+ outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'name',
+ outputs: [{ name: '', internalType: 'string', type: 'string' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'symbol',
+ outputs: [{ name: '', internalType: 'string', type: 'string' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'totalSupply',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'transfer',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'from', internalType: 'address', type: 'address' },
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'transferFrom',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC20Permit
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc20PermitABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'DOMAIN_SEPARATOR',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],
+ name: 'nonces',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address' },
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'deadline', internalType: 'uint256', type: 'uint256' },
+ { name: 'v', internalType: 'uint8', type: 'uint8' },
+ { name: 'r', internalType: 'bytes32', type: 'bytes32' },
+ { name: 's', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'permit',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC20PermitUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc20PermitUpgradeableABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'DOMAIN_SEPARATOR',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],
+ name: 'nonces',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address' },
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'deadline', internalType: 'uint256', type: 'uint256' },
+ { name: 'v', internalType: 'uint8', type: 'uint8' },
+ { name: 'r', internalType: 'bytes32', type: 'bytes32' },
+ { name: 's', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'permit',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC20Upgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc20UpgradeableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address', indexed: true },
+ { name: 'spender', internalType: 'address', type: 'address', indexed: true },
+ { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'Approval',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'from', internalType: 'address', type: 'address', indexed: true },
+ { name: 'to', internalType: 'address', type: 'address', indexed: true },
+ { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'Transfer',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address' },
+ { name: 'spender', internalType: 'address', type: 'address' },
+ ],
+ name: 'allowance',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'approve',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'account', internalType: 'address', type: 'address' }],
+ name: 'balanceOf',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'totalSupply',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'transfer',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'from', internalType: 'address', type: 'address' },
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'transferFrom',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC721ReceiverUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc721ReceiverUpgradeableABI = [
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'operator', internalType: 'address', type: 'address' },
+ { name: 'from', internalType: 'address', type: 'address' },
+ { name: 'tokenId', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'onERC721Received',
+ outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IExtendedResolver
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iExtendedResolverABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'name', internalType: 'bytes', type: 'bytes' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'resolve',
+ outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IInterfaceResolver
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iInterfaceResolverABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'interfaceID', internalType: 'bytes4', type: 'bytes4', indexed: true },
+ { name: 'implementer', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'InterfaceChanged',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'interfaceID', internalType: 'bytes4', type: 'bytes4' },
+ ],
+ name: 'interfaceImplementer',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IMajorityVoting
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iMajorityVotingABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'proposalId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'voter', internalType: 'address', type: 'address', indexed: true },
+ { name: 'voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8', indexed: false },
+ { name: 'votingPower', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'VoteCast',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'canExecute',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_proposalId', internalType: 'uint256', type: 'uint256' },
+ { name: '_account', internalType: 'address', type: 'address' },
+ { name: '_voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' },
+ ],
+ name: 'canVote',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'execute',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_proposalId', internalType: 'uint256', type: 'uint256' },
+ { name: '_account', internalType: 'address', type: 'address' },
+ ],
+ name: 'getVoteOption',
+ outputs: [{ name: '', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'isMinParticipationReached',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'isSupportThresholdReached',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'isSupportThresholdReachedEarly',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'minParticipation',
+ outputs: [{ name: '', internalType: 'uint32', type: 'uint32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'supportThreshold',
+ outputs: [{ name: '', internalType: 'uint32', type: 'uint32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_proposalId', internalType: 'uint256', type: 'uint256' },
+ { name: '_voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' },
+ { name: '_tryEarlyExecution', internalType: 'bool', type: 'bool' },
+ ],
+ name: 'vote',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IMembership
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iMembershipABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'members', internalType: 'address[]', type: 'address[]', indexed: false }],
+ name: 'MembersAdded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'members', internalType: 'address[]', type: 'address[]', indexed: false }],
+ name: 'MembersRemoved',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'definingContract', internalType: 'address', type: 'address', indexed: true }],
+ name: 'MembershipContractAnnounced',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_account', internalType: 'address', type: 'address' }],
+ name: 'isMember',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IMulticall3
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iMulticall3ABI = [
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ {
+ name: 'calls',
+ internalType: 'struct IMulticall3.Call[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'target', internalType: 'address', type: 'address' },
+ { name: 'callData', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'aggregate',
+ outputs: [
+ { name: 'blockNumber', internalType: 'uint256', type: 'uint256' },
+ { name: 'returnData', internalType: 'bytes[]', type: 'bytes[]' },
+ ],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ {
+ name: 'calls',
+ internalType: 'struct IMulticall3.Call3[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'target', internalType: 'address', type: 'address' },
+ { name: 'allowFailure', internalType: 'bool', type: 'bool' },
+ { name: 'callData', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'aggregate3',
+ outputs: [
+ {
+ name: 'returnData',
+ internalType: 'struct IMulticall3.Result[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'success', internalType: 'bool', type: 'bool' },
+ { name: 'returnData', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ {
+ name: 'calls',
+ internalType: 'struct IMulticall3.Call3Value[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'target', internalType: 'address', type: 'address' },
+ { name: 'allowFailure', internalType: 'bool', type: 'bool' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'callData', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'aggregate3Value',
+ outputs: [
+ {
+ name: 'returnData',
+ internalType: 'struct IMulticall3.Result[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'success', internalType: 'bool', type: 'bool' },
+ { name: 'returnData', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ {
+ name: 'calls',
+ internalType: 'struct IMulticall3.Call[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'target', internalType: 'address', type: 'address' },
+ { name: 'callData', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'blockAndAggregate',
+ outputs: [
+ { name: 'blockNumber', internalType: 'uint256', type: 'uint256' },
+ { name: 'blockHash', internalType: 'bytes32', type: 'bytes32' },
+ {
+ name: 'returnData',
+ internalType: 'struct IMulticall3.Result[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'success', internalType: 'bool', type: 'bool' },
+ { name: 'returnData', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'getBasefee',
+ outputs: [{ name: 'basefee', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'blockNumber', internalType: 'uint256', type: 'uint256' }],
+ name: 'getBlockHash',
+ outputs: [{ name: 'blockHash', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'getBlockNumber',
+ outputs: [{ name: 'blockNumber', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'getChainId',
+ outputs: [{ name: 'chainid', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'getCurrentBlockCoinbase',
+ outputs: [{ name: 'coinbase', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'getCurrentBlockDifficulty',
+ outputs: [{ name: 'difficulty', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'getCurrentBlockGasLimit',
+ outputs: [{ name: 'gaslimit', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'getCurrentBlockTimestamp',
+ outputs: [{ name: 'timestamp', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'addr', internalType: 'address', type: 'address' }],
+ name: 'getEthBalance',
+ outputs: [{ name: 'balance', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'getLastBlockHash',
+ outputs: [{ name: 'blockHash', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'requireSuccess', internalType: 'bool', type: 'bool' },
+ {
+ name: 'calls',
+ internalType: 'struct IMulticall3.Call[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'target', internalType: 'address', type: 'address' },
+ { name: 'callData', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'tryAggregate',
+ outputs: [
+ {
+ name: 'returnData',
+ internalType: 'struct IMulticall3.Result[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'success', internalType: 'bool', type: 'bool' },
+ { name: 'returnData', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'requireSuccess', internalType: 'bool', type: 'bool' },
+ {
+ name: 'calls',
+ internalType: 'struct IMulticall3.Call[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'target', internalType: 'address', type: 'address' },
+ { name: 'callData', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'tryBlockAndAggregate',
+ outputs: [
+ { name: 'blockNumber', internalType: 'uint256', type: 'uint256' },
+ { name: 'blockHash', internalType: 'bytes32', type: 'bytes32' },
+ {
+ name: 'returnData',
+ internalType: 'struct IMulticall3.Result[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'success', internalType: 'bool', type: 'bool' },
+ { name: 'returnData', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// INameResolver
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iNameResolverABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'name', internalType: 'string', type: 'string', indexed: false },
+ ],
+ name: 'NameChanged',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'name',
+ outputs: [{ name: '', internalType: 'string', type: 'string' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IPermissionCondition
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iPermissionConditionABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'isGranted',
+ outputs: [{ name: 'isPermitted', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IPlugin
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iPluginABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'pluginType',
+ outputs: [{ name: '', internalType: 'enum IPlugin.PluginType', type: 'uint8' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IPluginRepo
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iPluginRepoABI = [
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_release', internalType: 'uint8', type: 'uint8' },
+ { name: '_pluginSetupAddress', internalType: 'address', type: 'address' },
+ { name: '_buildMetadata', internalType: 'bytes', type: 'bytes' },
+ { name: '_releaseMetadata', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'createVersion',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_release', internalType: 'uint8', type: 'uint8' },
+ { name: '_releaseMetadata', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'updateReleaseMetadata',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IPluginSetup
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iPluginSetupABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'implementation',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ { name: '_data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'prepareInstallation',
+ outputs: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ {
+ name: 'preparedSetupData',
+ internalType: 'struct IPluginSetup.PreparedSetupData',
+ type: 'tuple',
+ components: [
+ { name: 'helpers', internalType: 'address[]', type: 'address[]' },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ {
+ name: '_payload',
+ internalType: 'struct IPluginSetup.SetupPayload',
+ type: 'tuple',
+ components: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ { name: 'currentHelpers', internalType: 'address[]', type: 'address[]' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'prepareUninstallation',
+ outputs: [
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ { name: '_currentBuild', internalType: 'uint16', type: 'uint16' },
+ {
+ name: '_payload',
+ internalType: 'struct IPluginSetup.SetupPayload',
+ type: 'tuple',
+ components: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ { name: 'currentHelpers', internalType: 'address[]', type: 'address[]' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'prepareUpdate',
+ outputs: [
+ { name: 'initData', internalType: 'bytes', type: 'bytes' },
+ {
+ name: 'preparedSetupData',
+ internalType: 'struct IPluginSetup.PreparedSetupData',
+ type: 'tuple',
+ components: [
+ { name: 'helpers', internalType: 'address[]', type: 'address[]' },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ ],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IProposal
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iProposalABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'proposalId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'creator', internalType: 'address', type: 'address', indexed: true },
+ { name: 'startDate', internalType: 'uint64', type: 'uint64', indexed: false },
+ { name: 'endDate', internalType: 'uint64', type: 'uint64', indexed: false },
+ { name: 'metadata', internalType: 'bytes', type: 'bytes', indexed: false },
+ {
+ name: 'actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ indexed: false,
+ },
+ { name: 'allowFailureMap', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'ProposalCreated',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'proposalId', internalType: 'uint256', type: 'uint256', indexed: true }],
+ name: 'ProposalExecuted',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proposalCount',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IProtocolVersion
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iProtocolVersionABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '_version', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IPubkeyResolver
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iPubkeyResolverABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'x', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ { name: 'y', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ ],
+ name: 'PubkeyChanged',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'pubkey',
+ outputs: [
+ { name: 'x', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'y', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ITextResolver
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iTextResolverABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'indexedKey', internalType: 'string', type: 'string', indexed: true },
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'value', internalType: 'string', type: 'string', indexed: false },
+ ],
+ name: 'TextChanged',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'key', internalType: 'string', type: 'string' },
+ ],
+ name: 'text',
+ outputs: [{ name: '', internalType: 'string', type: 'string' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IVotesUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const iVotesUpgradeableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'delegator', internalType: 'address', type: 'address', indexed: true },
+ { name: 'fromDelegate', internalType: 'address', type: 'address', indexed: true },
+ { name: 'toDelegate', internalType: 'address', type: 'address', indexed: true },
+ ],
+ name: 'DelegateChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'delegate', internalType: 'address', type: 'address', indexed: true },
+ { name: 'previousBalance', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'newBalance', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'DelegateVotesChanged',
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'delegatee', internalType: 'address', type: 'address' }],
+ name: 'delegate',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'delegatee', internalType: 'address', type: 'address' },
+ { name: 'nonce', internalType: 'uint256', type: 'uint256' },
+ { name: 'expiry', internalType: 'uint256', type: 'uint256' },
+ { name: 'v', internalType: 'uint8', type: 'uint8' },
+ { name: 'r', internalType: 'bytes32', type: 'bytes32' },
+ { name: 's', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'delegateBySig',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'account', internalType: 'address', type: 'address' }],
+ name: 'delegates',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'timepoint', internalType: 'uint256', type: 'uint256' }],
+ name: 'getPastTotalSupply',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'account', internalType: 'address', type: 'address' },
+ { name: 'timepoint', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'getPastVotes',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'account', internalType: 'address', type: 'address' }],
+ name: 'getVotes',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Initializable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const initializableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// InterfaceBasedRegistry
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const interfaceBasedRegistryABI = [
+ {
+ type: 'error',
+ inputs: [{ name: 'registrant', internalType: 'address', type: 'address' }],
+ name: 'ContractAlreadyRegistered',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'registrant', internalType: 'address', type: 'address' }],
+ name: 'ContractERC165SupportInvalid',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'registrant', internalType: 'address', type: 'address' }],
+ name: 'ContractInterfaceInvalid',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'dao', internalType: 'address', type: 'address' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'DaoUnauthorized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'UPGRADE_REGISTRY_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'dao',
+ outputs: [{ name: '', internalType: 'contract IDAO', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '', internalType: 'address', type: 'address' }],
+ name: 'entries',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetInterfaceId',
+ outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newImplementation', internalType: 'address', type: 'address' }],
+ name: 'upgradeTo',
+ outputs: [],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'newImplementation', internalType: 'address', type: 'address' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'upgradeToAndCall',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Ownable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ownableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },
+ { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },
+ ],
+ name: 'OwnershipTransferred',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'owner',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ { stateMutability: 'nonpayable', type: 'function', inputs: [], name: 'renounceOwnership', outputs: [] },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],
+ name: 'transferOwnership',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// PermissionCondition
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const permissionConditionABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'isGranted',
+ outputs: [{ name: 'isPermitted', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// MajorityVotingBase
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const majorityVotingBaseABI = [
+ {
+ type: 'error',
+ inputs: [
+ { name: 'dao', internalType: 'address', type: 'address' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'DaoUnauthorized',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'limit', internalType: 'uint64', type: 'uint64' },
+ { name: 'actual', internalType: 'uint64', type: 'uint64' },
+ ],
+ name: 'DateOutOfBounds',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'limit', internalType: 'uint64', type: 'uint64' },
+ { name: 'actual', internalType: 'uint64', type: 'uint64' },
+ ],
+ name: 'MinDurationOutOfBounds',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'sender', internalType: 'address', type: 'address' }],
+ name: 'ProposalCreationForbidden',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'ProposalExecutionForbidden',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'limit', internalType: 'uint256', type: 'uint256' },
+ { name: 'actual', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'RatioOutOfBounds',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'proposalId', internalType: 'uint256', type: 'uint256' },
+ { name: 'account', internalType: 'address', type: 'address' },
+ { name: 'voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' },
+ ],
+ name: 'VoteCastForbidden',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'proposalId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'creator', internalType: 'address', type: 'address', indexed: true },
+ { name: 'startDate', internalType: 'uint64', type: 'uint64', indexed: false },
+ { name: 'endDate', internalType: 'uint64', type: 'uint64', indexed: false },
+ { name: 'metadata', internalType: 'bytes', type: 'bytes', indexed: false },
+ {
+ name: 'actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ indexed: false,
+ },
+ { name: 'allowFailureMap', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'ProposalCreated',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'proposalId', internalType: 'uint256', type: 'uint256', indexed: true }],
+ name: 'ProposalExecuted',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'proposalId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'voter', internalType: 'address', type: 'address', indexed: true },
+ { name: 'voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8', indexed: false },
+ { name: 'votingPower', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'VoteCast',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'votingMode', internalType: 'enum MajorityVotingBase.VotingMode', type: 'uint8', indexed: false },
+ { name: 'supportThreshold', internalType: 'uint32', type: 'uint32', indexed: false },
+ { name: 'minParticipation', internalType: 'uint32', type: 'uint32', indexed: false },
+ { name: 'minDuration', internalType: 'uint64', type: 'uint64', indexed: false },
+ { name: 'minProposerVotingPower', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'VotingSettingsUpdated',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'UPDATE_VOTING_SETTINGS_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'UPGRADE_PLUGIN_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'canExecute',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_proposalId', internalType: 'uint256', type: 'uint256' },
+ { name: '_voter', internalType: 'address', type: 'address' },
+ { name: '_voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' },
+ ],
+ name: 'canVote',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_metadata', internalType: 'bytes', type: 'bytes' },
+ {
+ name: '_actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ { name: '_allowFailureMap', internalType: 'uint256', type: 'uint256' },
+ { name: '_startDate', internalType: 'uint64', type: 'uint64' },
+ { name: '_endDate', internalType: 'uint64', type: 'uint64' },
+ { name: '_voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' },
+ { name: '_tryEarlyExecution', internalType: 'bool', type: 'bool' },
+ ],
+ name: 'createProposal',
+ outputs: [{ name: 'proposalId', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'dao',
+ outputs: [{ name: '', internalType: 'contract IDAO', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'execute',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'getProposal',
+ outputs: [
+ { name: 'open', internalType: 'bool', type: 'bool' },
+ { name: 'executed', internalType: 'bool', type: 'bool' },
+ {
+ name: 'parameters',
+ internalType: 'struct MajorityVotingBase.ProposalParameters',
+ type: 'tuple',
+ components: [
+ { name: 'votingMode', internalType: 'enum MajorityVotingBase.VotingMode', type: 'uint8' },
+ { name: 'supportThreshold', internalType: 'uint32', type: 'uint32' },
+ { name: 'startDate', internalType: 'uint64', type: 'uint64' },
+ { name: 'endDate', internalType: 'uint64', type: 'uint64' },
+ { name: 'snapshotBlock', internalType: 'uint64', type: 'uint64' },
+ { name: 'minVotingPower', internalType: 'uint256', type: 'uint256' },
+ ],
+ },
+ {
+ name: 'tally',
+ internalType: 'struct MajorityVotingBase.Tally',
+ type: 'tuple',
+ components: [
+ { name: 'abstain', internalType: 'uint256', type: 'uint256' },
+ { name: 'yes', internalType: 'uint256', type: 'uint256' },
+ { name: 'no', internalType: 'uint256', type: 'uint256' },
+ ],
+ },
+ {
+ name: 'actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ { name: 'allowFailureMap', internalType: 'uint256', type: 'uint256' },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_proposalId', internalType: 'uint256', type: 'uint256' },
+ { name: '_voter', internalType: 'address', type: 'address' },
+ ],
+ name: 'getVoteOption',
+ outputs: [{ name: '', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'implementation',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'isMinParticipationReached',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'isSupportThresholdReached',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'isSupportThresholdReachedEarly',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'minDuration',
+ outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'minParticipation',
+ outputs: [{ name: '', internalType: 'uint32', type: 'uint32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'minProposerVotingPower',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'pluginType',
+ outputs: [{ name: '', internalType: 'enum IPlugin.PluginType', type: 'uint8' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proposalCount',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'supportThreshold',
+ outputs: [{ name: '', internalType: 'uint32', type: 'uint32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_blockNumber', internalType: 'uint256', type: 'uint256' }],
+ name: 'totalVotingPower',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ {
+ name: '_votingSettings',
+ internalType: 'struct MajorityVotingBase.VotingSettings',
+ type: 'tuple',
+ components: [
+ { name: 'votingMode', internalType: 'enum MajorityVotingBase.VotingMode', type: 'uint8' },
+ { name: 'supportThreshold', internalType: 'uint32', type: 'uint32' },
+ { name: 'minParticipation', internalType: 'uint32', type: 'uint32' },
+ { name: 'minDuration', internalType: 'uint64', type: 'uint64' },
+ { name: 'minProposerVotingPower', internalType: 'uint256', type: 'uint256' },
+ ],
+ },
+ ],
+ name: 'updateVotingSettings',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newImplementation', internalType: 'address', type: 'address' }],
+ name: 'upgradeTo',
+ outputs: [],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'newImplementation', internalType: 'address', type: 'address' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'upgradeToAndCall',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_proposalId', internalType: 'uint256', type: 'uint256' },
+ { name: '_voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' },
+ { name: '_tryEarlyExecution', internalType: 'bool', type: 'bool' },
+ ],
+ name: 'vote',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'votingMode',
+ outputs: [{ name: '', internalType: 'enum MajorityVotingBase.VotingMode', type: 'uint8' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// PermissionLib
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const permissionLibABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'NO_CONDITION',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// PermissionManager
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const permissionManagerABI = [
+ { type: 'error', inputs: [], name: 'AnyAddressDisallowedForWhoAndWhere' },
+ {
+ type: 'error',
+ inputs: [{ name: 'condition', internalType: 'contract IPermissionCondition', type: 'address' }],
+ name: 'ConditionInterfacNotSupported',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'condition', internalType: 'contract IPermissionCondition', type: 'address' }],
+ name: 'ConditionNotAContract',
+ },
+ { type: 'error', inputs: [], name: 'GrantWithConditionNotSupported' },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'currentCondition', internalType: 'address', type: 'address' },
+ { name: 'newCondition', internalType: 'address', type: 'address' },
+ ],
+ name: 'PermissionAlreadyGrantedForDifferentCondition',
+ },
+ { type: 'error', inputs: [], name: 'PermissionsForAnyAddressDisallowed' },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'Unauthorized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'here', internalType: 'address', type: 'address', indexed: true },
+ { name: 'where', internalType: 'address', type: 'address', indexed: false },
+ { name: 'who', internalType: 'address', type: 'address', indexed: true },
+ { name: 'condition', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'Granted',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'here', internalType: 'address', type: 'address', indexed: true },
+ { name: 'where', internalType: 'address', type: 'address', indexed: false },
+ { name: 'who', internalType: 'address', type: 'address', indexed: true },
+ ],
+ name: 'Revoked',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'ROOT_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ {
+ name: '_items',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ name: 'applyMultiTargetPermissions',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ {
+ name: 'items',
+ internalType: 'struct PermissionLib.SingleTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ name: 'applySingleTargetPermissions',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'grant',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_condition', internalType: 'contract IPermissionCondition', type: 'address' },
+ ],
+ name: 'grantWithCondition',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'isGranted',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'revoke',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// PluginRepo
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const pluginRepoABI = [
+ { stateMutability: 'nonpayable', type: 'constructor', inputs: [] },
+ { type: 'error', inputs: [], name: 'AnyAddressDisallowedForWhoAndWhere' },
+ {
+ type: 'error',
+ inputs: [{ name: 'condition', internalType: 'contract IPermissionCondition', type: 'address' }],
+ name: 'ConditionInterfacNotSupported',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'condition', internalType: 'contract IPermissionCondition', type: 'address' }],
+ name: 'ConditionNotAContract',
+ },
+ { type: 'error', inputs: [], name: 'EmptyReleaseMetadata' },
+ { type: 'error', inputs: [], name: 'GrantWithConditionNotSupported' },
+ { type: 'error', inputs: [], name: 'InvalidPluginSetupInterface' },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'latestRelease', internalType: 'uint8', type: 'uint8' },
+ { name: 'newRelease', internalType: 'uint8', type: 'uint8' },
+ ],
+ name: 'InvalidReleaseIncrement',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'currentCondition', internalType: 'address', type: 'address' },
+ { name: 'newCondition', internalType: 'address', type: 'address' },
+ ],
+ name: 'PermissionAlreadyGrantedForDifferentCondition',
+ },
+ { type: 'error', inputs: [], name: 'PermissionsForAnyAddressDisallowed' },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ { name: 'pluginSetup', internalType: 'address', type: 'address' },
+ ],
+ name: 'PluginSetupAlreadyInPreviousRelease',
+ },
+ { type: 'error', inputs: [], name: 'ReleaseDoesNotExist' },
+ { type: 'error', inputs: [], name: 'ReleaseZeroNotAllowed' },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'Unauthorized',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'versionHash', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'VersionHashDoesNotExist',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'here', internalType: 'address', type: 'address', indexed: true },
+ { name: 'where', internalType: 'address', type: 'address', indexed: false },
+ { name: 'who', internalType: 'address', type: 'address', indexed: true },
+ { name: 'condition', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'Granted',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'release', internalType: 'uint8', type: 'uint8', indexed: false },
+ { name: 'releaseMetadata', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'ReleaseMetadataUpdated',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'here', internalType: 'address', type: 'address', indexed: true },
+ { name: 'where', internalType: 'address', type: 'address', indexed: false },
+ { name: 'who', internalType: 'address', type: 'address', indexed: true },
+ ],
+ name: 'Revoked',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'release', internalType: 'uint8', type: 'uint8', indexed: false },
+ { name: 'build', internalType: 'uint16', type: 'uint16', indexed: false },
+ { name: 'pluginSetup', internalType: 'address', type: 'address', indexed: true },
+ { name: 'buildMetadata', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'VersionCreated',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'MAINTAINER_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'ROOT_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'UPGRADE_REPO_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ {
+ name: '_items',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ name: 'applyMultiTargetPermissions',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ {
+ name: 'items',
+ internalType: 'struct PermissionLib.SingleTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ name: 'applySingleTargetPermissions',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_release', internalType: 'uint8', type: 'uint8' }],
+ name: 'buildCount',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_release', internalType: 'uint8', type: 'uint8' },
+ { name: '_pluginSetup', internalType: 'address', type: 'address' },
+ { name: '_buildMetadata', internalType: 'bytes', type: 'bytes' },
+ { name: '_releaseMetadata', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'createVersion',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_pluginSetup', internalType: 'address', type: 'address' }],
+ name: 'getLatestVersion',
+ outputs: [
+ {
+ name: '',
+ internalType: 'struct PluginRepo.Version',
+ type: 'tuple',
+ components: [
+ {
+ name: 'tag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ { name: 'pluginSetup', internalType: 'address', type: 'address' },
+ { name: 'buildMetadata', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_release', internalType: 'uint8', type: 'uint8' }],
+ name: 'getLatestVersion',
+ outputs: [
+ {
+ name: '',
+ internalType: 'struct PluginRepo.Version',
+ type: 'tuple',
+ components: [
+ {
+ name: 'tag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ { name: 'pluginSetup', internalType: 'address', type: 'address' },
+ { name: 'buildMetadata', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_tagHash', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'getVersion',
+ outputs: [
+ {
+ name: '',
+ internalType: 'struct PluginRepo.Version',
+ type: 'tuple',
+ components: [
+ {
+ name: 'tag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ { name: 'pluginSetup', internalType: 'address', type: 'address' },
+ { name: 'buildMetadata', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ {
+ name: '_tag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ ],
+ name: 'getVersion',
+ outputs: [
+ {
+ name: '',
+ internalType: 'struct PluginRepo.Version',
+ type: 'tuple',
+ components: [
+ {
+ name: 'tag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ { name: 'pluginSetup', internalType: 'address', type: 'address' },
+ { name: 'buildMetadata', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'grant',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_condition', internalType: 'contract IPermissionCondition', type: 'address' },
+ ],
+ name: 'grantWithCondition',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'initialOwner', internalType: 'address', type: 'address' }],
+ name: 'initialize',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'isGranted',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'latestRelease',
+ outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_where', internalType: 'address', type: 'address' },
+ { name: '_who', internalType: 'address', type: 'address' },
+ { name: '_permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'revoke',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_release', internalType: 'uint8', type: 'uint8' },
+ { name: '_releaseMetadata', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'updateReleaseMetadata',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newImplementation', internalType: 'address', type: 'address' }],
+ name: 'upgradeTo',
+ outputs: [],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'newImplementation', internalType: 'address', type: 'address' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'upgradeToAndCall',
+ outputs: [],
+ },
+] as const
+
+export const pluginRepoAddress = '0x9b72Af17B8aE55AE2F3C06E46A44D9bEaFb10801' as const
+
+export const pluginRepoConfig = { address: pluginRepoAddress, abi: pluginRepoABI } as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// PluginRepoRegistry
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const pluginRepoRegistryABI = [
+ { stateMutability: 'nonpayable', type: 'constructor', inputs: [] },
+ {
+ type: 'error',
+ inputs: [{ name: 'registrant', internalType: 'address', type: 'address' }],
+ name: 'ContractAlreadyRegistered',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'registrant', internalType: 'address', type: 'address' }],
+ name: 'ContractERC165SupportInvalid',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'registrant', internalType: 'address', type: 'address' }],
+ name: 'ContractInterfaceInvalid',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'dao', internalType: 'address', type: 'address' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'DaoUnauthorized',
+ },
+ { type: 'error', inputs: [], name: 'EmptyPluginRepoSubdomain' },
+ {
+ type: 'error',
+ inputs: [{ name: 'subdomain', internalType: 'string', type: 'string' }],
+ name: 'InvalidPluginSubdomain',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'subdomain', internalType: 'string', type: 'string', indexed: false },
+ { name: 'pluginRepo', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'PluginRepoRegistered',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'REGISTER_PLUGIN_REPO_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'UPGRADE_REGISTRY_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'dao',
+ outputs: [{ name: '', internalType: 'contract IDAO', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '', internalType: 'address', type: 'address' }],
+ name: 'entries',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'contract IDAO', type: 'address' },
+ { name: '_subdomainRegistrar', internalType: 'contract ENSSubdomainRegistrar', type: 'address' },
+ ],
+ name: 'initialize',
+ outputs: [],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'subdomain', internalType: 'string', type: 'string' },
+ { name: 'pluginRepo', internalType: 'address', type: 'address' },
+ ],
+ name: 'registerPluginRepo',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'subdomainRegistrar',
+ outputs: [{ name: '', internalType: 'contract ENSSubdomainRegistrar', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetInterfaceId',
+ outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newImplementation', internalType: 'address', type: 'address' }],
+ name: 'upgradeTo',
+ outputs: [],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'newImplementation', internalType: 'address', type: 'address' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'upgradeToAndCall',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// PluginSetup
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const pluginSetupABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'implementation',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ { name: '_data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'prepareInstallation',
+ outputs: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ {
+ name: 'preparedSetupData',
+ internalType: 'struct IPluginSetup.PreparedSetupData',
+ type: 'tuple',
+ components: [
+ { name: 'helpers', internalType: 'address[]', type: 'address[]' },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ {
+ name: '_payload',
+ internalType: 'struct IPluginSetup.SetupPayload',
+ type: 'tuple',
+ components: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ { name: 'currentHelpers', internalType: 'address[]', type: 'address[]' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'prepareUninstallation',
+ outputs: [
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ { name: '_currentBuild', internalType: 'uint16', type: 'uint16' },
+ {
+ name: '_payload',
+ internalType: 'struct IPluginSetup.SetupPayload',
+ type: 'tuple',
+ components: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ { name: 'currentHelpers', internalType: 'address[]', type: 'address[]' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'prepareUpdate',
+ outputs: [
+ { name: 'initData', internalType: 'bytes', type: 'bytes' },
+ {
+ name: 'preparedSetupData',
+ internalType: 'struct IPluginSetup.PreparedSetupData',
+ type: 'tuple',
+ components: [
+ { name: 'helpers', internalType: 'address[]', type: 'address[]' },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// PluginSetupProcessor
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const pluginSetupProcessorABI = [
+ {
+ stateMutability: 'nonpayable',
+ type: 'constructor',
+ inputs: [{ name: '_repoRegistry', internalType: 'contract PluginRepoRegistry', type: 'address' }],
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'plugin', internalType: 'address', type: 'address' }],
+ name: 'IPluginNotSupported',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'currentAppliedSetupId', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'appliedSetupId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'InvalidAppliedSetupId',
+ },
+ {
+ type: 'error',
+ inputs: [
+ {
+ name: 'currentVersionTag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ {
+ name: 'newVersionTag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ ],
+ name: 'InvalidUpdateVersion',
+ },
+ { type: 'error', inputs: [], name: 'PluginAlreadyInstalled' },
+ {
+ type: 'error',
+ inputs: [{ name: 'plugin', internalType: 'address', type: 'address' }],
+ name: 'PluginNonupgradeable',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'proxy', internalType: 'address', type: 'address' },
+ { name: 'implementation', internalType: 'address', type: 'address' },
+ { name: 'initData', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'PluginProxyUpgradeFailed',
+ },
+ { type: 'error', inputs: [], name: 'PluginRepoNonexistent' },
+ {
+ type: 'error',
+ inputs: [{ name: 'preparedSetupId', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'SetupAlreadyPrepared',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'dao', internalType: 'address', type: 'address' },
+ { name: 'caller', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'SetupApplicationUnauthorized',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'preparedSetupId', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'SetupNotApplicable',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'dao', internalType: 'address', type: 'address', indexed: true },
+ { name: 'plugin', internalType: 'address', type: 'address', indexed: true },
+ { name: 'preparedSetupId', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ { name: 'appliedSetupId', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ ],
+ name: 'InstallationApplied',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'sender', internalType: 'address', type: 'address', indexed: true },
+ { name: 'dao', internalType: 'address', type: 'address', indexed: true },
+ { name: 'preparedSetupId', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ { name: 'pluginSetupRepo', internalType: 'contract PluginRepo', type: 'address', indexed: true },
+ {
+ name: 'versionTag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ indexed: false,
+ },
+ { name: 'data', internalType: 'bytes', type: 'bytes', indexed: false },
+ { name: 'plugin', internalType: 'address', type: 'address', indexed: false },
+ {
+ name: 'preparedSetupData',
+ internalType: 'struct IPluginSetup.PreparedSetupData',
+ type: 'tuple',
+ components: [
+ { name: 'helpers', internalType: 'address[]', type: 'address[]' },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ indexed: false,
+ },
+ ],
+ name: 'InstallationPrepared',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'dao', internalType: 'address', type: 'address', indexed: true },
+ { name: 'plugin', internalType: 'address', type: 'address', indexed: true },
+ { name: 'preparedSetupId', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ ],
+ name: 'UninstallationApplied',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'sender', internalType: 'address', type: 'address', indexed: true },
+ { name: 'dao', internalType: 'address', type: 'address', indexed: true },
+ { name: 'preparedSetupId', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ { name: 'pluginSetupRepo', internalType: 'contract PluginRepo', type: 'address', indexed: true },
+ {
+ name: 'versionTag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ indexed: false,
+ },
+ {
+ name: 'setupPayload',
+ internalType: 'struct IPluginSetup.SetupPayload',
+ type: 'tuple',
+ components: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ { name: 'currentHelpers', internalType: 'address[]', type: 'address[]' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ indexed: false,
+ },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ indexed: false,
+ },
+ ],
+ name: 'UninstallationPrepared',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'dao', internalType: 'address', type: 'address', indexed: true },
+ { name: 'plugin', internalType: 'address', type: 'address', indexed: true },
+ { name: 'preparedSetupId', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ { name: 'appliedSetupId', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ ],
+ name: 'UpdateApplied',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'sender', internalType: 'address', type: 'address', indexed: true },
+ { name: 'dao', internalType: 'address', type: 'address', indexed: true },
+ { name: 'preparedSetupId', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ { name: 'pluginSetupRepo', internalType: 'contract PluginRepo', type: 'address', indexed: true },
+ {
+ name: 'versionTag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ indexed: false,
+ },
+ {
+ name: 'setupPayload',
+ internalType: 'struct IPluginSetup.SetupPayload',
+ type: 'tuple',
+ components: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ { name: 'currentHelpers', internalType: 'address[]', type: 'address[]' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ indexed: false,
+ },
+ {
+ name: 'preparedSetupData',
+ internalType: 'struct IPluginSetup.PreparedSetupData',
+ type: 'tuple',
+ components: [
+ { name: 'helpers', internalType: 'address[]', type: 'address[]' },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ indexed: false,
+ },
+ { name: 'initData', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'UpdatePrepared',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'APPLY_INSTALLATION_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'APPLY_UNINSTALLATION_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'APPLY_UPDATE_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ {
+ name: '_params',
+ internalType: 'struct PluginSetupProcessor.ApplyInstallationParams',
+ type: 'tuple',
+ components: [
+ {
+ name: 'pluginSetupRef',
+ internalType: 'struct PluginSetupRef',
+ type: 'tuple',
+ components: [
+ {
+ name: 'versionTag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ { name: 'pluginSetupRepo', internalType: 'contract PluginRepo', type: 'address' },
+ ],
+ },
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ { name: 'helpersHash', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ name: 'applyInstallation',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ {
+ name: '_params',
+ internalType: 'struct PluginSetupProcessor.ApplyUninstallationParams',
+ type: 'tuple',
+ components: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ {
+ name: 'pluginSetupRef',
+ internalType: 'struct PluginSetupRef',
+ type: 'tuple',
+ components: [
+ {
+ name: 'versionTag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ { name: 'pluginSetupRepo', internalType: 'contract PluginRepo', type: 'address' },
+ ],
+ },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ ],
+ name: 'applyUninstallation',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ {
+ name: '_params',
+ internalType: 'struct PluginSetupProcessor.ApplyUpdateParams',
+ type: 'tuple',
+ components: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ {
+ name: 'pluginSetupRef',
+ internalType: 'struct PluginSetupRef',
+ type: 'tuple',
+ components: [
+ {
+ name: 'versionTag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ { name: 'pluginSetupRepo', internalType: 'contract PluginRepo', type: 'address' },
+ ],
+ },
+ { name: 'initData', internalType: 'bytes', type: 'bytes' },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ { name: 'helpersHash', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ name: 'applyUpdate',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ {
+ name: '_params',
+ internalType: 'struct PluginSetupProcessor.PrepareInstallationParams',
+ type: 'tuple',
+ components: [
+ {
+ name: 'pluginSetupRef',
+ internalType: 'struct PluginSetupRef',
+ type: 'tuple',
+ components: [
+ {
+ name: 'versionTag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ { name: 'pluginSetupRepo', internalType: 'contract PluginRepo', type: 'address' },
+ ],
+ },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ name: 'prepareInstallation',
+ outputs: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ {
+ name: 'preparedSetupData',
+ internalType: 'struct IPluginSetup.PreparedSetupData',
+ type: 'tuple',
+ components: [
+ { name: 'helpers', internalType: 'address[]', type: 'address[]' },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ {
+ name: '_params',
+ internalType: 'struct PluginSetupProcessor.PrepareUninstallationParams',
+ type: 'tuple',
+ components: [
+ {
+ name: 'pluginSetupRef',
+ internalType: 'struct PluginSetupRef',
+ type: 'tuple',
+ components: [
+ {
+ name: 'versionTag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ { name: 'pluginSetupRepo', internalType: 'contract PluginRepo', type: 'address' },
+ ],
+ },
+ {
+ name: 'setupPayload',
+ internalType: 'struct IPluginSetup.SetupPayload',
+ type: 'tuple',
+ components: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ { name: 'currentHelpers', internalType: 'address[]', type: 'address[]' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ },
+ ],
+ name: 'prepareUninstallation',
+ outputs: [
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'address', type: 'address' },
+ {
+ name: '_params',
+ internalType: 'struct PluginSetupProcessor.PrepareUpdateParams',
+ type: 'tuple',
+ components: [
+ {
+ name: 'currentVersionTag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ {
+ name: 'newVersionTag',
+ internalType: 'struct PluginRepo.Tag',
+ type: 'tuple',
+ components: [
+ { name: 'release', internalType: 'uint8', type: 'uint8' },
+ { name: 'build', internalType: 'uint16', type: 'uint16' },
+ ],
+ },
+ { name: 'pluginSetupRepo', internalType: 'contract PluginRepo', type: 'address' },
+ {
+ name: 'setupPayload',
+ internalType: 'struct IPluginSetup.SetupPayload',
+ type: 'tuple',
+ components: [
+ { name: 'plugin', internalType: 'address', type: 'address' },
+ { name: 'currentHelpers', internalType: 'address[]', type: 'address[]' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ ],
+ },
+ ],
+ name: 'prepareUpdate',
+ outputs: [
+ { name: 'initData', internalType: 'bytes', type: 'bytes' },
+ {
+ name: 'preparedSetupData',
+ internalType: 'struct IPluginSetup.PreparedSetupData',
+ type: 'tuple',
+ components: [
+ { name: 'helpers', internalType: 'address[]', type: 'address[]' },
+ {
+ name: 'permissions',
+ internalType: 'struct PermissionLib.MultiTargetPermission[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'operation', internalType: 'enum PermissionLib.Operation', type: 'uint8' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'condition', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'repoRegistry',
+ outputs: [{ name: '', internalType: 'contract PluginRepoRegistry', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'states',
+ outputs: [
+ { name: 'blockNumber', internalType: 'uint256', type: 'uint256' },
+ { name: 'currentAppliedSetupId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'pluginInstallationId', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'preparedSetupId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'validatePreparedSetupId',
+ outputs: [],
+ },
+] as const
+
+export const pluginSetupProcessorAddress = '0xE8B5d8D66a02CD1b9Bd32a4064D7ABa45F51305e' as const
+
+export const pluginSetupProcessorConfig = {
+ address: pluginSetupProcessorAddress,
+ abi: pluginSetupProcessorABI,
+} as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// PluginUUPSUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const pluginUupsUpgradeableABI = [
+ {
+ type: 'error',
+ inputs: [
+ { name: 'dao', internalType: 'address', type: 'address' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'DaoUnauthorized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'UPGRADE_PLUGIN_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'dao',
+ outputs: [{ name: '', internalType: 'contract IDAO', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'implementation',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'pluginType',
+ outputs: [{ name: '', internalType: 'enum IPlugin.PluginType', type: 'uint8' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newImplementation', internalType: 'address', type: 'address' }],
+ name: 'upgradeTo',
+ outputs: [],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'newImplementation', internalType: 'address', type: 'address' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'upgradeToAndCall',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ProposalUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const proposalUpgradeableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'proposalId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'creator', internalType: 'address', type: 'address', indexed: true },
+ { name: 'startDate', internalType: 'uint64', type: 'uint64', indexed: false },
+ { name: 'endDate', internalType: 'uint64', type: 'uint64', indexed: false },
+ { name: 'metadata', internalType: 'bytes', type: 'bytes', indexed: false },
+ {
+ name: 'actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ indexed: false,
+ },
+ { name: 'allowFailureMap', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'ProposalCreated',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'proposalId', internalType: 'uint256', type: 'uint256', indexed: true }],
+ name: 'ProposalExecuted',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proposalCount',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ProtocolVersion
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const protocolVersionABI = [
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Proxy
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const proxyABI = [
+ { stateMutability: 'payable', type: 'fallback' },
+ { stateMutability: 'payable', type: 'receive' },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Resolver
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const resolverABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'contentType', internalType: 'uint256', type: 'uint256', indexed: true },
+ ],
+ name: 'ABIChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'a', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AddrChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'coinType', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'newAddress', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'AddressChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'hash', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ ],
+ name: 'ContentChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'hash', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'ContenthashChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'name', internalType: 'bytes', type: 'bytes', indexed: false },
+ { name: 'resource', internalType: 'uint16', type: 'uint16', indexed: false },
+ { name: 'record', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'DNSRecordChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'name', internalType: 'bytes', type: 'bytes', indexed: false },
+ { name: 'resource', internalType: 'uint16', type: 'uint16', indexed: false },
+ ],
+ name: 'DNSRecordDeleted',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'lastzonehash', internalType: 'bytes', type: 'bytes', indexed: false },
+ { name: 'zonehash', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'DNSZonehashChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'interfaceID', internalType: 'bytes4', type: 'bytes4', indexed: true },
+ { name: 'implementer', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'InterfaceChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'name', internalType: 'string', type: 'string', indexed: false },
+ ],
+ name: 'NameChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'x', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ { name: 'y', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ ],
+ name: 'PubkeyChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32', indexed: true },
+ { name: 'indexedKey', internalType: 'string', type: 'string', indexed: true },
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'value', internalType: 'string', type: 'string', indexed: false },
+ ],
+ name: 'TextChanged',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'contentTypes', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'ABI',
+ outputs: [
+ { name: '', internalType: 'uint256', type: 'uint256' },
+ { name: '', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'addr',
+ outputs: [{ name: '', internalType: 'address payable', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'coinType', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'addr',
+ outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'content',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'contenthash',
+ outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'name', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'resource', internalType: 'uint16', type: 'uint16' },
+ ],
+ name: 'dnsRecord',
+ outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'interfaceID', internalType: 'bytes4', type: 'bytes4' },
+ ],
+ name: 'interfaceImplementer',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }],
+ name: 'multicall',
+ outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'nodehash', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'data', internalType: 'bytes[]', type: 'bytes[]' },
+ ],
+ name: 'multicallWithNodeCheck',
+ outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'multihash',
+ outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'name',
+ outputs: [{ name: '', internalType: 'string', type: 'string' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'pubkey',
+ outputs: [
+ { name: 'x', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'y', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'name', internalType: 'bytes', type: 'bytes' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'resolve',
+ outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'contentType', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'setABI',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'coinType', internalType: 'uint256', type: 'uint256' },
+ { name: 'a', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'setAddr',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'addr', internalType: 'address', type: 'address' },
+ ],
+ name: 'setAddr',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'hash', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'setContent',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'hash', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'setContenthash',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'setDnsrr',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'interfaceID', internalType: 'bytes4', type: 'bytes4' },
+ { name: 'implementer', internalType: 'address', type: 'address' },
+ ],
+ name: 'setInterface',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'hash', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'setMultihash',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: '_name', internalType: 'string', type: 'string' },
+ ],
+ name: 'setName',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'x', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'y', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'setPubkey',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'key', internalType: 'string', type: 'string' },
+ { name: 'value', internalType: 'string', type: 'string' },
+ ],
+ name: 'setText',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'node', internalType: 'bytes32', type: 'bytes32' },
+ { name: 'key', internalType: 'string', type: 'string' },
+ ],
+ name: 'text',
+ outputs: [{ name: '', internalType: 'string', type: 'string' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'node', internalType: 'bytes32', type: 'bytes32' }],
+ name: 'zonehash',
+ outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// StdInvariant
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const stdInvariantABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'excludeArtifacts',
+ outputs: [{ name: 'excludedArtifacts_', internalType: 'string[]', type: 'string[]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'excludeContracts',
+ outputs: [{ name: 'excludedContracts_', internalType: 'address[]', type: 'address[]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'excludeSenders',
+ outputs: [{ name: 'excludedSenders_', internalType: 'address[]', type: 'address[]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetArtifactSelectors',
+ outputs: [
+ {
+ name: 'targetedArtifactSelectors_',
+ internalType: 'struct StdInvariant.FuzzSelector[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'addr', internalType: 'address', type: 'address' },
+ { name: 'selectors', internalType: 'bytes4[]', type: 'bytes4[]' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetArtifacts',
+ outputs: [{ name: 'targetedArtifacts_', internalType: 'string[]', type: 'string[]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetContracts',
+ outputs: [{ name: 'targetedContracts_', internalType: 'address[]', type: 'address[]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetInterfaces',
+ outputs: [
+ {
+ name: 'targetedInterfaces_',
+ internalType: 'struct StdInvariant.FuzzInterface[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'addr', internalType: 'address', type: 'address' },
+ { name: 'artifacts', internalType: 'string[]', type: 'string[]' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetSelectors',
+ outputs: [
+ {
+ name: 'targetedSelectors_',
+ internalType: 'struct StdInvariant.FuzzSelector[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'addr', internalType: 'address', type: 'address' },
+ { name: 'selectors', internalType: 'bytes4[]', type: 'bytes4[]' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetSenders',
+ outputs: [{ name: 'targetedSenders_', internalType: 'address[]', type: 'address[]' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TestnetERC20
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const testnetErc20ABI = [
+ {
+ stateMutability: 'nonpayable',
+ type: 'constructor',
+ inputs: [
+ { name: 'name', internalType: 'string', type: 'string' },
+ { name: 'symbol', internalType: 'string', type: 'string' },
+ { name: 'decimals_', internalType: 'uint8', type: 'uint8' },
+ ],
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address', indexed: true },
+ { name: 'spender', internalType: 'address', type: 'address', indexed: true },
+ { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'Approval',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },
+ { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },
+ ],
+ name: 'OwnershipTransferred',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'from', internalType: 'address', type: 'address', indexed: true },
+ { name: 'to', internalType: 'address', type: 'address', indexed: true },
+ { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'Transfer',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: 'owner', internalType: 'address', type: 'address' },
+ { name: 'spender', internalType: 'address', type: 'address' },
+ ],
+ name: 'allowance',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'approve',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: 'account', internalType: 'address', type: 'address' }],
+ name: 'balanceOf',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'decimals',
+ outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'subtractedValue', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'decreaseAllowance',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'spender', internalType: 'address', type: 'address' },
+ { name: 'addedValue', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'increaseAllowance',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'mint',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'name',
+ outputs: [{ name: '', internalType: 'string', type: 'string' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'owner',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ { stateMutability: 'nonpayable', type: 'function', inputs: [], name: 'renounceOwnership', outputs: [] },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'symbol',
+ outputs: [{ name: '', internalType: 'string', type: 'string' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'totalSupply',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'transfer',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'from', internalType: 'address', type: 'address' },
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'transferFrom',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],
+ name: 'transferOwnership',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TestnetTokenFaucet
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const testnetTokenFaucetABI = [
+ { type: 'error', inputs: [], name: 'TokenDoesNotExist' },
+ { type: 'error', inputs: [], name: 'TokenExists' },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },
+ { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },
+ ],
+ name: 'OwnershipTransferred',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ name: 'allTokens',
+ outputs: [
+ { name: 'token', internalType: 'contract TestnetERC20', type: 'address' },
+ { name: 'symbol', internalType: 'string', type: 'string' },
+ ],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'name', internalType: 'string', type: 'string' },
+ { name: 'symbol', internalType: 'string', type: 'string' },
+ { name: 'decimals', internalType: 'uint8', type: 'uint8' },
+ ],
+ name: 'create',
+ outputs: [{ name: 'token', internalType: 'contract TestnetERC20', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'token', internalType: 'contract TestnetERC20', type: 'address' },
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'drip',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: 'symbol', internalType: 'string', type: 'string' },
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'amount', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'drip',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'owner',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ { stateMutability: 'nonpayable', type: 'function', inputs: [], name: 'renounceOwnership', outputs: [] },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'tokenCount',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '', internalType: 'string', type: 'string' }],
+ name: 'tokenWithSymbol',
+ outputs: [{ name: '', internalType: 'contract TestnetERC20', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],
+ name: 'transferOwnership',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TimeShiftLib
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const timeShiftLibABI = [{ type: 'error', inputs: [], name: 'InvalidTimeShift' }] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TokenVoting
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const tokenVotingABI = [
+ {
+ type: 'error',
+ inputs: [
+ { name: 'dao', internalType: 'address', type: 'address' },
+ { name: 'where', internalType: 'address', type: 'address' },
+ { name: 'who', internalType: 'address', type: 'address' },
+ { name: 'permissionId', internalType: 'bytes32', type: 'bytes32' },
+ ],
+ name: 'DaoUnauthorized',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'limit', internalType: 'uint64', type: 'uint64' },
+ { name: 'actual', internalType: 'uint64', type: 'uint64' },
+ ],
+ name: 'DateOutOfBounds',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'limit', internalType: 'uint64', type: 'uint64' },
+ { name: 'actual', internalType: 'uint64', type: 'uint64' },
+ ],
+ name: 'MinDurationOutOfBounds',
+ },
+ { type: 'error', inputs: [], name: 'NoVotingPower' },
+ {
+ type: 'error',
+ inputs: [{ name: 'sender', internalType: 'address', type: 'address' }],
+ name: 'ProposalCreationForbidden',
+ },
+ {
+ type: 'error',
+ inputs: [{ name: 'proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'ProposalExecutionForbidden',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'limit', internalType: 'uint256', type: 'uint256' },
+ { name: 'actual', internalType: 'uint256', type: 'uint256' },
+ ],
+ name: 'RatioOutOfBounds',
+ },
+ {
+ type: 'error',
+ inputs: [
+ { name: 'proposalId', internalType: 'uint256', type: 'uint256' },
+ { name: 'account', internalType: 'address', type: 'address' },
+ { name: 'voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' },
+ ],
+ name: 'VoteCastForbidden',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'members', internalType: 'address[]', type: 'address[]', indexed: false }],
+ name: 'MembersAdded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'members', internalType: 'address[]', type: 'address[]', indexed: false }],
+ name: 'MembersRemoved',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'definingContract', internalType: 'address', type: 'address', indexed: true }],
+ name: 'MembershipContractAnnounced',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'proposalId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'creator', internalType: 'address', type: 'address', indexed: true },
+ { name: 'startDate', internalType: 'uint64', type: 'uint64', indexed: false },
+ { name: 'endDate', internalType: 'uint64', type: 'uint64', indexed: false },
+ { name: 'metadata', internalType: 'bytes', type: 'bytes', indexed: false },
+ {
+ name: 'actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ indexed: false,
+ },
+ { name: 'allowFailureMap', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'ProposalCreated',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'proposalId', internalType: 'uint256', type: 'uint256', indexed: true }],
+ name: 'ProposalExecuted',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'proposalId', internalType: 'uint256', type: 'uint256', indexed: true },
+ { name: 'voter', internalType: 'address', type: 'address', indexed: true },
+ { name: 'voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8', indexed: false },
+ { name: 'votingPower', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'VoteCast',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'votingMode', internalType: 'enum MajorityVotingBase.VotingMode', type: 'uint8', indexed: false },
+ { name: 'supportThreshold', internalType: 'uint32', type: 'uint32', indexed: false },
+ { name: 'minParticipation', internalType: 'uint32', type: 'uint32', indexed: false },
+ { name: 'minDuration', internalType: 'uint64', type: 'uint64', indexed: false },
+ { name: 'minProposerVotingPower', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'VotingSettingsUpdated',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'UPDATE_VOTING_SETTINGS_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'UPGRADE_PLUGIN_PERMISSION_ID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'canExecute',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_proposalId', internalType: 'uint256', type: 'uint256' },
+ { name: '_voter', internalType: 'address', type: 'address' },
+ { name: '_voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' },
+ ],
+ name: 'canVote',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_metadata', internalType: 'bytes', type: 'bytes' },
+ {
+ name: '_actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ { name: '_allowFailureMap', internalType: 'uint256', type: 'uint256' },
+ { name: '_startDate', internalType: 'uint64', type: 'uint64' },
+ { name: '_endDate', internalType: 'uint64', type: 'uint64' },
+ { name: '_voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' },
+ { name: '_tryEarlyExecution', internalType: 'bool', type: 'bool' },
+ ],
+ name: 'createProposal',
+ outputs: [{ name: 'proposalId', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'dao',
+ outputs: [{ name: '', internalType: 'contract IDAO', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'execute',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'getProposal',
+ outputs: [
+ { name: 'open', internalType: 'bool', type: 'bool' },
+ { name: 'executed', internalType: 'bool', type: 'bool' },
+ {
+ name: 'parameters',
+ internalType: 'struct MajorityVotingBase.ProposalParameters',
+ type: 'tuple',
+ components: [
+ { name: 'votingMode', internalType: 'enum MajorityVotingBase.VotingMode', type: 'uint8' },
+ { name: 'supportThreshold', internalType: 'uint32', type: 'uint32' },
+ { name: 'startDate', internalType: 'uint64', type: 'uint64' },
+ { name: 'endDate', internalType: 'uint64', type: 'uint64' },
+ { name: 'snapshotBlock', internalType: 'uint64', type: 'uint64' },
+ { name: 'minVotingPower', internalType: 'uint256', type: 'uint256' },
+ ],
+ },
+ {
+ name: 'tally',
+ internalType: 'struct MajorityVotingBase.Tally',
+ type: 'tuple',
+ components: [
+ { name: 'abstain', internalType: 'uint256', type: 'uint256' },
+ { name: 'yes', internalType: 'uint256', type: 'uint256' },
+ { name: 'no', internalType: 'uint256', type: 'uint256' },
+ ],
+ },
+ {
+ name: 'actions',
+ internalType: 'struct IDAO.Action[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'to', internalType: 'address', type: 'address' },
+ { name: 'value', internalType: 'uint256', type: 'uint256' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ },
+ { name: 'allowFailureMap', internalType: 'uint256', type: 'uint256' },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [
+ { name: '_proposalId', internalType: 'uint256', type: 'uint256' },
+ { name: '_voter', internalType: 'address', type: 'address' },
+ ],
+ name: 'getVoteOption',
+ outputs: [{ name: '', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'getVotingToken',
+ outputs: [{ name: '', internalType: 'contract IVotesUpgradeable', type: 'address' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'implementation',
+ outputs: [{ name: '', internalType: 'address', type: 'address' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_dao', internalType: 'contract IDAO', type: 'address' },
+ {
+ name: '_votingSettings',
+ internalType: 'struct MajorityVotingBase.VotingSettings',
+ type: 'tuple',
+ components: [
+ { name: 'votingMode', internalType: 'enum MajorityVotingBase.VotingMode', type: 'uint8' },
+ { name: 'supportThreshold', internalType: 'uint32', type: 'uint32' },
+ { name: 'minParticipation', internalType: 'uint32', type: 'uint32' },
+ { name: 'minDuration', internalType: 'uint64', type: 'uint64' },
+ { name: 'minProposerVotingPower', internalType: 'uint256', type: 'uint256' },
+ ],
+ },
+ { name: '_token', internalType: 'contract IVotesUpgradeable', type: 'address' },
+ ],
+ name: 'initialize',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_account', internalType: 'address', type: 'address' }],
+ name: 'isMember',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'isMinParticipationReached',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'isSupportThresholdReached',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_proposalId', internalType: 'uint256', type: 'uint256' }],
+ name: 'isSupportThresholdReachedEarly',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'minDuration',
+ outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'minParticipation',
+ outputs: [{ name: '', internalType: 'uint32', type: 'uint32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'minProposerVotingPower',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'pluginType',
+ outputs: [{ name: '', internalType: 'enum IPlugin.PluginType', type: 'uint8' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proposalCount',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'pure',
+ type: 'function',
+ inputs: [],
+ name: 'protocolVersion',
+ outputs: [{ name: '', internalType: 'uint8[3]', type: 'uint8[3]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'supportThreshold',
+ outputs: [{ name: '', internalType: 'uint32', type: 'uint32' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_interfaceId', internalType: 'bytes4', type: 'bytes4' }],
+ name: 'supportsInterface',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [{ name: '_blockNumber', internalType: 'uint256', type: 'uint256' }],
+ name: 'totalVotingPower',
+ outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ {
+ name: '_votingSettings',
+ internalType: 'struct MajorityVotingBase.VotingSettings',
+ type: 'tuple',
+ components: [
+ { name: 'votingMode', internalType: 'enum MajorityVotingBase.VotingMode', type: 'uint8' },
+ { name: 'supportThreshold', internalType: 'uint32', type: 'uint32' },
+ { name: 'minParticipation', internalType: 'uint32', type: 'uint32' },
+ { name: 'minDuration', internalType: 'uint64', type: 'uint64' },
+ { name: 'minProposerVotingPower', internalType: 'uint256', type: 'uint256' },
+ ],
+ },
+ ],
+ name: 'updateVotingSettings',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newImplementation', internalType: 'address', type: 'address' }],
+ name: 'upgradeTo',
+ outputs: [],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'newImplementation', internalType: 'address', type: 'address' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'upgradeToAndCall',
+ outputs: [],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [
+ { name: '_proposalId', internalType: 'uint256', type: 'uint256' },
+ { name: '_voteOption', internalType: 'enum IMajorityVoting.VoteOption', type: 'uint8' },
+ { name: '_tryEarlyExecution', internalType: 'bool', type: 'bool' },
+ ],
+ name: 'vote',
+ outputs: [],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'votingMode',
+ outputs: [{ name: '', internalType: 'enum MajorityVotingBase.VotingMode', type: 'uint8' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TribeTest
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const tribeTestABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: '', internalType: 'string', type: 'string', indexed: false }],
+ name: 'log',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: '', internalType: 'address', type: 'address', indexed: false }],
+ name: 'log_address',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'val', internalType: 'uint256[]', type: 'uint256[]', indexed: false }],
+ name: 'log_array',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'val', internalType: 'int256[]', type: 'int256[]', indexed: false }],
+ name: 'log_array',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'val', internalType: 'address[]', type: 'address[]', indexed: false }],
+ name: 'log_array',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: '', internalType: 'bytes', type: 'bytes', indexed: false }],
+ name: 'log_bytes',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32', indexed: false }],
+ name: 'log_bytes32',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: '', internalType: 'int256', type: 'int256', indexed: false }],
+ name: 'log_int',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'val', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'log_named_address',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'val', internalType: 'uint256[]', type: 'uint256[]', indexed: false },
+ ],
+ name: 'log_named_array',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'val', internalType: 'int256[]', type: 'int256[]', indexed: false },
+ ],
+ name: 'log_named_array',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'val', internalType: 'address[]', type: 'address[]', indexed: false },
+ ],
+ name: 'log_named_array',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'val', internalType: 'bytes', type: 'bytes', indexed: false },
+ ],
+ name: 'log_named_bytes',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'val', internalType: 'bytes32', type: 'bytes32', indexed: false },
+ ],
+ name: 'log_named_bytes32',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'val', internalType: 'int256', type: 'int256', indexed: false },
+ { name: 'decimals', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'log_named_decimal_int',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'val', internalType: 'uint256', type: 'uint256', indexed: false },
+ { name: 'decimals', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'log_named_decimal_uint',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'val', internalType: 'int256', type: 'int256', indexed: false },
+ ],
+ name: 'log_named_int',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'val', internalType: 'string', type: 'string', indexed: false },
+ ],
+ name: 'log_named_string',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'key', internalType: 'string', type: 'string', indexed: false },
+ { name: 'val', internalType: 'uint256', type: 'uint256', indexed: false },
+ ],
+ name: 'log_named_uint',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: '', internalType: 'string', type: 'string', indexed: false }],
+ name: 'log_string',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: '', internalType: 'uint256', type: 'uint256', indexed: false }],
+ name: 'log_uint',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: '', internalType: 'bytes', type: 'bytes', indexed: false }],
+ name: 'logs',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'IS_TEST',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'excludeArtifacts',
+ outputs: [{ name: 'excludedArtifacts_', internalType: 'string[]', type: 'string[]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'excludeContracts',
+ outputs: [{ name: 'excludedContracts_', internalType: 'address[]', type: 'address[]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'excludeSenders',
+ outputs: [{ name: 'excludedSenders_', internalType: 'address[]', type: 'address[]' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [],
+ name: 'failed',
+ outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetArtifactSelectors',
+ outputs: [
+ {
+ name: 'targetedArtifactSelectors_',
+ internalType: 'struct StdInvariant.FuzzSelector[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'addr', internalType: 'address', type: 'address' },
+ { name: 'selectors', internalType: 'bytes4[]', type: 'bytes4[]' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetArtifacts',
+ outputs: [{ name: 'targetedArtifacts_', internalType: 'string[]', type: 'string[]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetContracts',
+ outputs: [{ name: 'targetedContracts_', internalType: 'address[]', type: 'address[]' }],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetInterfaces',
+ outputs: [
+ {
+ name: 'targetedInterfaces_',
+ internalType: 'struct StdInvariant.FuzzInterface[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'addr', internalType: 'address', type: 'address' },
+ { name: 'artifacts', internalType: 'string[]', type: 'string[]' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetSelectors',
+ outputs: [
+ {
+ name: 'targetedSelectors_',
+ internalType: 'struct StdInvariant.FuzzSelector[]',
+ type: 'tuple[]',
+ components: [
+ { name: 'addr', internalType: 'address', type: 'address' },
+ { name: 'selectors', internalType: 'bytes4[]', type: 'bytes4[]' },
+ ],
+ },
+ ],
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'targetSenders',
+ outputs: [{ name: 'targetedSenders_', internalType: 'address[]', type: 'address[]' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// UUPSUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const uupsUpgradeableABI = [
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [
+ { name: 'previousAdmin', internalType: 'address', type: 'address', indexed: false },
+ { name: 'newAdmin', internalType: 'address', type: 'address', indexed: false },
+ ],
+ name: 'AdminChanged',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'beacon', internalType: 'address', type: 'address', indexed: true }],
+ name: 'BeaconUpgraded',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }],
+ name: 'Initialized',
+ },
+ {
+ type: 'event',
+ anonymous: false,
+ inputs: [{ name: 'implementation', internalType: 'address', type: 'address', indexed: true }],
+ name: 'Upgraded',
+ },
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+ {
+ stateMutability: 'nonpayable',
+ type: 'function',
+ inputs: [{ name: 'newImplementation', internalType: 'address', type: 'address' }],
+ name: 'upgradeTo',
+ outputs: [],
+ },
+ {
+ stateMutability: 'payable',
+ type: 'function',
+ inputs: [
+ { name: 'newImplementation', internalType: 'address', type: 'address' },
+ { name: 'data', internalType: 'bytes', type: 'bytes' },
+ ],
+ name: 'upgradeToAndCall',
+ outputs: [],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC1822Proxiable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc1822ProxiableABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// IERC1822ProxiableUpgradeable
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+export const ierc1822ProxiableUpgradeableABI = [
+ {
+ stateMutability: 'view',
+ type: 'function',
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
+ },
+] as const
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// React
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetABI}__.
+ */
+export function useBudgetRead<
+ TFunctionName extends string,
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi'> = {} as any) {
+ return useContractRead({ abi: budgetABI, ...config } as UseContractReadConfig<
+ typeof budgetABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"ROOT_BUDGET_PERMISSION_ID"`.
+ */
+export function useBudgetRootBudgetPermissionId<
+ TFunctionName extends 'ROOT_BUDGET_PERMISSION_ID',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return useContractRead({
+ abi: budgetABI,
+ functionName: 'ROOT_BUDGET_PERMISSION_ID',
+ ...config,
+ } as UseContractReadConfig)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"UPGRADE_PLUGIN_PERMISSION_ID"`.
+ */
+export function useBudgetUpgradePluginPermissionId<
+ TFunctionName extends 'UPGRADE_PLUGIN_PERMISSION_ID',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return useContractRead({
+ abi: budgetABI,
+ functionName: 'UPGRADE_PLUGIN_PERMISSION_ID',
+ ...config,
+ } as UseContractReadConfig)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"allowances"`.
+ */
+export function useBudgetAllowances<
+ TFunctionName extends 'allowances',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return useContractRead({ abi: budgetABI, functionName: 'allowances', ...config } as UseContractReadConfig<
+ typeof budgetABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"allowancesCount"`.
+ */
+export function useBudgetAllowancesCount<
+ TFunctionName extends 'allowancesCount',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return useContractRead({ abi: budgetABI, functionName: 'allowancesCount', ...config } as UseContractReadConfig<
+ typeof budgetABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"dao"`.
+ */
+export function useBudgetDao<
+ TFunctionName extends 'dao',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return useContractRead({ abi: budgetABI, functionName: 'dao', ...config } as UseContractReadConfig<
+ typeof budgetABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"implementation"`.
+ */
+export function useBudgetImplementation<
+ TFunctionName extends 'implementation',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return useContractRead({ abi: budgetABI, functionName: 'implementation', ...config } as UseContractReadConfig<
+ typeof budgetABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"isAdminOnAllowance"`.
+ */
+export function useBudgetIsAdminOnAllowance<
+ TFunctionName extends 'isAdminOnAllowance',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return useContractRead({ abi: budgetABI, functionName: 'isAdminOnAllowance', ...config } as UseContractReadConfig<
+ typeof budgetABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"pluginType"`.
+ */
+export function useBudgetPluginType<
+ TFunctionName extends 'pluginType',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return useContractRead({ abi: budgetABI, functionName: 'pluginType', ...config } as UseContractReadConfig<
+ typeof budgetABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"protocolVersion"`.
+ */
+export function useBudgetProtocolVersion<
+ TFunctionName extends 'protocolVersion',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return useContractRead({ abi: budgetABI, functionName: 'protocolVersion', ...config } as UseContractReadConfig<
+ typeof budgetABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"proxiableUUID"`.
+ */
+export function useBudgetProxiableUuid<
+ TFunctionName extends 'proxiableUUID',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return useContractRead({ abi: budgetABI, functionName: 'proxiableUUID', ...config } as UseContractReadConfig<
+ typeof budgetABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"supportsInterface"`.
+ */
+export function useBudgetSupportsInterface<
+ TFunctionName extends 'supportsInterface',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return useContractRead({ abi: budgetABI, functionName: 'supportsInterface', ...config } as UseContractReadConfig<
+ typeof budgetABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetABI}__.
+ */
+export function useBudgetWrite(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ TFunctionName,
+ TMode
+ >
+ : UseContractWriteConfig & {
+ abi?: never
+ } = {} as any,
+) {
+ return useContractWrite({ abi: budgetABI, ...config } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"createAllowance"`.
+ */
+export function useBudgetCreateAllowance(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'createAllowance',
+ TMode
+ > & { functionName?: 'createAllowance' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'createAllowance'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetABI,
+ functionName: 'createAllowance',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"debitAllowance"`.
+ */
+export function useBudgetDebitAllowance(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'debitAllowance',
+ TMode
+ > & { functionName?: 'debitAllowance' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'debitAllowance'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetABI,
+ functionName: 'debitAllowance',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"executeMultiPayment"`.
+ */
+export function useBudgetExecuteMultiPayment(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'executeMultiPayment',
+ TMode
+ > & { functionName?: 'executeMultiPayment' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'executeMultiPayment'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetABI,
+ functionName: 'executeMultiPayment',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"executePayment"`.
+ */
+export function useBudgetExecutePayment(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'executePayment',
+ TMode
+ > & { functionName?: 'executePayment' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'executePayment'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetABI,
+ functionName: 'executePayment',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"initialize"`.
+ */
+export function useBudgetInitialize(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'initialize',
+ TMode
+ > & { functionName?: 'initialize' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'initialize'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetABI,
+ functionName: 'initialize',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"setAllowanceAmount"`.
+ */
+export function useBudgetSetAllowanceAmount(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'setAllowanceAmount',
+ TMode
+ > & { functionName?: 'setAllowanceAmount' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'setAllowanceAmount'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetABI,
+ functionName: 'setAllowanceAmount',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"setAllowanceName"`.
+ */
+export function useBudgetSetAllowanceName(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'setAllowanceName',
+ TMode
+ > & { functionName?: 'setAllowanceName' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'setAllowanceName'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetABI,
+ functionName: 'setAllowanceName',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"setAllowanceSpender"`.
+ */
+export function useBudgetSetAllowanceSpender(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'setAllowanceSpender',
+ TMode
+ > & { functionName?: 'setAllowanceSpender' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'setAllowanceSpender'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetABI,
+ functionName: 'setAllowanceSpender',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"setAllowanceState"`.
+ */
+export function useBudgetSetAllowanceState(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'setAllowanceState',
+ TMode
+ > & { functionName?: 'setAllowanceState' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'setAllowanceState'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetABI,
+ functionName: 'setAllowanceState',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"upgradeTo"`.
+ */
+export function useBudgetUpgradeTo(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'upgradeTo',
+ TMode
+ > & { functionName?: 'upgradeTo' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'upgradeTo'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetABI,
+ functionName: 'upgradeTo',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"upgradeToAndCall"`.
+ */
+export function useBudgetUpgradeToAndCall(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'upgradeToAndCall',
+ TMode
+ > & { functionName?: 'upgradeToAndCall' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'upgradeToAndCall'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetABI,
+ functionName: 'upgradeToAndCall',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetABI}__.
+ */
+export function usePrepareBudgetWrite(
+ config: Omit, 'abi'> = {} as any,
+) {
+ return usePrepareContractWrite({ abi: budgetABI, ...config } as UsePrepareContractWriteConfig<
+ typeof budgetABI,
+ TFunctionName
+ >)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"createAllowance"`.
+ */
+export function usePrepareBudgetCreateAllowance(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetABI,
+ functionName: 'createAllowance',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"debitAllowance"`.
+ */
+export function usePrepareBudgetDebitAllowance(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetABI,
+ functionName: 'debitAllowance',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"executeMultiPayment"`.
+ */
+export function usePrepareBudgetExecuteMultiPayment(
+ config: Omit<
+ UsePrepareContractWriteConfig,
+ 'abi' | 'functionName'
+ > = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetABI,
+ functionName: 'executeMultiPayment',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"executePayment"`.
+ */
+export function usePrepareBudgetExecutePayment(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetABI,
+ functionName: 'executePayment',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"initialize"`.
+ */
+export function usePrepareBudgetInitialize(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetABI,
+ functionName: 'initialize',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"setAllowanceAmount"`.
+ */
+export function usePrepareBudgetSetAllowanceAmount(
+ config: Omit<
+ UsePrepareContractWriteConfig,
+ 'abi' | 'functionName'
+ > = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetABI,
+ functionName: 'setAllowanceAmount',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"setAllowanceName"`.
+ */
+export function usePrepareBudgetSetAllowanceName(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetABI,
+ functionName: 'setAllowanceName',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"setAllowanceSpender"`.
+ */
+export function usePrepareBudgetSetAllowanceSpender(
+ config: Omit<
+ UsePrepareContractWriteConfig,
+ 'abi' | 'functionName'
+ > = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetABI,
+ functionName: 'setAllowanceSpender',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"setAllowanceState"`.
+ */
+export function usePrepareBudgetSetAllowanceState(
+ config: Omit<
+ UsePrepareContractWriteConfig,
+ 'abi' | 'functionName'
+ > = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetABI,
+ functionName: 'setAllowanceState',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"upgradeTo"`.
+ */
+export function usePrepareBudgetUpgradeTo(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetABI,
+ functionName: 'upgradeTo',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetABI}__ and `functionName` set to `"upgradeToAndCall"`.
+ */
+export function usePrepareBudgetUpgradeToAndCall(
+ config: Omit, 'abi' | 'functionName'> = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetABI,
+ functionName: 'upgradeToAndCall',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__.
+ */
+export function useBudgetEvent(
+ config: Omit, 'abi'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, ...config } as UseContractEventConfig)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__ and `eventName` set to `"AdminChanged"`.
+ */
+export function useBudgetAdminChangedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, eventName: 'AdminChanged', ...config } as UseContractEventConfig<
+ typeof budgetABI,
+ 'AdminChanged'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__ and `eventName` set to `"AllowanceAmountChanged"`.
+ */
+export function useBudgetAllowanceAmountChangedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, eventName: 'AllowanceAmountChanged', ...config } as UseContractEventConfig<
+ typeof budgetABI,
+ 'AllowanceAmountChanged'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__ and `eventName` set to `"AllowanceCreated"`.
+ */
+export function useBudgetAllowanceCreatedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, eventName: 'AllowanceCreated', ...config } as UseContractEventConfig<
+ typeof budgetABI,
+ 'AllowanceCreated'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__ and `eventName` set to `"AllowanceDebited"`.
+ */
+export function useBudgetAllowanceDebitedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, eventName: 'AllowanceDebited', ...config } as UseContractEventConfig<
+ typeof budgetABI,
+ 'AllowanceDebited'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__ and `eventName` set to `"AllowanceNameChanged"`.
+ */
+export function useBudgetAllowanceNameChangedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, eventName: 'AllowanceNameChanged', ...config } as UseContractEventConfig<
+ typeof budgetABI,
+ 'AllowanceNameChanged'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__ and `eventName` set to `"AllowanceSpenderChanged"`.
+ */
+export function useBudgetAllowanceSpenderChangedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, eventName: 'AllowanceSpenderChanged', ...config } as UseContractEventConfig<
+ typeof budgetABI,
+ 'AllowanceSpenderChanged'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__ and `eventName` set to `"AllowanceStateChanged"`.
+ */
+export function useBudgetAllowanceStateChangedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, eventName: 'AllowanceStateChanged', ...config } as UseContractEventConfig<
+ typeof budgetABI,
+ 'AllowanceStateChanged'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__ and `eventName` set to `"BeaconUpgraded"`.
+ */
+export function useBudgetBeaconUpgradedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, eventName: 'BeaconUpgraded', ...config } as UseContractEventConfig<
+ typeof budgetABI,
+ 'BeaconUpgraded'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__ and `eventName` set to `"Initialized"`.
+ */
+export function useBudgetInitializedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, eventName: 'Initialized', ...config } as UseContractEventConfig<
+ typeof budgetABI,
+ 'Initialized'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__ and `eventName` set to `"MultiPaymentExecuted"`.
+ */
+export function useBudgetMultiPaymentExecutedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, eventName: 'MultiPaymentExecuted', ...config } as UseContractEventConfig<
+ typeof budgetABI,
+ 'MultiPaymentExecuted'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__ and `eventName` set to `"PaymentExecuted"`.
+ */
+export function useBudgetPaymentExecutedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, eventName: 'PaymentExecuted', ...config } as UseContractEventConfig<
+ typeof budgetABI,
+ 'PaymentExecuted'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link budgetABI}__ and `eventName` set to `"Upgraded"`.
+ */
+export function useBudgetUpgradedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: budgetABI, eventName: 'Upgraded', ...config } as UseContractEventConfig<
+ typeof budgetABI,
+ 'Upgraded'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetSetupABI}__.
+ */
+export function useBudgetSetupRead<
+ TFunctionName extends string,
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi'> = {} as any) {
+ return useContractRead({ abi: budgetSetupABI, ...config } as UseContractReadConfig<
+ typeof budgetSetupABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetSetupABI}__ and `functionName` set to `"implementation"`.
+ */
+export function useBudgetSetupImplementation<
+ TFunctionName extends 'implementation',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit<
+ UseContractReadConfig,
+ 'abi' | 'functionName'
+ > = {} as any,
+) {
+ return useContractRead({ abi: budgetSetupABI, functionName: 'implementation', ...config } as UseContractReadConfig<
+ typeof budgetSetupABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetSetupABI}__ and `functionName` set to `"prepareUninstallation"`.
+ */
+export function useBudgetSetupPrepareUninstallation<
+ TFunctionName extends 'prepareUninstallation',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit<
+ UseContractReadConfig,
+ 'abi' | 'functionName'
+ > = {} as any,
+) {
+ return useContractRead({
+ abi: budgetSetupABI,
+ functionName: 'prepareUninstallation',
+ ...config,
+ } as UseContractReadConfig)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetSetupABI}__ and `functionName` set to `"protocolVersion"`.
+ */
+export function useBudgetSetupProtocolVersion<
+ TFunctionName extends 'protocolVersion',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit<
+ UseContractReadConfig,
+ 'abi' | 'functionName'
+ > = {} as any,
+) {
+ return useContractRead({ abi: budgetSetupABI, functionName: 'protocolVersion', ...config } as UseContractReadConfig<
+ typeof budgetSetupABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link budgetSetupABI}__ and `functionName` set to `"supportsInterface"`.
+ */
+export function useBudgetSetupSupportsInterface<
+ TFunctionName extends 'supportsInterface',
+ TSelectData = ReadContractResult,
+>(
+ config: Omit<
+ UseContractReadConfig,
+ 'abi' | 'functionName'
+ > = {} as any,
+) {
+ return useContractRead({ abi: budgetSetupABI, functionName: 'supportsInterface', ...config } as UseContractReadConfig<
+ typeof budgetSetupABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetSetupABI}__.
+ */
+export function useBudgetSetupWrite(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ TFunctionName,
+ TMode
+ >
+ : UseContractWriteConfig & {
+ abi?: never
+ } = {} as any,
+) {
+ return useContractWrite({ abi: budgetSetupABI, ...config } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetSetupABI}__ and `functionName` set to `"prepareInstallation"`.
+ */
+export function useBudgetSetupPrepareInstallation(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'prepareInstallation',
+ TMode
+ > & { functionName?: 'prepareInstallation' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'prepareInstallation'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetSetupABI,
+ functionName: 'prepareInstallation',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link budgetSetupABI}__ and `functionName` set to `"prepareUpdate"`.
+ */
+export function useBudgetSetupPrepareUpdate(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'prepareUpdate',
+ TMode
+ > & { functionName?: 'prepareUpdate' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'prepareUpdate'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: budgetSetupABI,
+ functionName: 'prepareUpdate',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetSetupABI}__.
+ */
+export function usePrepareBudgetSetupWrite(
+ config: Omit, 'abi'> = {} as any,
+) {
+ return usePrepareContractWrite({ abi: budgetSetupABI, ...config } as UsePrepareContractWriteConfig<
+ typeof budgetSetupABI,
+ TFunctionName
+ >)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetSetupABI}__ and `functionName` set to `"prepareInstallation"`.
+ */
+export function usePrepareBudgetSetupPrepareInstallation(
+ config: Omit<
+ UsePrepareContractWriteConfig,
+ 'abi' | 'functionName'
+ > = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetSetupABI,
+ functionName: 'prepareInstallation',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link usePrepareContractWrite}__ with `abi` set to __{@link budgetSetupABI}__ and `functionName` set to `"prepareUpdate"`.
+ */
+export function usePrepareBudgetSetupPrepareUpdate(
+ config: Omit<
+ UsePrepareContractWriteConfig,
+ 'abi' | 'functionName'
+ > = {} as any,
+) {
+ return usePrepareContractWrite({
+ abi: budgetSetupABI,
+ functionName: 'prepareUpdate',
+ ...config,
+ } as UsePrepareContractWriteConfig)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link callbackHandlerABI}__.
+ */
+export function useCallbackHandlerEvent(
+ config: Omit, 'abi'> = {} as any,
+) {
+ return useContractEvent({ abi: callbackHandlerABI, ...config } as UseContractEventConfig<
+ typeof callbackHandlerABI,
+ TEventName
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link callbackHandlerABI}__ and `eventName` set to `"CallbackReceived"`.
+ */
+export function useCallbackHandlerCallbackReceivedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({
+ abi: callbackHandlerABI,
+ eventName: 'CallbackReceived',
+ ...config,
+ } as UseContractEventConfig)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link contextUpgradeableABI}__.
+ */
+export function useContextUpgradeableEvent(
+ config: Omit, 'abi'> = {} as any,
+) {
+ return useContractEvent({ abi: contextUpgradeableABI, ...config } as UseContractEventConfig<
+ typeof contextUpgradeableABI,
+ TEventName
+ >)
+}
+
+/**
+ * Wraps __{@link useContractEvent}__ with `abi` set to __{@link contextUpgradeableABI}__ and `eventName` set to `"Initialized"`.
+ */
+export function useContextUpgradeableInitializedEvent(
+ config: Omit, 'abi' | 'eventName'> = {} as any,
+) {
+ return useContractEvent({ abi: contextUpgradeableABI, eventName: 'Initialized', ...config } as UseContractEventConfig<
+ typeof contextUpgradeableABI,
+ 'Initialized'
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__.
+ */
+export function useDaoRead<
+ TFunctionName extends string,
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi'> = {} as any) {
+ return useContractRead({ abi: daoABI, ...config } as UseContractReadConfig)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"EXECUTE_PERMISSION_ID"`.
+ */
+export function useDaoExecutePermissionId<
+ TFunctionName extends 'EXECUTE_PERMISSION_ID',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({ abi: daoABI, functionName: 'EXECUTE_PERMISSION_ID', ...config } as UseContractReadConfig<
+ typeof daoABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"REGISTER_STANDARD_CALLBACK_PERMISSION_ID"`.
+ */
+export function useDaoRegisterStandardCallbackPermissionId<
+ TFunctionName extends 'REGISTER_STANDARD_CALLBACK_PERMISSION_ID',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({
+ abi: daoABI,
+ functionName: 'REGISTER_STANDARD_CALLBACK_PERMISSION_ID',
+ ...config,
+ } as UseContractReadConfig)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"ROOT_PERMISSION_ID"`.
+ */
+export function useDaoRootPermissionId<
+ TFunctionName extends 'ROOT_PERMISSION_ID',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({ abi: daoABI, functionName: 'ROOT_PERMISSION_ID', ...config } as UseContractReadConfig<
+ typeof daoABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"SET_METADATA_PERMISSION_ID"`.
+ */
+export function useDaoSetMetadataPermissionId<
+ TFunctionName extends 'SET_METADATA_PERMISSION_ID',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({
+ abi: daoABI,
+ functionName: 'SET_METADATA_PERMISSION_ID',
+ ...config,
+ } as UseContractReadConfig)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"SET_TRUSTED_FORWARDER_PERMISSION_ID"`.
+ */
+export function useDaoSetTrustedForwarderPermissionId<
+ TFunctionName extends 'SET_TRUSTED_FORWARDER_PERMISSION_ID',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({
+ abi: daoABI,
+ functionName: 'SET_TRUSTED_FORWARDER_PERMISSION_ID',
+ ...config,
+ } as UseContractReadConfig)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"UPGRADE_DAO_PERMISSION_ID"`.
+ */
+export function useDaoUpgradeDaoPermissionId<
+ TFunctionName extends 'UPGRADE_DAO_PERMISSION_ID',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({ abi: daoABI, functionName: 'UPGRADE_DAO_PERMISSION_ID', ...config } as UseContractReadConfig<
+ typeof daoABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"VALIDATE_SIGNATURE_PERMISSION_ID"`.
+ */
+export function useDaoValidateSignaturePermissionId<
+ TFunctionName extends 'VALIDATE_SIGNATURE_PERMISSION_ID',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({
+ abi: daoABI,
+ functionName: 'VALIDATE_SIGNATURE_PERMISSION_ID',
+ ...config,
+ } as UseContractReadConfig)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"daoURI"`.
+ */
+export function useDaoDaoUri<
+ TFunctionName extends 'daoURI',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({ abi: daoABI, functionName: 'daoURI', ...config } as UseContractReadConfig<
+ typeof daoABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"getTrustedForwarder"`.
+ */
+export function useDaoGetTrustedForwarder<
+ TFunctionName extends 'getTrustedForwarder',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({ abi: daoABI, functionName: 'getTrustedForwarder', ...config } as UseContractReadConfig<
+ typeof daoABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"hasPermission"`.
+ */
+export function useDaoHasPermission<
+ TFunctionName extends 'hasPermission',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({ abi: daoABI, functionName: 'hasPermission', ...config } as UseContractReadConfig<
+ typeof daoABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"isGranted"`.
+ */
+export function useDaoIsGranted<
+ TFunctionName extends 'isGranted',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({ abi: daoABI, functionName: 'isGranted', ...config } as UseContractReadConfig<
+ typeof daoABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"isValidSignature"`.
+ */
+export function useDaoIsValidSignature<
+ TFunctionName extends 'isValidSignature',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({ abi: daoABI, functionName: 'isValidSignature', ...config } as UseContractReadConfig<
+ typeof daoABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"protocolVersion"`.
+ */
+export function useDaoProtocolVersion<
+ TFunctionName extends 'protocolVersion',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({ abi: daoABI, functionName: 'protocolVersion', ...config } as UseContractReadConfig<
+ typeof daoABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"proxiableUUID"`.
+ */
+export function useDaoProxiableUuid<
+ TFunctionName extends 'proxiableUUID',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({ abi: daoABI, functionName: 'proxiableUUID', ...config } as UseContractReadConfig<
+ typeof daoABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"setSignatureValidator"`.
+ */
+export function useDaoSetSignatureValidator<
+ TFunctionName extends 'setSignatureValidator',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({ abi: daoABI, functionName: 'setSignatureValidator', ...config } as UseContractReadConfig<
+ typeof daoABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractRead}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"supportsInterface"`.
+ */
+export function useDaoSupportsInterface<
+ TFunctionName extends 'supportsInterface',
+ TSelectData = ReadContractResult,
+>(config: Omit, 'abi' | 'functionName'> = {} as any) {
+ return useContractRead({ abi: daoABI, functionName: 'supportsInterface', ...config } as UseContractReadConfig<
+ typeof daoABI,
+ TFunctionName,
+ TSelectData
+ >)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__.
+ */
+export function useDaoWrite(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig['request']['abi'], TFunctionName, TMode>
+ : UseContractWriteConfig & {
+ abi?: never
+ } = {} as any,
+) {
+ return useContractWrite({ abi: daoABI, ...config } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"applyMultiTargetPermissions"`.
+ */
+export function useDaoApplyMultiTargetPermissions(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'applyMultiTargetPermissions',
+ TMode
+ > & { functionName?: 'applyMultiTargetPermissions' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'applyMultiTargetPermissions'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: daoABI,
+ functionName: 'applyMultiTargetPermissions',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"applySingleTargetPermissions"`.
+ */
+export function useDaoApplySingleTargetPermissions(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'applySingleTargetPermissions',
+ TMode
+ > & { functionName?: 'applySingleTargetPermissions' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'applySingleTargetPermissions'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: daoABI,
+ functionName: 'applySingleTargetPermissions',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"deposit"`.
+ */
+export function useDaoDeposit(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'deposit',
+ TMode
+ > & { functionName?: 'deposit' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'deposit'
+ } = {} as any,
+) {
+ return useContractWrite({ abi: daoABI, functionName: 'deposit', ...config } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"execute"`.
+ */
+export function useDaoExecute(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'execute',
+ TMode
+ > & { functionName?: 'execute' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'execute'
+ } = {} as any,
+) {
+ return useContractWrite({ abi: daoABI, functionName: 'execute', ...config } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"grant"`.
+ */
+export function useDaoGrant(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig['request']['abi'], 'grant', TMode> & {
+ functionName?: 'grant'
+ }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'grant'
+ } = {} as any,
+) {
+ return useContractWrite({ abi: daoABI, functionName: 'grant', ...config } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"grantWithCondition"`.
+ */
+export function useDaoGrantWithCondition(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'grantWithCondition',
+ TMode
+ > & { functionName?: 'grantWithCondition' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'grantWithCondition'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: daoABI,
+ functionName: 'grantWithCondition',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"initialize"`.
+ */
+export function useDaoInitialize(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'initialize',
+ TMode
+ > & { functionName?: 'initialize' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'initialize'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: daoABI,
+ functionName: 'initialize',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"initializeFrom"`.
+ */
+export function useDaoInitializeFrom(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'initializeFrom',
+ TMode
+ > & { functionName?: 'initializeFrom' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'initializeFrom'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: daoABI,
+ functionName: 'initializeFrom',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"registerStandardCallback"`.
+ */
+export function useDaoRegisterStandardCallback(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'registerStandardCallback',
+ TMode
+ > & { functionName?: 'registerStandardCallback' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'registerStandardCallback'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: daoABI,
+ functionName: 'registerStandardCallback',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"revoke"`.
+ */
+export function useDaoRevoke(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig['request']['abi'], 'revoke', TMode> & {
+ functionName?: 'revoke'
+ }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'revoke'
+ } = {} as any,
+) {
+ return useContractWrite({ abi: daoABI, functionName: 'revoke', ...config } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"setDaoURI"`.
+ */
+export function useDaoSetDaoUri(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult['request']['abi'],
+ 'setDaoURI',
+ TMode
+ > & { functionName?: 'setDaoURI' }
+ : UseContractWriteConfig & {
+ abi?: never
+ functionName?: 'setDaoURI'
+ } = {} as any,
+) {
+ return useContractWrite({
+ abi: daoABI,
+ functionName: 'setDaoURI',
+ ...config,
+ } as any)
+}
+
+/**
+ * Wraps __{@link useContractWrite}__ with `abi` set to __{@link daoABI}__ and `functionName` set to `"setMetadata"`.
+ */
+export function useDaoSetMetadata(
+ config: TMode extends 'prepared'
+ ? UseContractWriteConfig<
+ PrepareWriteContractResult